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); } }
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); }
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)); }
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); }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }