示例#1
0
    def test_list_user_excludes_secret(self):
        user = factory.make_User()
        config_keys = list(CONFIG_ITEMS.keys()) + ["maas_url", "uuid"]

        handler = ConfigHandler(user, {}, None)
        self.assertNotIn("rpc_shared_secret", config_keys)
        self.assertCountEqual(config_keys,
                              [item["name"] for item in handler.list({})])
示例#2
0
 def test_get(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     Config.objects.set_config("curtin_verbose", True)
     self.assertEquals(
         {"name": "curtin_verbose", "value": True},
         handler.get({"name": "curtin_verbose"}),
     )
示例#3
0
 def test_get_sets_loaded_pks_in_cache(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     Config.objects.set_config("curtin_verbose", True)
     handler.get({"name": "curtin_verbose"})
     self.assertEquals({
         "curtin_verbose",
     }, handler.cache['loaded_pks'])
示例#4
0
 def test_update_updates_value(self):
     user = factory.make_admin()
     handler = ConfigHandler(user, {}, None)
     updated = handler.update({"name": "curtin_verbose", "value": True})
     self.assertEquals({
         "name": "curtin_verbose",
         "value": True,
     }, updated)
     self.assertTrue(Config.objects.get_config("curtin_verbose"))
示例#5
0
 def test_on_listen_returns_create_for_not_loaded(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     Config.objects.set_config("curtin_verbose", True)
     obj = Config.objects.get(name="curtin_verbose")
     updated = handler.on_listen("config", "update", obj.id)
     self.assertEqual(
         ("config", "create", {"name": "curtin_verbose", "value": True}),
         updated,
     )
示例#6
0
    def test_list_admin_includes_all_config(self):
        admin = factory.make_admin()
        config_keys = list(CONFIG_ITEMS.keys()) + [
            "maas_url",
            "uuid",
            "rpc_shared_secret",
        ]

        handler = ConfigHandler(admin, {}, None)
        self.assertCountEqual(config_keys,
                              [item["name"] for item in handler.list({})])
示例#7
0
 def test_dehydrate_no_choice_config(self):
     no_choice_name = random.choice(
         list(name for name in CONFIG_ITEMS.keys()
              if not hasattr(get_config_field(name), "choices")))
     Config.objects.set_config(no_choice_name, "myvalue")
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     dehydrated = handler.dehydrate_configs([no_choice_name])[0]
     self.assertEqual(no_choice_name, dehydrated["name"])
     self.assertEqual("myvalue", dehydrated["value"])
     self.assertNotIn("choices", dehydrated)
示例#8
0
 def test_on_listen_returns_update_for_loaded_delete(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     handler.cache["loaded_pks"] = {
         "curtin_verbose",
     }
     Config.objects.set_config("curtin_verbose", True)
     obj = Config.objects.get(name="curtin_verbose")
     updated = handler.on_listen("config", "delete", obj.id)
     self.assertEqual(('config', 'update', {
         "name": "curtin_verbose",
         "value": True,
     }), updated)
示例#9
0
    def test_dehydrate_choice_config(self):
        choice_name, choices = random.choice(
            list((name, get_config_field(name).choices)
                 for name in CONFIG_ITEMS.keys()
                 if hasattr(get_config_field(name), "choices")))

        choice_value = random.choice([value for value, _ in choices])
        Config.objects.set_config(choice_name, choice_value)
        user = factory.make_User()
        handler = ConfigHandler(user, {}, None)
        dehydrated = handler.dehydrate_configs([choice_name])[0]
        self.assertEqual(choice_name, dehydrated["name"])
        self.assertEqual(choice_value, dehydrated["value"])
        self.assertEqual(choices, dehydrated["choices"])
示例#10
0
 def test_get_must_be_in_config_items(self):
     allowed_keys = set(CONFIG_ITEMS.keys())
     all_keys = set(get_default_config().keys())
     not_allowed_keys = all_keys.difference(allowed_keys)
     key = random.choice(list(not_allowed_keys))
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(HandlerDoesNotExistError, handler.get, {"name": key})
示例#11
0
 def test_update_cannot_update_maas_url(self):
     user = factory.make_admin()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(
         HandlerDoesNotExistError,
         handler.update,
         {"name": "maas_url", "value": "maas_url"},
     )
示例#12
0
 def test_get_must_be_known_config(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(
         HandlerDoesNotExistError,
         handler.get,
         {"name": factory.make_name("config")},
     )
示例#13
0
 def test_update_cannot_update_rpc_shared_secret(self):
     user = factory.make_admin()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(
         HandlerDoesNotExistError,
         handler.update,
         {"name": "rpc_shared_secret", "value": "rpc_shared_secret"},
     )
示例#14
0
 def test_get_non_admin_disallows_rpc_secret(self):
     Config.objects.set_config("rpc_shared_secret", "my-secret")
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(
         HandlerDoesNotExistError,
         handler.get,
         {"name": "rpc_shared_secret"},
     )
示例#15
0
 def test_update_handles_bad_value(self):
     user = factory.make_admin()
     handler = ConfigHandler(user, {}, None)
     error = self.assertRaises(HandlerValidationError, handler.update, {
         "name": "http_proxy",
         "value": factory.make_name("invalid")
     })
     self.assertEquals({
         "value": ["Enter a valid URL."],
     }, error.message_dict)
示例#16
0
 def test_update_as_non_admin_asserts(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     with ExpectedException(HandlerPermissionError):
         handler.update({})
示例#17
0
 def test_get_requires_name(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(HandlerPKError, handler.get, {})
示例#18
0
 def test_list_admin_includes_rpc_secret(self):
     Config.objects.set_config("rpc_shared_secret", "my-secret")
     admin = factory.make_admin()
     handler = ConfigHandler(admin, {}, None)
     config = {item["name"]: item["value"] for item in handler.list({})}
     self.assertEqual("my-secret", config["rpc_shared_secret"])
示例#19
0
 def test_get_admin_allows_rpc_secret(self):
     Config.objects.set_config("rpc_shared_secret", "my-secret")
     admin = factory.make_admin()
     handler = ConfigHandler(admin, {}, None)
     self.assertEqual("my-secret",
                      handler.get({"name": "rpc_shared_secret"})["value"])
示例#20
0
 def test_on_listen_returns_None_if_excluded(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     Config.objects.set_config("omapi_key", "")
     obj = Config.objects.get(name="omapi_key")
     self.assertIsNone(handler.on_listen("config", "create", obj.id))
示例#21
0
 def test_update_requires_value(self):
     user = factory.make_admin()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(
         HandlerValidationError, handler.update, {"name": "curtin_verbose"}
     )
示例#22
0
 def test_update_requires_name(self):
     user = factory.make_admin()
     handler = ConfigHandler(user, {}, None)
     self.assertRaises(HandlerPKError, handler.update, {})
示例#23
0
 def test_list_non_admin_hides_rpc_secret(self):
     Config.objects.set_config("rpc_shared_secret", "my-secret")
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     config = {item["name"]: item["value"] for item in handler.list({})}
     self.assertNotIn("rpc_shared_secret", config)
示例#24
0
 def test_list(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     self.assertItemsEqual(self.dehydrated_all_configs(), handler.list({}))
示例#25
0
 def test_list_sets_loaded_pks_in_cache(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {}, None)
     handler.list({})
     config_keys = {obj["name"] for obj in self.dehydrated_all_configs()}
     self.assertItemsEqual(config_keys, handler.cache["loaded_pks"])
示例#26
0
 def test_update_as_non_admin_asserts(self):
     user = factory.make_User()
     handler = ConfigHandler(user, {})
     with ExpectedException(AssertionError, "Permission denied."):
         handler.update({})