public async Task Delete()
        {
            var connectionString = Environment.GetEnvironmentVariable("AZ_CONFIG_CONNECTION");

            Assert.NotNull(connectionString, "Set AZ_CONFIG_CONNECTION environment variable to the connection string");
            var service = new ConfigurationClient(connectionString);

            try
            {
                // Prepare environment
                var testSettingDiff = s_testSetting.Clone();
                testSettingDiff.Label = "test_label_diff";
                await service.SetAsync(s_testSetting);

                await service.SetAsync(testSettingDiff);

                // Test
                await service.DeleteAsync(testSettingDiff.Key, testSettingDiff.Label);

                //Try to get the non-existing setting
                var e = Assert.ThrowsAsync <RequestFailedException>(async() =>
                {
                    await service.GetAsync(testSettingDiff.Key, testSettingDiff.Label);
                });

                Assert.AreEqual(404, e.Status);
            }
            finally
            {
                await service.DeleteAsync(s_testSetting.Key, s_testSetting.Label);
            }
        }
Esempio n. 2
0
        public async Task UpdateSetting()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            var testSettingDiff = testSetting.Clone();

            testSettingDiff.Label = "test_label_diff";

            var testSettingUpdate = testSetting.Clone();

            testSettingUpdate.Value = "test_value_update";

            try
            {
                await service.SetAsync(testSetting);

                await service.SetAsync(testSettingDiff);

                ConfigurationSetting responseSetting = await service.UpdateAsync(testSettingUpdate, CancellationToken.None);

                Assert.AreEqual(testSettingUpdate, responseSetting);
            }
            finally
            {
                await service.DeleteAsync(testSettingUpdate.Key, testSettingUpdate.Label);

                await service.DeleteAsync(testSettingDiff.Key, testSettingDiff.Label);
            }
        }
        public async Task GetIfChangedModified()
        {
            var requestSetting = s_testSetting.Clone();

            requestSetting.ETag = new ETag("v1");

            var responseSetting = s_testSetting.Clone();

            responseSetting.ETag = new ETag("v2");

            var mockResponse = new MockResponse(200);

            mockResponse.SetContent(SerializationHelpers.Serialize(responseSetting, SerializeSetting));

            var mockTransport           = new MockTransport(mockResponse);
            ConfigurationClient service = CreateTestService(mockTransport);

            Response <ConfigurationSetting> response = await service.GetAsync(requestSetting, onlyIfChanged : true);

            // TODO: Should this be response.Status?
            Assert.AreEqual(200, response.GetRawResponse().Status);
            ConfigurationSetting setting = new ConfigurationSetting();

            Assert.DoesNotThrow(() => { setting = response; });

            MockRequest request = mockTransport.SingleRequest;

            AssertRequestCommon(request);
            Assert.AreEqual(RequestMethod.Get, request.Method);
            Assert.AreEqual($"https://contoso.appconfig.io/kv/test_key?label=test_label&api-version={s_version}", request.Uri.ToString());
            Assert.True(request.Headers.TryGetValue("If-None-Match", out var ifNoneMatch));
            Assert.AreEqual("\"v1\"", ifNoneMatch);
            Assert.AreEqual(responseSetting, setting);
        }
Esempio n. 4
0
        public void ConfigurationSettingEquals()
        {
            var comparer = ConfigurationSettingEqualityComparer.Instance;

            //Case tests
            ConfigurationSetting testSettingUpperCase = s_testSetting.Clone();

            testSettingUpperCase.Key = testSettingUpperCase.Key.ToUpper();

            ConfigurationSetting testSettingLowerCase = s_testSetting.Clone();

            testSettingLowerCase.Key = testSettingLowerCase.Key.ToLower();
            Assert.IsFalse(comparer.Equals(testSettingUpperCase, testSettingLowerCase));

            ConfigurationSetting testSettingsameCase = s_testSetting.Clone();

            Assert.IsTrue(comparer.Equals(s_testSetting, testSettingsameCase));

            //Etag tests
            ConfigurationSetting testSettingEtagDiff = testSettingsameCase.Clone();

            testSettingsameCase.ETag = new ETag(Guid.NewGuid().ToString());
            testSettingEtagDiff.ETag = new ETag(Guid.NewGuid().ToString());
            Assert.IsFalse(comparer.Equals(testSettingsameCase, testSettingEtagDiff));

            // Different tags
            ConfigurationSetting testSettingDiffTags = s_testSetting.Clone();

            testSettingDiffTags.Tags.Add("tag3", "test_value3");
            Assert.IsFalse(comparer.Equals(s_testSetting, testSettingDiffTags));
        }
