From 9c87d7c1bf2d0a6ed9a36ab8a12f110ff5307c2a Mon Sep 17 00:00:00 2001 From: Jimyeong Lee Date: Wed, 2 Aug 2023 09:18:03 +0900 Subject: [PATCH] test: client: Add multi target MDSs command tests Signed-off-by: Jinmyeong Lee --- src/test/client/CMakeLists.txt | 1 + src/test/client/commands.cc | 48 ++++++++++++++++++++++++++++++++++ src/test/pybind/test_cephfs.py | 35 +++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 src/test/client/commands.cc diff --git a/src/test/client/CMakeLists.txt b/src/test/client/CMakeLists.txt index 63a461d71bf..718c52cb95a 100644 --- a/src/test/client/CMakeLists.txt +++ b/src/test/client/CMakeLists.txt @@ -4,6 +4,7 @@ if(${WITH_CEPHFS}) alternate_name.cc ops.cc nonblocking.cc + commands.cc ) target_link_libraries(ceph_test_client client diff --git a/src/test/client/commands.cc b/src/test/client/commands.cc new file mode 100644 index 00000000000..c1fe763316e --- /dev/null +++ b/src/test/client/commands.cc @@ -0,0 +1,48 @@ +#include + +#include +#include +#include +#include + +#include + +#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 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 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); +} diff --git a/src/test/pybind/test_cephfs.py b/src/test/pybind/test_cephfs.py index 896565ceb94..d751d38cbc1 100644 --- a/src/test/pybind/test_cephfs.py +++ b/src/test/pybind/test_cephfs.py @@ -10,6 +10,7 @@ import random import time import stat import uuid +import json from datetime import datetime cephfs = None @@ -907,3 +908,37 @@ def test_snapdiff(testdir): # 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.')) -- 2.39.5