]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/test/client/TestClient.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / test / client / TestClient.h
diff --git a/ceph/src/test/client/TestClient.h b/ceph/src/test/client/TestClient.h
new file mode 100644 (file)
index 0000000..e1c0199
--- /dev/null
@@ -0,0 +1,85 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2021 Red Hat
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+#include "gtest/gtest.h"
+
+#include "common/async/context_pool.h"
+#include "global/global_context.h"
+
+#include "msg/Messenger.h"
+#include "mon/MonClient.h"
+#include "osdc/ObjectCacher.h"
+
+#include "client/Client.h"
+
+class TestClient : public ::testing::Test {
+public:
+    static void SetUpTestSuite() {
+      icp.start(g_ceph_context->_conf.get_val<std::uint64_t>("client_asio_thread_count"));
+    }
+    static void TearDownTestSuite() {
+      icp.stop();
+    }
+    void SetUp() override {
+      messenger = Messenger::create_client_messenger(g_ceph_context, "client");
+      if (messenger->start() != 0) {
+        throw std::runtime_error("failed to start messenger");
+      }
+
+      mc = new MonClient(g_ceph_context, icp);
+      if (mc->build_initial_monmap() < 0) {
+        throw std::runtime_error("build monmap");
+      }
+      mc->set_messenger(messenger);
+      mc->set_want_keys(CEPH_ENTITY_TYPE_MDS | CEPH_ENTITY_TYPE_OSD);
+      if (mc->init() < 0) {
+        throw std::runtime_error("init monclient");
+      }
+
+      objecter = new Objecter(g_ceph_context, messenger, mc, icp);
+      objecter->set_client_incarnation(0);
+      objecter->init();
+      messenger->add_dispatcher_tail(objecter);
+      objecter->start();
+
+      client = new Client(messenger, mc, objecter);
+      client->init();
+      client->mount("/", myperm, true);
+    }
+    void TearDown() override {
+      if (client->is_mounted())
+        client->unmount();
+      client->shutdown();
+      objecter->shutdown();
+      mc->shutdown();
+      messenger->shutdown();
+      messenger->wait();
+
+      delete client;
+      client = nullptr;
+      delete objecter;
+      objecter = nullptr;
+      delete mc;
+      mc = nullptr;
+      delete messenger;
+      messenger = nullptr;
+    }
+protected:
+    static inline ceph::async::io_context_pool icp;
+    static inline UserPerm myperm{0,0};
+    MonClient* mc = nullptr;
+    Messenger* messenger = nullptr;
+    Objecter* objecter = nullptr;
+    Client* client = nullptr;
+};