Esempio n. 5
0
        public void ConfigurationSettingEquals()
        {
            //Case tests
            var testSettingUpperCase = s_testSetting.Clone();

            testSettingUpperCase.Key = testSettingUpperCase.Key.ToUpper();

            var testSettingLowerCase = s_testSetting.Clone();

            testSettingLowerCase.Key = testSettingLowerCase.Key.ToLower();
            Assert.AreNotEqual(testSettingUpperCase, testSettingLowerCase);

            var testSettingsameCase = s_testSetting.Clone();

            Assert.AreEqual(s_testSetting, testSettingsameCase);

            //Etag tests
            var testSettingEtagDiff = testSettingsameCase.Clone();

            testSettingsameCase.ETag = new ETag(Guid.NewGuid().ToString());
            testSettingEtagDiff.ETag = new ETag(Guid.NewGuid().ToString());
            Assert.AreNotEqual(testSettingsameCase, testSettingEtagDiff);

            // Different tags
            var testSettingDiffTags = s_testSetting.Clone();

            testSettingDiffTags.Tags.Add("tag3", "test_value3");
            Assert.AreNotEqual(s_testSetting, testSettingDiffTags);
        }
Esempio n. 6
0
        public async Task DeleteSetting()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            try
            {
                // Prepare environment
                var testSettingDiff = testSetting.Clone();
                testSettingDiff.Label = null;
                await service.SetAsync(testSetting);

                await service.SetAsync(testSettingDiff);

                // Test
                await service.DeleteAsync(testSettingDiff.Key);

                //Try to get the non-existing setting
                var e = Assert.ThrowsAsync <RequestFailedException>(async() =>
                {
                    await service.GetAsync(testSettingDiff.Key);
                });

                Assert.AreEqual(404, e.Status);
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key, testSetting.Label);
            }
        }
        public async Task GetSettingWithLabel()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            // Prepare environment
            ConfigurationSetting testSettingNoLabel = testSetting.Clone();

            testSettingNoLabel.Label = null;

            try
            {
                await service.SetConfigurationSettingAsync(testSettingNoLabel);

                await service.SetConfigurationSettingAsync(testSetting);

                // Test
                ConfigurationSetting responseSetting = await service.GetConfigurationSettingAsync(testSetting.Key, testSetting.Label);

                Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(testSetting, responseSetting));
            }
            finally
            {
                await service.DeleteConfigurationSettingAsync(testSetting.Key, testSetting.Label);

                await service.DeleteConfigurationSettingAsync(testSettingNoLabel.Key);
            }
        }
