--- /dev/null
+#include <errno.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <unordered_map>
+
+#include <fmt/format.h>
+
+#include "test/client/TestClient.h"
+
+
+TEST_F(TestClient, SingleTargetMdsCommand) {
+ auto mds_spec = "a";
+ auto cmd = "{\"prefix\": \"session ls\", \"format\": \"json\"}";
+ bufferlist inbl;
+ bufferlist outbl;
+ std::string outs;
+ std::vector<std::string> cmdv;
+ C_SaferCond cond;
+
+ cmdv.push_back(cmd);
+ int r = client->mds_command(mds_spec, cmdv, inbl, &outbl, &outs, &cond);
+ r = cond.wait();
+
+ std::cout << "SingleTargetMdsCommand: " << outbl.c_str() << std::endl;
+
+ ASSERT_TRUE(r == 0 || r == -38);
+}
+
+TEST_F(TestClient, MultiTargetMdsCommand) {
+ auto mds_spec = "*";
+ auto cmd = "{\"prefix\": \"session ls\", \"format\": \"json\"}";
+ bufferlist inbl;
+ bufferlist outbl;
+ std::string outs;
+ std::vector<std::string> cmdv;
+ C_SaferCond cond;
+
+ cmdv.push_back(cmd);
+ std::cout << "MultiTargetMds: " << std::endl;
+ int r = client->mds_command(mds_spec, cmdv, inbl, &outbl, &outs, &cond);
+ r = cond.wait();
+
+ std::cout << "MultiTargetMdsCommand: " << outbl.c_str() << std::endl;
+
+ ASSERT_TRUE(r == 0 || r == -38);
+}
import time
import stat
import uuid
+import json
from datetime import datetime
cephfs = None
# remove directory
purge_dir(b"/snapdiff_test");
+
+@with_setup(setup_test)
+def test_single_target_command():
+ command = {'prefix': u'session ls', 'format': 'json'}
+ mds_spec = "a"
+ inbuf = b''
+ ret, outbl, outs = cephfs.mds_command(mds_spec, json.dumps(command), inbuf)
+ if outbl:
+ session_map = json.loads(outbl)
+ # Standby MDSs will return -38
+ assert(ret == 0 or ret == -38)
+
+@with_setup(setup_test)
+def test_multi_target_command():
+ mds_get_command = {'prefix': 'status', 'format': 'json'}
+ inbuf = b''
+ ret, outbl, outs = cephfs.mds_command('*', json.dumps(mds_get_command), inbuf)
+ print(outbl)
+ mds_status = json.loads(outbl)
+ print(mds_status)
+
+ command = {'prefix': u'session ls', 'format': 'json'}
+ mds_spec = "*"
+ inbuf = b''
+
+ ret, outbl, outs = cephfs.mds_command(mds_spec, json.dumps(command), inbuf)
+ # Standby MDSs will return -38
+ assert(ret == 0 or ret == -38)
+ print(outbl)
+ session_map = json.loads(outbl)
+
+ if isinstance(mds_status, list): # if multi target command result
+ for mds_sessions in session_map:
+ assert(list(mds_sessions.keys())[0].startswith('mds.'))