예제 #1
0
    def test_sync_tokens(self, client):
        new = FeatureFlagConfigurationSetting('custom',
                                              enabled=True,
                                              filters=[{
                                                  "name":
                                                  "Microsoft.Percentage",
                                                  "parameters": {
                                                      "Value": 10,
                                                      "User": "******",
                                                  }
                                              }])

        sync_tokens = copy.deepcopy(client.obj._sync_token_policy._sync_tokens)
        keys = list(sync_tokens.keys())
        seq_num = sync_tokens[keys[0]].sequence_number
        sent = client.set_configuration_setting(new)

        new = FeatureFlagConfigurationSetting(
            'time_window',
            enabled=True,
            filters=[
                {
                    u"name": FILTER_TIME_WINDOW,
                    u"parameters": {
                        "Start": "Wed, 10 Mar 2021 05:00:00 GMT",
                        "End": "Fri, 02 Apr 2021 04:00:00 GMT"
                    }
                },
            ])

        sent = client.set_configuration_setting(new)
        sync_tokens2 = copy.deepcopy(
            client.obj._sync_token_policy._sync_tokens)
        keys = list(sync_tokens2.keys())
        seq_num2 = sync_tokens2[keys[0]].sequence_number

        new = FeatureFlagConfigurationSetting(
            "newflag",
            enabled=True,
            filters=[
                {
                    "name": FILTER_TARGETING,
                    "parameters": {
                        u"Audience": {
                            u"Users": [u"abc", u"def"],
                            u"Groups": [u"ghi", u"jkl"],
                            u"DefaultRolloutPercentage": 75
                        }
                    }
                },
            ])

        sent = client.set_configuration_setting(new)
        sync_tokens3 = copy.deepcopy(
            client.obj._sync_token_policy._sync_tokens)
        keys = list(sync_tokens3.keys())
        seq_num3 = sync_tokens3[keys[0]].sequence_number

        assert seq_num < seq_num2
        assert seq_num2 < seq_num3
예제 #2
0
 def test_type_error(self, client):
     with pytest.raises(TypeError):
         _ = FeatureFlagConfigurationSetting("blash", key="blash")
     with pytest.raises(TypeError):
         _ = FeatureFlagConfigurationSetting("blash", value="blash")
     with pytest.raises(TypeError):
         _ = SecretReferenceConfigurationSetting("blash", value="blash")
예제 #3
0
    def test_feature_flag_set_enabled(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key,
                                                       True,
                                                       filters=[{
                                                           "name": PERCENTAGE,
                                                           "parameters": {
                                                               "Value": 10,
                                                               "User": "******"
                                                           }
                                                       }])
        feature_flag.enabled = False

        assert feature_flag.value["enabled"] == False
예제 #4
0
    def test_config_setting_feature_flag(self, client):
        feature_flag = FeatureFlagConfigurationSetting("test_feature", enabled=True)
        set_flag = client.set_configuration_setting(feature_flag)

        self._assert_same_keys(feature_flag, set_flag)

        set_flag.enabled = not set_flag.enabled
        changed_flag = client.set_configuration_setting(set_flag)

        changed_flag.enabled = False
        temp = json.loads(changed_flag.value)
        assert temp['enabled'] == False

        c = json.loads(copy.deepcopy(changed_flag.value))
        c['enabled'] = True
        changed_flag.value = json.dumps(c)
        assert changed_flag.enabled == True

        changed_flag.value = json.dumps({})
        assert changed_flag.enabled == None
        assert changed_flag.value == json.dumps({'enabled': None, "conditions": {"client_filters": None}})

        set_flag.value = "bad_value"
        assert set_flag.enabled == None
        assert set_flag.filters == None
        client.delete_configuration_setting(changed_flag.key)
    def test_config_setting_feature_flag(self, client):
        feature_flag = FeatureFlagConfigurationSetting("test_feature", True)
        set_flag = client.set_configuration_setting(feature_flag)

        self._assert_same_keys(feature_flag, set_flag)

        set_flag.enabled = not set_flag.enabled
        changed_flag = client.set_configuration_setting(set_flag)
        self._assert_same_keys(set_flag, changed_flag)

        changed_flag.enabled = False
        assert changed_flag.value['enabled'] == False

        c = copy.deepcopy(changed_flag.value)
        c['enabled'] = True
        changed_flag.value = c
        assert changed_flag.enabled == True

        changed_flag.value = {}
        assert changed_flag.enabled == None
        assert changed_flag.value == {}

        with pytest.raises(ValueError):
            set_flag.value = "bad_value"
            _ = set_flag.enabled

        client.delete_configuration_setting(changed_flag.key)
예제 #6
0
    def test_feature_flag_invalid_json_access_properties(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key, enabled=True)
        set_flag = client.set_configuration_setting(feature_flag)

        set_flag.value = "hello world"
        assert set_flag.enabled == None
        assert set_flag.filters == None