Esempio n. 8
0
        public async Task GetSettingWithLabel()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            // Prepare environment
            var testSettingNoLabel = testSetting.Clone();

            testSettingNoLabel.Label = null;

            try
            {
                await service.SetAsync(testSettingNoLabel);

                await service.SetAsync(testSetting);

                // Test
                ConfigurationSetting responseSetting = await service.GetAsync(testSetting.Key, testSetting.Label);

                Assert.AreEqual(testSetting, responseSetting);
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key, testSetting.Label);

                await service.DeleteAsync(testSettingNoLabel.Key);
            }
        }
        public async Task GetRevisions()
        {
            // The service keeps revision history even after the key was removed
            // Avoid reusing ids
            Recording.DisableIdReuse();

            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            //Prepare environment
            ConfigurationSetting setting = testSetting;

            setting.Key = GenerateKeyId("key-");
            ConfigurationSetting testSettingUpdate = setting.Clone();

            testSettingUpdate.Label = "test_label_update";
            int expectedEvents = 2;

            try
            {
                await service.SetConfigurationSettingAsync(setting);

                await service.SetConfigurationSettingAsync(testSettingUpdate);

                // Test
                var selector = new SettingSelector
                {
                    KeyFilter      = setting.Key,
                    AcceptDateTime = DateTimeOffset.MaxValue
                };

                int resultsReturned = 0;
                await foreach (ConfigurationSetting value in service.GetRevisionsAsync(selector, CancellationToken.None))
                {
                    if (value.Label.Contains("update"))
                    {
                        Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(value, testSettingUpdate));
                    }
                    else
                    {
                        Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(value, setting));
                    }
                    resultsReturned++;
                }

                Assert.AreEqual(expectedEvents, resultsReturned);
            }
            finally
            {
                await service.DeleteConfigurationSettingAsync(setting.Key, setting.Label);

                await service.DeleteConfigurationSettingAsync(testSettingUpdate.Key, testSettingUpdate.Label);
            }
        }
        public async Task UpdateTags()
        {
            var connectionString = Environment.GetEnvironmentVariable("AZ_CONFIG_CONNECTION");

            Assert.NotNull(connectionString, "Set AZ_CONFIG_CONNECTION environment variable to the connection string");
            var service = new ConfigurationClient(connectionString);

            await service.SetAsync(s_testSetting);

            ConfigurationSetting responseGet = await service.GetAsync(s_testSetting.Key, s_testSetting.Label);


            try
            {
                // Different tags
                var testSettingDiff = responseGet.Clone();
                var settingTags     = testSettingDiff.Tags;
                if (settingTags.ContainsKey("tag1"))
                {
                    settingTags["tag1"] = "value-updated";
                }
                settingTags.Add("tag3", "test_value3");
                testSettingDiff.Tags = settingTags;

                ConfigurationSetting responseSetting = await service.UpdateAsync(testSettingDiff, CancellationToken.None);

                Assert.AreEqual(testSettingDiff, responseSetting);

                // No tags
                var testSettingNoTags = responseGet.Clone();
                testSettingNoTags.Tags = null;

                responseSetting = await service.UpdateAsync(testSettingNoTags, CancellationToken.None);

                Assert.AreEqual(testSettingNoTags, responseSetting);
            }
            finally
            {
                await service.DeleteAsync(s_testSetting.Key, s_testSetting.Label);
            }
        }
Esempio n. 11
0
        public async Task HasChangedNoValueNewValue()
        {
            var response = new MockResponse(200);

            var unversionedSetting = s_testSetting.Clone();

            string version          = Guid.NewGuid().ToString();
            var    versionedSetting = s_testSetting.Clone();

            versionedSetting.ETag = new ETag(version);

            response.SetContent(SerializationHelpers.Serialize(versionedSetting, SerializeSetting));
            response.AddHeader(new HttpHeader("ETag", versionedSetting.ETag.ToString()));

            var mockTransport           = new MockTransport(response);
            ConfigurationClient service = CreateTestService(mockTransport);

            bool hasChanged = await service.HasChangedAsync(unversionedSetting);

            MockRequest request = mockTransport.SingleRequest;

            AssertRequestCommon(request);
            Assert.AreEqual(RequestMethod.Head, request.Method);
            Assert.AreEqual($"https://contoso.appconfig.io/kv/test_key?label=test_label&api-version={s_version}", request.UriBuilder.ToString());
            Assert.IsTrue(response.Headers.TryGetValue("ETag", out string etag));
            Assert.AreEqual(version, etag);
            Assert.IsTrue(hasChanged);
        }
        public async Task Revisions()
        {
            var connectionString = Environment.GetEnvironmentVariable("AZ_CONFIG_CONNECTION");

            Assert.NotNull(connectionString, "Set AZ_CONFIG_CONNECTION environment variable to the connection string");
            var service = new ConfigurationClient(connectionString);

            //Prepare environment
            ConfigurationSetting setting = s_testSetting;

            setting.Key = string.Concat("key-", Guid.NewGuid().ToString("N"));
            var testSettingUpdate = setting.Clone();

            testSettingUpdate.Label = "test_label_update";
            int expectedEvents = 2;

            try
            {
                await service.SetAsync(setting);

                await service.SetAsync(testSettingUpdate);

                // Test
                var filter = new BatchRequestOptions();
                filter.Key      = setting.Key;
                filter.Revision = DateTimeOffset.MaxValue;
                SettingBatch batch = await service.GetRevisionsAsync(filter, CancellationToken.None);

                int resultsReturned = 0;
                for (int i = 0; i < batch.Count; i++)
                {
                    var value = batch[i];
                    if (value.Label.Contains("update"))
                    {
                        Assert.AreEqual(value, testSettingUpdate);
                    }
                    else
                    {
                        Assert.AreEqual(value, setting);
                    }
                    resultsReturned++;
                }

                Assert.AreEqual(expectedEvents, resultsReturned);
            }
            finally
            {
                await service.DeleteAsync(setting.Key, setting.Label);

                await service.DeleteAsync(testSettingUpdate.Key, testSettingUpdate.Label);
            }
        }
