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({})])
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"}), )
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'])
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"))
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, )
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({})])
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)
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)
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"])
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})
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"}, )
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")}, )
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"}, )
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"}, )
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)
def test_update_as_non_admin_asserts(self): user = factory.make_User() handler = ConfigHandler(user, {}, None) with ExpectedException(HandlerPermissionError): handler.update({})
def test_get_requires_name(self): user = factory.make_User() handler = ConfigHandler(user, {}, None) self.assertRaises(HandlerPKError, handler.get, {})
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"])
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"])
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))
def test_update_requires_value(self): user = factory.make_admin() handler = ConfigHandler(user, {}, None) self.assertRaises( HandlerValidationError, handler.update, {"name": "curtin_verbose"} )
def test_update_requires_name(self): user = factory.make_admin() handler = ConfigHandler(user, {}, None) self.assertRaises(HandlerPKError, handler.update, {})
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)
def test_list(self): user = factory.make_User() handler = ConfigHandler(user, {}, None) self.assertItemsEqual(self.dehydrated_all_configs(), handler.list({}))
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"])
def test_update_as_non_admin_asserts(self): user = factory.make_User() handler = ConfigHandler(user, {}) with ExpectedException(AssertionError, "Permission denied."): handler.update({})