]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
unittest_auth: add unit tests for AuthRegistry con_mode selection 26568/head
authorSage Weil <sage@redhat.com>
Thu, 21 Feb 2019 19:45:00 +0000 (13:45 -0600)
committerSage Weil <sage@redhat.com>
Thu, 21 Feb 2019 19:45:56 +0000 (13:45 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/ceph_context.h
src/test/CMakeLists.txt
src/test/test_auth.cc [new file with mode: 0644]

index 97595791f2afb2568824f44e33294bff99d1c90c..15b25afc6beb193561d16fa060a6ccde92b608e9 100644 (file)
@@ -128,6 +128,11 @@ public:
   /* Get the module type (client, mon, osd, mds, etc.) */
   uint32_t get_module_type() const;
 
+  // this is here only for testing purposes!
+  void _set_module_type(uint32_t t) {
+    _module_type = t;
+  }
+
   void set_init_flags(int flags);
   int get_init_flags() const;
 
index 3a14441e5c9aa382eb4f65cd6390a150de9a6967..378677f3f0c18c3bd6fb33fd786ac8e59c8ad76c 100644 (file)
@@ -597,6 +597,14 @@ add_executable(unittest_addrs
 add_ceph_unittest(unittest_addrs)
 target_link_libraries(unittest_addrs ceph-common)
 
+# unittest_auth
+add_executable(unittest_auth
+  test_auth.cc
+  $<TARGET_OBJECTS:unit-main>
+  )
+add_ceph_unittest(unittest_auth)
+target_link_libraries(unittest_auth global)
+
 # unittest_workqueue
 add_executable(unittest_workqueue
   test_workqueue.cc
diff --git a/src/test/test_auth.cc b/src/test/test_auth.cc
new file mode 100644 (file)
index 0000000..190a5d3
--- /dev/null
@@ -0,0 +1,242 @@
+// -*- mode:C; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "include/types.h"
+#include "include/stringify.h"
+#include "auth/Auth.h"
+#include "gtest/gtest.h"
+#include "common/ceph_context.h"
+#include "global/global_context.h"
+#include "auth/AuthRegistry.h"
+
+#include <sstream>
+
+TEST(AuthRegistry, con_modes)
+{
+  auto cct = g_ceph_context;
+  AuthRegistry reg(cct);
+  std::vector<uint32_t> modes;
+
+  const std::vector<uint32_t> crc_secure = { CEPH_CON_MODE_CRC,
+                                            CEPH_CON_MODE_SECURE };
+  const std::vector<uint32_t> secure_crc = { CEPH_CON_MODE_SECURE,
+                                            CEPH_CON_MODE_CRC };
+  const std::vector<uint32_t> secure = { CEPH_CON_MODE_SECURE };
+
+  // baseline: everybody agrees
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  cct->_conf.set_val("ms_cluster_mode", "crc secure");
+  cct->_conf.set_val("ms_service_mode", "crc secure");
+  cct->_conf.set_val("ms_client_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_cluster_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_service_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_client_mode", "crc secure");
+  cct->_conf.apply_changes(NULL);
+
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  ASSERT_EQ((uint32_t)CEPH_CON_MODE_CRC, reg.pick_mode(CEPH_ENTITY_TYPE_OSD,
+                                                      CEPH_AUTH_CEPHX,
+                                                      crc_secure));
+
+  // what mons prefer secure, internal to mon cluster only
+  cct->_conf.set_val("ms_mon_cluster_mode", "secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_OSD);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MON);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  // how all cluster -> mon connections secure?
+  cct->_conf.set_val("ms_mon_service_mode", "secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_OSD);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MON);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+
+
+  // how about client -> mon connections?
+  cct->_conf.set_val("ms_mon_client_mode", "secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  //  ms_mon)client_mode doesn't does't affect daemons, though...
+  cct->_conf.set_val("ms_mon_service_mode", "crc secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MON);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  // how about all internal cluster connection secure?
+  cct->_conf.set_val("ms_cluster_mode", "secure");
+  cct->_conf.set_val("ms_mon_service_mode", "secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_OSD);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MGR);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MDS);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MON);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+
+  // how about all connections to the cluster?
+  cct->_conf.set_val("ms_service_mode", "secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, crc_secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_OSD);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MGR);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_MDS);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_CLIENT, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+
+  // client forcing things?
+  cct->_conf.set_val("ms_cluster_mode", "crc secure");
+  cct->_conf.set_val("ms_service_mode", "crc secure");
+  cct->_conf.set_val("ms_client_mode", "secure");
+  cct->_conf.set_val("ms_mon_cluster_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_service_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_client_mode", "secure");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure);
+
+  // client *preferring* secure?
+  cct->_conf.set_val("ms_cluster_mode", "crc secure");
+  cct->_conf.set_val("ms_service_mode", "crc secure");
+  cct->_conf.set_val("ms_client_mode", "secure crc");
+  cct->_conf.set_val("ms_mon_cluster_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_service_mode", "crc secure");
+  cct->_conf.set_val("ms_mon_client_mode", "secure crc");
+  cct->_conf.apply_changes(NULL);
+
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MON, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure_crc);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MGR, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure_crc);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_OSD, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure_crc);
+  reg.get_supported_modes(CEPH_ENTITY_TYPE_MDS, CEPH_AUTH_CEPHX, &modes);
+  ASSERT_EQ(modes, secure_crc);
+
+  // back to normalish, for the benefit of the next test(s)
+  cct->_set_module_type(CEPH_ENTITY_TYPE_CLIENT);  
+}