--- /dev/null
+#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/MetaRequest.h"
+#include "client/Client.h"
+#include "messages/MClientReclaim.h"
+#include "messages/MClientSession.h"
+#include "common/async/blocked_completion.h"
+
+#define dout_subsys ceph_subsys_client
+
+namespace bs = boost::system;
+namespace ca = ceph::async;
+
+class MonClientScaffold : public MonClient {
+public:
+ MonClientScaffold(CephContext *cct_, boost::asio::io_context& service) : MonClient(cct_, service) {}
+ virtual ~MonClientScaffold() {}
+
+ bool check_monmap_subed () {
+ return !sub_want("monmap", monmap.get_epoch() ? monmap.get_epoch() + 1 : 0, 0);
+ }
+
+ bool check_config_subed () {
+ return !sub_want("config", 0, 0);
+ }
+};
+
+class TestPlodClient : 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 MonClientScaffold(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");
+ }
+
+ client = new StandaloneClient(messenger, mc, icp);
+ client->init();
+ sleep(1);
+ client->mount("/", myperm, true);
+ }
+ void TearDown() override {
+ if (client->is_mounted())
+ client->unmount();
+ client->shutdown();
+ mc->shutdown();
+ messenger->shutdown();
+ messenger->wait();
+
+ delete client;
+ client = nullptr;
+ delete mc;
+ mc = nullptr;
+ delete messenger;
+ messenger = nullptr;
+ }
+protected:
+ static inline ceph::async::io_context_pool icp;
+ static inline UserPerm myperm{0,0};
+ MonClientScaffold* mc = nullptr;
+ Messenger* messenger = nullptr;
+ StandaloneClient* client = nullptr;
+};
--- /dev/null
+#include <iostream>
+#include <errno.h>
+#include "TestPlodClient.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "gtest/gtest-spi.h"
+#include "gmock/gmock-matchers.h"
+#include "gmock/gmock-more-matchers.h"
+
+TEST_F(TestPlodClient, CheckMonSubscribed) {
+ ASSERT_EQ(mc->check_monmap_subed(), true);
+ ASSERT_EQ(mc->check_config_subed(), true);
+}