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)
Example #2
0
  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)
Example #3
0
  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)
Example #4
0
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 []
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
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 []
Example #8
0
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
Example #9
0
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 [])
Example #10
0
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 [])
Example #11
0
  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)
Example #12
0
  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)
Example #13
0
    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)
Example #14
0
def read_acl_cfg():
    return storage.get_self_config_async(
        common.ACL_FILENAME, service_config_pb2.AclCfg).get_result()
Example #15
0
def read_acl_cfg():
  return storage.get_self_config_async(
      common.ACL_FILENAME, service_config_pb2.AclCfg).get_result()