Esempio n. 13
0
        public async Task UpdateSettingTags()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            await service.SetAsync(testSetting);

            ConfigurationSetting responseGet = await service.GetAsync(testSetting.Key, testSetting.Label);


            try
            {
                // Different tags
                var testSettingDiff = responseGet.Clone();
                var settingTags     = testSettingDiff.Tags;
                if (settingTags.ContainsKey("tag1"))
                {
                    settingTags["tag1"] = "value-updated";
                }
                settingTags.Add("tag3", "test_value3");
                testSettingDiff.Tags = settingTags;

                ConfigurationSetting responseSetting = await service.UpdateAsync(testSettingDiff, CancellationToken.None);

                Assert.AreEqual(testSettingDiff, responseSetting);

                // No tags
                var testSettingNoTags = responseGet.Clone();
                testSettingNoTags.Tags = null;

                responseSetting = await service.UpdateAsync(testSettingNoTags, CancellationToken.None);

                Assert.AreEqual(testSettingNoTags, responseSetting);
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key, testSetting.Label);
            }
        }
Esempio n. 14
0
        public async Task GetRevisions()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            //Prepare environment
            ConfigurationSetting setting = testSetting;

            setting.Key = GenerateKeyId("key-");
            var testSettingUpdate = setting.Clone();

            testSettingUpdate.Label = "test_label_update";
            int expectedEvents = 2;

            try
            {
                await service.SetAsync(setting);

                await service.SetAsync(testSettingUpdate);

                // Test
                var selector = new SettingSelector(setting.Key);
                selector.AsOf = DateTimeOffset.MaxValue;
                SettingBatch batch = await service.GetRevisionsAsync(selector, CancellationToken.None);

                int resultsReturned = 0;
                for (int i = 0; i < batch.Count; i++)
                {
                    var value = batch[i];
                    if (value.Label.Contains("update"))
                    {
                        Assert.AreEqual(value, testSettingUpdate);
                    }
                    else
                    {
                        Assert.AreEqual(value, setting);
                    }
                    resultsReturned++;
                }

                Assert.AreEqual(expectedEvents, resultsReturned);
            }
            finally
            {
                await service.DeleteAsync(setting.Key, setting.Label);

                await service.DeleteAsync(testSettingUpdate.Key, testSettingUpdate.Label);
            }
        }