예제 #7
0
    def test_feature_flag_invalid_json(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key, enabled=True)
        set_flag = client.set_configuration_setting(feature_flag)

        with pytest.raises(TypeError):
            set_flag.value = []
            received = client.set_configuration_setting(set_flag)
    def test_feature_filter_targeting(self, client):
        new = FeatureFlagConfigurationSetting(
            "newflag",
            True,
            filters=[
                {
                    "name": TARGETING,
                    "parameters": {
                        u"Audience": {
                            u"Users": [u"abc", u"def"],
                            u"Groups": [u"ghi", u"jkl"],
                            u"DefaultRolloutPercentage": 75
                        }
                    }
                }
            ]
        )

        sent_config = client.set_configuration_setting(new)
        self._assert_same_keys(sent_config, new)

        assert isinstance(sent_config.filters[0], dict)
        assert len(sent_config.filters) == 1

        sent_config.filters[0]["parameters"]["Audience"]["DefaultRolloutPercentage"] = 80
        updated_sent_config = client.set_configuration_setting(sent_config)
        self._assert_same_keys(sent_config, updated_sent_config)

        updated_sent_config.filters.append(
            {
                "name": TARGETING,
                "parameters": {
                    u"Audience": {
                        u"Users": [u"abcd", u"defg"],
                        u"Groups": [u"ghij", u"jklm"],
                        u"DefaultRolloutPercentage": 50
                    }
                }
            }
        )
        updated_sent_config.filters.append(
            {
                "name": TARGETING,
                "parameters": {
                    u"Audience": {
                        u"Users": [u"abcde", u"defgh"],
                        u"Groups": [u"ghijk", u"jklmn"],
                        u"DefaultRolloutPercentage": 100
                    }
                }
            }
        )

        sent_config = client.set_configuration_setting(updated_sent_config)
        self._assert_same_keys(sent_config, updated_sent_config)
        assert len(sent_config.filters) == 3

        client.delete_configuration_setting(updated_sent_config.key)
예제 #9
0
    def test_feature_flag_invalid_json_string(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key, enabled=True)
        set_flag = client.set_configuration_setting(feature_flag)

        set_flag.value = "hello world"
        received = client.set_configuration_setting(set_flag)

        assert isinstance(received, FeatureFlagConfigurationSetting)
예제 #10
0
    def test_feature_flag_invalid_json_access_properties(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key, True)
        set_flag = client.set_configuration_setting(feature_flag)

        set_flag.value = "hello world"
        with pytest.raises(ValueError):
            a = set_flag.enabled
        with pytest.raises(ValueError):
            b = set_flag.filters
예제 #11
0
    def test_feature_flag_set_value(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key,
                                                       enabled=True,
                                                       filters=[{
                                                           "name":
                                                           FILTER_PERCENTAGE,
                                                           "parameters": {
                                                               "Value": 10,
                                                               "User": "******"
                                                           }
                                                       }])
        feature_flag.value = json.dumps({
            "conditions": {
                "client_filters": []
            },
            "enabled": False
        })

        assert feature_flag.enabled == False
예제 #12
0
    def test_feature_filter_multiple(self, client):
        new = FeatureFlagConfigurationSetting(
            'custom',
            enabled=True,
            filters=[
                {
                    "name": FILTER_PERCENTAGE,
                    "parameters": {
                        "Value": 10
                    }
                },
                {
                    "name": FILTER_TIME_WINDOW,
                    "parameters": {
                        "Start": "Wed, 10 Mar 2021 05:00:00 GMT",
                        "End": "Fri, 02 Apr 2021 04:00:00 GMT"
                    }
                },
                {
                    "name": FILTER_TARGETING,
                    "parameters": {
                        u"Audience": {
                            u"Users": [u"abcde", u"defgh"],
                            u"Groups": [u"ghijk", u"jklmn"],
                            u"DefaultRolloutPercentage": 100
                        }
                    }
                }
            ]
        )

        sent = client.set_configuration_setting(new)
        self._assert_same_keys(sent, new)

        sent.filters[0]["parameters"]["Value"] = 100
        sent.filters[1]["parameters"]["Start"] = "Wed, 10 Mar 2021 08:00:00 GMT"
        sent.filters[2]["parameters"]["Audience"]["DefaultRolloutPercentage"] = 100

        new_sent = client.set_configuration_setting(sent)
        self._assert_same_keys(sent, new_sent)

        assert new_sent.filters[0]["parameters"]["Value"] == 100
        assert new_sent.filters[1]["parameters"]["Start"] == "Wed, 10 Mar 2021 08:00:00 GMT"
        assert new_sent.filters[2]["parameters"]["Audience"]["DefaultRolloutPercentage"] == 100

        client.delete_configuration_setting(new_sent.key)
    def test_feature_filter_custom(self, client):
        new = FeatureFlagConfigurationSetting('custom',
                                              True,
                                              filters=[{
                                                  "name": PERCENTAGE,
                                                  "parameters": {
                                                      "Value": 10,
                                                      "User": "******"
                                                  }
                                              }])

        sent = client.set_configuration_setting(new)
        self._assert_same_keys(sent, new)

        sent.filters[0]["parameters"]["Value"] = 100
        new_sent = client.set_configuration_setting(sent)
        self._assert_same_keys(sent, new_sent)

        client.delete_configuration_setting(new_sent.key)
    def test_feature_filter_time_window(self, client):
        new = FeatureFlagConfigurationSetting(
            'time_window',
            True,
            filters=[{
                "name": TIME_WINDOW,
                "parameters": {
                    "Start": "Wed, 10 Mar 2021 05:00:00 GMT",
                    "End": "Fri, 02 Apr 2021 04:00:00 GMT"
                }
            }])

        sent = client.set_configuration_setting(new)
        self._assert_same_keys(sent, new)

        sent.filters[0]["parameters"][
            "Start"] = "Thurs, 11 Mar 2021 05:00:00 GMT"
        new_sent = client.set_configuration_setting(sent)
        self._assert_same_keys(sent, new_sent)

        client.delete_configuration_setting(new_sent.key)
