def test_validation_fails(self):
        variant_set_cfg_none = None

        variant_set_cfg_0 = []

        variant_set_cfg_2 = [
            {
                "name": "variant_1",
                "size": 0.25
            },
            {
                "name": "variant_2",
                "size": 0.25
            },
        ]

        variant_set_cfg_too_big = [
            {
                "name": "variant_1",
                "size": 1.05
            },
        ]

        with self.assertRaises(ValueError):
            variant_set_none = RolloutVariantSet(variant_set_cfg_none)

        with self.assertRaises(ValueError):
            variant_set_0 = RolloutVariantSet(variant_set_cfg_0)

        with self.assertRaises(ValueError):
            variant_set_2 = RolloutVariantSet(variant_set_cfg_2)

        with self.assertRaises(ValueError):
            variant_set_too_big = RolloutVariantSet(variant_set_cfg_too_big)
    def test_distribution_def_odd(self):
        variant_cfg = [{"name": "variant_1", "size": 1.0}]
        variant_set = RolloutVariantSet(variants=variant_cfg,
                                        num_buckets=NUM_BUCKETS_ODD)

        variant_counts = {"variant_1": 0, None: 0}

        for bucket in range(0, NUM_BUCKETS_ODD):
            variant = variant_set.choose_variant(bucket)
            variant_counts[variant] += 1

        self.assertEqual(len(variant_counts), 2)
        self.assertEqual(variant_counts["variant_1"], 1037)
        self.assertEqual(variant_counts[None], 0)
    def test_distribution_single_bucket(self):
        cfg = [{"name": "variant_1", "size": 0.001}]

        variant_set = RolloutVariantSet(variants=cfg,
                                        num_buckets=NUM_BUCKETS_DEFAULT)

        variant_counts = {"variant_1": 0, None: 0}

        for bucket in range(0, NUM_BUCKETS_DEFAULT):
            variant = variant_set.choose_variant(bucket)
            variant_counts[variant] += 1

        self.assertEqual(len(variant_counts), 2)

        self.assertEqual(variant_counts["variant_1"], 1)
        self.assertEqual(variant_counts[None], 999)
def create_rollout_variant_set():
    cfg = generate_variant_config()
    return RolloutVariantSet(variants=cfg, num_buckets=NUM_BUCKETS_DEFAULT)