Esempio n. 15
0
        public async Task AddSettingNoLabel()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            ConfigurationSetting testSettingNoLabel = testSetting.Clone();

            testSettingNoLabel.Label = null;

            try
            {
                ConfigurationSetting setting = await service.AddAsync(testSettingNoLabel);

                Assert.AreEqual(testSettingNoLabel, setting);
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key);
            }
        }
        public async Task AddSettingNoLabel()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            ConfigurationSetting testSettingNoLabel = testSetting.Clone();

            testSettingNoLabel.Label = null;

            try
            {
                ConfigurationSetting setting = await service.AddAsync(testSettingNoLabel);

                Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(testSettingNoLabel, setting));
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key);
            }
        }
        public async Task GetRevisionsByKeyAndLabel()
        {
            // The service keeps revision history even after the key was removed
            // Avoid reusing ids
            Recording.DisableIdReuse();

            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            //Prepare environment
            ConfigurationSetting setting = testSetting;

            setting.Key = GenerateKeyId("key-");
            ConfigurationSetting testSettingUpdate = setting.Clone();

            testSettingUpdate.Label = "test_label_update";

            try
            {
                await service.SetConfigurationSettingAsync(setting);

                await service.SetConfigurationSettingAsync(testSettingUpdate);

                AsyncPageable <ConfigurationSetting> revisions = service.GetRevisionsAsync(testSettingUpdate.Key, testSettingUpdate.Label, CancellationToken.None);

                int resultsReturned = 0;
                await foreach (ConfigurationSetting value in revisions)
                {
                    Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(value, testSettingUpdate));
                    resultsReturned++;
                }

                Assert.AreEqual(1, resultsReturned);
            }
            finally
            {
                await service.DeleteConfigurationSettingAsync(setting.Key, setting.Label);

                await service.DeleteConfigurationSettingAsync(testSettingUpdate.Key, testSettingUpdate.Label);
            }
        }
        public async Task ConfigurationClient_SetReadOnly_OnlyIfUnchanged_Modified([Values(true, false)] bool isReadOnly)
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            try
            {
                ConfigurationSetting setting = await service.AddConfigurationSettingAsync(testSetting);

                ConfigurationSetting modifiedSetting = setting.Clone();
                modifiedSetting.Value = "new_value";
                await service.SetConfigurationSettingAsync(modifiedSetting);

                // Test
                RequestFailedException exception = Assert.ThrowsAsync <RequestFailedException>(async() => await service.SetReadOnlyAsync(setting, isReadOnly, onlyIfUnchanged: true));
                Assert.AreEqual(412, exception.Status);
            }
            finally
            {
                AssertStatus200(await service.DeleteConfigurationSettingAsync(testSetting.Key, testSetting.Label));
            }
        }
        public async Task SetIfUnchangedSettingModified()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            try
            {
                ConfigurationSetting setting = await service.AddAsync(testSetting);

                ConfigurationSetting modifiedSetting = setting.Clone();
                modifiedSetting.Value = "new_value";
                modifiedSetting       = await service.SetAsync(modifiedSetting);

                // Test
                RequestFailedException exception = Assert.ThrowsAsync <RequestFailedException>(async() =>
                                                                                               await service.SetAsync(setting, onlyIfUnchanged: true));
                Assert.AreEqual(412, exception.Status);
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key, testSetting.Label);
            }
        }
        public async Task GetIfChangedSettingModified()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSetting();

            try
            {
                ConfigurationSetting setting = await service.AddAsync(testSetting);

                ConfigurationSetting modifiedSetting = setting.Clone();
                modifiedSetting.Value = "new_value";
                modifiedSetting       = await service.SetAsync(modifiedSetting);

                Response <ConfigurationSetting> response = await service.GetAsync(setting, onlyIfChanged : true).ConfigureAwait(false);

                Assert.AreEqual(200, response.GetRawResponse().Status);
                Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(modifiedSetting, response.Value));
            }
            finally
            {
                await service.DeleteAsync(testSetting.Key, testSetting.Label);
            }
        }
        public async Task GetSettingSpecialCharacters()
        {
            ConfigurationClient  service     = GetClient();
            ConfigurationSetting testSetting = CreateSettingSpecialCharacters();

            // Prepare environment
            ConfigurationSetting testSettingNoLabel = testSetting.Clone();

            testSettingNoLabel.Label = null;

            try
            {
                await service.SetAsync(testSettingNoLabel);

                // Test
                ConfigurationSetting setting = await service.GetAsync(testSettingNoLabel.Key);

                Assert.True(ConfigurationSettingEqualityComparer.Instance.Equals(testSettingNoLabel, setting));
            }
            finally
            {
                await service.DeleteAsync(testSettingNoLabel.Key);
            }
        }