def test_get_self_config(self): expected = service_config_pb2.AclCfg(project_access_group='group') self.mock(storage, 'get_config_hashes_async', mock.Mock()) self.mock(storage, 'get_configs_by_hashes_async', mock.Mock()) storage.get_config_hashes_async.return_value = future({ storage.get_self_config_set(): ('deadbeef', 'file://config', 'beefdead'), }) storage.get_configs_by_hashes_async.return_value = future({ 'beefdead': 'project_access_group: "group"', }) actual = storage.get_self_config_async( 'acl.cfg', service_config_pb2.AclCfg).get_result() self.assertEqual(expected, actual) storage.get_config_hashes_async.assert_called_once_with( {storage.get_self_config_set(): None}, 'acl.cfg') storage.get_configs_by_hashes_async.assert_called_once_with( ['beefdead']) # memcached: storage.get_config_hashes_async.reset_mock() storage.get_configs_by_hashes_async.reset_mock() actual = storage.get_self_config_async( 'acl.cfg', service_config_pb2.AclCfg).get_result() self.assertEqual(expected, actual) self.assertFalse(storage.get_config_hashes_async.called) self.assertFalse(storage.get_configs_by_hashes_async.called)
def test_get_self_config(self): expected = service_config_pb2.AclCfg(project_access_group='group') self.mock(storage, 'get_config_hash_async', mock.Mock()) self.mock(storage, 'get_config_by_hash_async', mock.Mock()) storage.get_config_hash_async.return_value = future( ('deadbeef', 'beefdead')) storage.get_config_by_hash_async.return_value = future( 'project_access_group: "group"') actual = storage.get_self_config_async( 'acl.cfg', service_config_pb2.AclCfg).get_result() self.assertEqual(expected, actual) storage.get_config_hash_async.assert_called_once_with( 'services/sample-app', 'acl.cfg') storage.get_config_by_hash_async.assert_called_once_with('beefdead') # memcached: storage.get_config_hash_async.reset_mock() storage.get_config_by_hash_async.reset_mock() actual = storage.get_latest_as_message_async( 'services/sample-app', 'acl.cfg', service_config_pb2.AclCfg).get_result() self.assertEqual(expected, actual) self.assertFalse(storage.get_config_hash_async.called) self.assertFalse(storage.get_config_by_hash_async.called)
def get_projects(): """Returns a list of projects stored in services/luci-config:projects.cfg. Never returns None. Cached. """ cfg = storage.get_self_config_async( common.PROJECT_REGISTRY_FILENAME, service_config_pb2.ProjectsCfg).get_result() return cfg.projects or []
def test_message_field_merge(self): default_msg = service_config_pb2.ImportCfg( gitiles=service_config_pb2.ImportCfg.Gitiles(fetch_log_deadline=42)) self.mock(storage, 'get_latest_async', mock.Mock()) storage.get_latest_async.return_value = future( 'gitiles { fetch_archive_deadline: 10 }') msg = storage.get_self_config_async( 'import.cfg', lambda: default_msg).get_result() self.assertEqual(msg.gitiles.fetch_log_deadline, 42)
def get_gitiles_config(): cfg = service_config_pb2.ImportCfg(gitiles=DEFAULT_GITILES_IMPORT_CONFIG) try: cfg = storage.get_self_config_async( common.IMPORT_FILENAME, lambda: cfg).get_result() except text_format.ParseError as ex: # It is critical that get_gitiles_config() returns a valid config. # If import.cfg is broken, it should not break importing mechanism, # otherwise the system won't be able to heal itself by importing a fixed # config. logging.exception('import.cfg is broken') return cfg.gitiles
def get_services_async(): """Returns a list of registered luci services. The list is stored in services/luci-config:services.cfg. Never returns None. Cached. Returns: A list of service_config_pb2.Service. """ cfg = yield storage.get_self_config_async( common.SERVICES_REGISTRY_FILENAME, service_config_pb2.ServicesCfg) raise ndb.Return(cfg.services or [])
def get(self, name): cfg = storage.get_self_config_async( common.SCHEMAS_FILENAME, service_config_pb2.SchemasCfg).get_result() # Assume cfg was validated by validation.py if cfg: for schema in cfg.schemas: if schema.name == name: # Convert from unicode. assert schema.url self.redirect(str(schema.url)) return self.response.write('Schema %s not found\n' % name) self.response.set_status(httplib.NOT_FOUND)
def test_get_self_config(self): expected = service_config_pb2.AclCfg(project_access_group="group") self.mock(storage, "get_config_hash_async", mock.Mock()) self.mock(storage, "get_config_by_hash_async", mock.Mock()) storage.get_config_hash_async.return_value = future(("deadbeef", "beefdead")) storage.get_config_by_hash_async.return_value = future('project_access_group: "group"') actual = storage.get_self_config_async("acl.cfg", service_config_pb2.AclCfg).get_result() self.assertEqual(expected, actual) storage.get_config_hash_async.assert_called_once_with("services/sample-app", "acl.cfg") storage.get_config_by_hash_async.assert_called_once_with("beefdead") # memcached: storage.get_config_hash_async.reset_mock() storage.get_config_by_hash_async.reset_mock() actual = storage.get_latest_as_message_async( "services/sample-app", "acl.cfg", service_config_pb2.AclCfg ).get_result() self.assertEqual(expected, actual) self.assertFalse(storage.get_config_hash_async.called) self.assertFalse(storage.get_config_by_hash_async.called)
def read_acl_cfg(): return storage.get_self_config_async( common.ACL_FILENAME, service_config_pb2.AclCfg).get_result()