예제 #15
0
    def test_update_json_by_value(self, client):
        key = self.get_resource_name("key")
        feature_flag = FeatureFlagConfigurationSetting(key,
                                                       enabled=True,
                                                       filters=[{
                                                           "name":
                                                           FILTER_PERCENTAGE,
                                                           "parameters": {
                                                               "Value": 10,
                                                               "User": "******"
                                                           }
                                                       }])
        set_flag = client.set_configuration_setting(feature_flag)

        set_flag.value = json.dumps({
            'conditions': {
                'client_filters': [{
                    'name': 'Microsoft.Targeting',
                    'parameters': {
                        'name': 'Microsoft.Targeting',
                        'parameters': {
                            'Audience': {
                                'DefaultRolloutPercentage': 50,
                                'Groups': [],
                                'Users': []
                            }
                        }
                    }
                }]
            },
            'description': '',
            'enabled': False,
            'id': key,
        })

        set_flag = client.set_configuration_setting(set_flag)
        assert isinstance(set_flag, FeatureFlagConfigurationSetting)
        assert set_flag.enabled == False
        assert set_flag.key.endswith(key)
예제 #16
0
 def test_feature_flag_prefix(self, client):
     key = self.get_resource_name("key")
     feature_flag = FeatureFlagConfigurationSetting(key, enabled=True)
     assert feature_flag.key.startswith(".appconfig.featureflag/")
    def test_breaking1(self, client):
        new = FeatureFlagConfigurationSetting(
            'breaking1',
            True,
            filters=[
                {
                    "name": TIME_WINDOW,
                    "parameters": {
                        "Start": "bababooey, 31 Mar 2021 25:00:00 GMT",
                        "End": "Fri, 02 Apr 2021 04:00:00 GMT"
                    }
                },
            ])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        new = FeatureFlagConfigurationSetting(
            'breaking2',
            True,
            filters=[
                {
                    "name": TIME_WINDOW,
                    "parameters": {
                        "Start": "bababooey, 31 Mar 2021 25:00:00 GMT",
                        "End": "not even trying to be a date"
                    }
                },
            ])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        # This will show up as a Custom filter
        new = FeatureFlagConfigurationSetting(
            'breaking3',
            True,
            filters=[
                {
                    "name": TIME_WINDOW,
                    "parameters": {
                        "Start": "bababooey, 31 Mar 2021 25:00:00 GMT",
                        "End": "not even trying to be a date"
                    }
                },
            ])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        new = FeatureFlagConfigurationSetting('breaking4',
                                              True,
                                              filters=[
                                                  {
                                                      "name": TIME_WINDOW,
                                                      "parameters":
                                                      "stringystring"
                                                  },
                                              ])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        new = FeatureFlagConfigurationSetting('breaking5',
                                              True,
                                              filters=[{
                                                  "name": TARGETING,
                                                  "parameters": {
                                                      u"Audience": {
                                                          u"Users": '123'
                                                      }
                                                  }
                                              }])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        new = FeatureFlagConfigurationSetting('breaking6',
                                              True,
                                              filters=[{
                                                  "name":
                                                  TARGETING,
                                                  "parameters":
                                                  "invalidformat"
                                              }])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        new = FeatureFlagConfigurationSetting('breaking7',
                                              True,
                                              filters=[{
                                                  'abc': 'def'
                                              }])
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)

        new = FeatureFlagConfigurationSetting('breaking8',
                                              True,
                                              filters=[{
                                                  'abc': 'def'
                                              }])
        new.feature_flag_content_type = "fakeyfakey"
        client.set_configuration_setting(new)
        new1 = client.get_configuration_setting(new.key)