def test_get_expanded_bots_cfg_non_empty(self):
        self.mock_config({'bots.cfg': ('rev1', TEST_CONFIG)})
        cfg = bot_groups_config.refetch_from_config_service()
        self.assertIsNotNone(cfg)

        # Read from the cache.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg()
        self.assertTrue(fetched)
        self.assertEqual(TEST_CONFIG, cfg.bots)

        # Rereading, but providing known_digest.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg(cfg.digest)
        self.assertFalse(fetched)
    def test_get_expanded_bots_cfg_changing(self):
        self.mock_config({'bots.cfg': ('rev1', TEST_CONFIG)})
        bot_groups_config.refetch_from_config_service()

        # Read from the cache.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg()
        self.assertTrue(fetched)
        self.assertEqual('rev1', cfg.rev)

        # Now the cache is changing.
        self.mock_config({'bots.cfg': ('rev2', TEST_CONFIG)})
        bot_groups_config.refetch_from_config_service()

        # Reading new value.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg(cfg.digest)
        self.assertTrue(fetched)
        self.assertEqual('rev2', cfg.rev)
    def test_get_expanded_bots_cfg_empty(self):
        self.mock_config({})
        cfg = bot_groups_config.refetch_from_config_service()
        self.assertIsNone(cfg)

        # Read from the cache.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg()
        self.assertTrue(fetched)
        self.assertIsNone(cfg)
    def test_get_expanded_bots_cfg_bootstrap_empty(self):
        self.mock_config({})

        # No cache.
        self.assertIsNone(self.cached_config_entity())

        # Bootstraps empty cache value.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg()
        self.assertTrue(fetched)
        self.assertIsNone(cfg)

        cached = self.cached_config_entity()
        self.assertTrue(cached.empty)
    def test_get_expanded_bots_cfg_bootstrap_non_empty(self):
        self.mock_config({'bots.cfg': ('rev1', TEST_CONFIG)})

        # No cache.
        self.assertIsNone(self.cached_config_entity())

        # Bootstraps cache value.
        fetched, cfg = bot_groups_config._get_expanded_bots_cfg()
        self.assertTrue(fetched)
        self.assertEqual(TEST_CONFIG, cfg.bots)

        cached = self.cached_config_entity()
        self.assertFalse(cached.empty)
        self.assertEqual('rev1', cached.bots_cfg_rev)