blob: 86722c2f5022348df6d32fe7863257455d96ea2b [file] [log] [blame]
# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Test experiment module."""
from enum import StrEnum
import unittest
from unittest import mock
import experiment
class FakeID(StrEnum):
"""A fake class to mock out the real ID class."""
EXP1 = 'exp1'
EXP2 = 'exp2'
EXP3 = 'exp3'
EXP4 = 'exp4'
# A fake map to mock out the real _VERSION_MAP.
FAKE_VERSION_MAP = {
FakeID.EXP1: 'dev',
FakeID.EXP2: 'beta',
FakeID.EXP3: 'beta',
}
class IsInExperimentTest(unittest.TestCase):
"""Test is_in_experiment."""
def setUp(self):
super().setUp()
self._mock_id_class = self.enterContext(
mock.patch.object(experiment, 'ID', FakeID)
)
self._mock_version_map = self.enterContext(
mock.patch.object(experiment, '_VERSION_MAP', FAKE_VERSION_MAP)
)
def test_experiments_empty_list(self):
self.assertFalse(experiment.is_in_experiment([], experiment.ID.EXP1))
def test_experiments_single_experiment(self):
self.assertTrue(
experiment.is_in_experiment(
[experiment.ID.EXP1], experiment.ID.EXP1
)
)
self.assertFalse(
experiment.is_in_experiment(
[experiment.ID.EXP1], experiment.ID.EXP2
)
)
def test_experiments_multiple_experiments(self):
self.assertTrue(
experiment.is_in_experiment(
[
experiment.ID.EXP1,
experiment.ID.EXP2,
experiment.ID.EXP3,
experiment.ID.EXP4,
],
experiment.ID.EXP2,
)
)
self.assertFalse(
experiment.is_in_experiment(
[
experiment.ID.EXP1,
experiment.ID.EXP2,
experiment.ID.EXP3,
],
experiment.ID.EXP4,
)
)