Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public static async Task<bool> HaveCollectionsChanged(
LabelFilter = keyValueSelector.LabelFilter
};

AsyncPageable<ConfigurationSetting> pageable = client.GetConfigurationSettingsAsync(selector, cancellationToken);
AsyncPageable<ConfigurationSetting> pageable = client.CheckConfigurationSettingsAsync(selector, cancellationToken);

using IEnumerator<WatchedPage> existingPageWatcherEnumerator = pageWatchers.GetEnumerator();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<Import Project="..\..\build\NugetProperties.props" />

Expand All @@ -15,7 +15,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Data.AppConfiguration" Version="1.7.0" />
<PackageReference Include="Azure.Data.AppConfiguration" Version="1.8.0" />
<PackageReference Include="Azure.Messaging.EventGrid" Version="5.0.0" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.8.0" />
<PackageReference Include="DnsClient" Version="1.7.0" />
Expand Down
18 changes: 11 additions & 7 deletions tests/Tests.AzureAppConfiguration/Unit/AfdTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,12 @@ public async Task AfdTests_RegisterAllRefresh()
var mockAsyncPageable4 = new MockAsyncPageable(keyValueCollection3, null, 3, responses4);

mockClient.SetupSequence(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(mockAsyncPageable1)
.Returns(mockAsyncPageable2)
.Returns(mockAsyncPageable3)
.Returns(mockAsyncPageable4);
.Returns(mockAsyncPageable1) // initial load
.Returns(mockAsyncPageable3); // reload after change detected

mockClient.SetupSequence(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(mockAsyncPageable2) // first check - stale, should not refresh
.Returns(mockAsyncPageable3); // second check - should trigger refresh

var afdEndpoint = new Uri("https://test.b01.azurefd.net");
IConfigurationRefresher refresher = null;
Expand Down Expand Up @@ -381,10 +383,12 @@ public async Task AfdTests_FeatureFlagsRefresh()
mockClient.SetupSequence(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(mockAsyncPageable1) // default load configuration settings
.Returns(mockAsyncPageable1) // load feature flag
.Returns(mockAsyncPageable3) // reload after change detected
.Returns(mockAsyncPageable3); // reload feature flags

mockClient.SetupSequence(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(mockAsyncPageable2) // watch request, should not trigger refresh
.Returns(mockAsyncPageable3) // watch request, should trigger refresh
.Returns(mockAsyncPageable3) // default load configuration settings
.Returns(mockAsyncPageable3); // load feature flag
.Returns(mockAsyncPageable3); // watch request, should trigger refresh

var afdEndpoint = new Uri("https://test.b01.azurefd.net");
IConfigurationRefresher refresher = null;
Expand Down
46 changes: 45 additions & 1 deletion tests/Tests.AzureAppConfiguration/Unit/FeatureManagementTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -777,6 +777,10 @@ public async Task WatchesFeatureFlags()
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

IConfigurationRefresher refresher = null;
var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
Expand Down Expand Up @@ -849,6 +853,10 @@ public async Task WatchesFeatureFlagsUsingCacheExpirationInterval()
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

var cacheExpirationInterval = TimeSpan.FromSeconds(1);

IConfigurationRefresher refresher = null;
Expand Down Expand Up @@ -923,6 +931,10 @@ public async Task SkipRefreshIfRefreshIntervalHasNotElapsed()
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

IConfigurationRefresher refresher = null;
var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
Expand Down Expand Up @@ -994,6 +1006,10 @@ public async Task SkipRefreshIfCacheNotExpired()
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

IConfigurationRefresher refresher = null;
var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
Expand Down Expand Up @@ -1118,6 +1134,10 @@ public async Task DoesNotUseEtagForFeatureFlagRefresh()
.Callback(() => mockAsyncPageable.UpdateCollection(new List<ConfigurationSetting> { _kv }))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(new List<ConfigurationSetting> { _kv }))
.Returns(mockAsyncPageable);

IConfigurationRefresher refresher = null;
var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
Expand All @@ -1134,7 +1154,8 @@ public async Task DoesNotUseEtagForFeatureFlagRefresh()
Thread.Sleep(RefreshInterval);

await refresher.TryRefreshAsync();
mockClient.Verify(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()), Times.Exactly(3));
mockClient.Verify(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()), Times.Exactly(2));
mockClient.Verify(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()), Times.Once());
}

[Fact]
Expand Down Expand Up @@ -1569,6 +1590,12 @@ public async Task DifferentCacheExpirationsForMultipleFeatureFlagRegistrations()
(s.Key.StartsWith(FeatureManagementConstants.FeatureFlagMarker + prefix2) && s.Label == label2 && s.Key != FeatureManagementConstants.FeatureFlagMarker + "App2_Feature3")).ToList()))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlagCollection.Where(s =>
(s.Key.StartsWith(FeatureManagementConstants.FeatureFlagMarker + prefix1) && s.Label == label1) ||
(s.Key.StartsWith(FeatureManagementConstants.FeatureFlagMarker + prefix2) && s.Label == label2 && s.Key != FeatureManagementConstants.FeatureFlagMarker + "App2_Feature3")).ToList()))
.Returns(mockAsyncPageable);

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
Expand Down Expand Up @@ -1739,6 +1766,11 @@ public async Task SelectAndRefreshSingleFeatureFlag()
s.Key.Equals(FeatureManagementConstants.FeatureFlagMarker + prefix1) && s.Label == label1).ToList()))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlagCollection.Where(s =>
s.Key.Equals(FeatureManagementConstants.FeatureFlagMarker + prefix1) && s.Label == label1).ToList()))
.Returns(mockAsyncPageable);

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
Expand Down Expand Up @@ -1802,6 +1834,10 @@ public async Task ValidateCorrectFeatureFlagLoggedIfModifiedOrRemovedDuringRefre
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.GetConfigurationSettingAsync(It.IsAny<ConfigurationSetting>(), It.IsAny<bool>(), It.IsAny<CancellationToken>()))
.ReturnsAsync((Func<ConfigurationSetting, bool, CancellationToken, Response<ConfigurationSetting>>)GetIfChanged);

Expand Down Expand Up @@ -1886,6 +1922,10 @@ public async Task ValidateFeatureFlagsUnchangedLogged()
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.GetConfigurationSettingAsync(It.IsAny<ConfigurationSetting>(), It.IsAny<bool>(), It.IsAny<CancellationToken>()))
.ReturnsAsync((Func<ConfigurationSetting, bool, CancellationToken, Response<ConfigurationSetting>>)GetIfChanged);

Expand Down Expand Up @@ -1964,6 +2004,10 @@ public async Task MapTransformFeatureFlagWithRefresh()
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(featureFlags))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.GetConfigurationSettingAsync(It.IsAny<ConfigurationSetting>(), It.IsAny<bool>(), It.IsAny<CancellationToken>()))
.ReturnsAsync((Func<ConfigurationSetting, bool, CancellationToken, Response<ConfigurationSetting>>)GetIfChanged);

Expand Down
8 changes: 7 additions & 1 deletion tests/Tests.AzureAppConfiguration/Unit/HealthCheckTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ public async Task HealthCheckTests_ReturnsUnhealthyWhenRefreshFailed()

mockClient.SetupSequence(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(new MockAsyncPageable(kvCollection))
.Returns(new MockAsyncPageable(Enumerable.Empty<ConfigurationSetting>().ToList()))
.Returns(new MockAsyncPageable(Enumerable.Empty<ConfigurationSetting>().ToList()));

mockClient.SetupSequence(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Throws(new RequestFailedException(503, "Request failed."))
.Returns(new MockAsyncPageable(Enumerable.Empty<ConfigurationSetting>().ToList()))
.Returns(new MockAsyncPageable(Enumerable.Empty<ConfigurationSetting>().ToList()));
Expand Down Expand Up @@ -145,7 +149,9 @@ public async Task HealthCheckTests_ShouldRespectHealthCheckRegistration()
var mockClient = new Mock<ConfigurationClient>(MockBehavior.Strict);

mockClient.SetupSequence(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(new MockAsyncPageable(kvCollection))
.Returns(new MockAsyncPageable(kvCollection));

mockClient.SetupSequence(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Throws(new RequestFailedException(503, "Request failed."));

var config = new ConfigurationBuilder()
Expand Down
20 changes: 20 additions & 0 deletions tests/Tests.AzureAppConfiguration/Unit/RefreshTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1128,6 +1128,10 @@ public async Task RefreshTests_SelectedKeysRefreshWithRegisterAll()
.Callback(() => mockAsyncPageable.UpdateCollection(_kvCollection))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(_kvCollection))
.Returns(mockAsyncPageable);

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
Expand Down Expand Up @@ -1218,6 +1222,9 @@ MockAsyncPageable GetTestKeys(SettingSelector selector, CancellationToken ct)
mockClient.Setup(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns((Func<SettingSelector, CancellationToken, MockAsyncPageable>)GetTestKeys);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns((Func<SettingSelector, CancellationToken, MockAsyncPageable>)GetTestKeys);

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
Expand Down Expand Up @@ -1303,6 +1310,10 @@ public async Task RefreshTests_StartsRefreshActivity()
.Callback(() => mockAsyncPageable.UpdateCollection(_kvCollection))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(_kvCollection))
.Returns(mockAsyncPageable);

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
Expand Down Expand Up @@ -1417,6 +1428,12 @@ Response<ConfigurationSetting> GetIfChanged(ConfigurationSetting setting, bool o
return new MockAsyncPageable(_kvCollection.Select(setting => TestHelpers.CloneSetting(setting)).ToList());
});

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns(() =>
{
return new MockAsyncPageable(_kvCollection.Select(setting => TestHelpers.CloneSetting(setting)).ToList());
});

mockClient.Setup(c => c.GetConfigurationSettingAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<CancellationToken>()))
.ReturnsAsync((Func<string, string, CancellationToken, Response<ConfigurationSetting>>)GetTestKey);

Expand Down Expand Up @@ -1456,6 +1473,9 @@ Response<ConfigurationSetting> GetIfChanged(ConfigurationSetting setting, bool o
mockClient.Setup(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns((Func<SettingSelector, CancellationToken, MockAsyncPageable>)GetTestKeys);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Returns((Func<SettingSelector, CancellationToken, MockAsyncPageable>)GetTestKeys);

mockClient.Setup(c => c.GetConfigurationSettingAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<CancellationToken>()))
.ReturnsAsync((Func<string, string, CancellationToken, Response<ConfigurationSetting>>)GetTestKey);

Expand Down
5 changes: 5 additions & 0 deletions tests/Tests.AzureAppConfiguration/Unit/TagFiltersTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,11 @@ public async Task TagFiltersTests_BasicRefresh()
kv.Tags.ContainsKey("Environment") && kv.Tags["Environment"] == "Development")))
.Returns(mockAsyncPageable);

mockClient.Setup(c => c.CheckConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
.Callback(() => mockAsyncPageable.UpdateCollection(_kvCollection.FindAll(kv =>
kv.Tags.ContainsKey("Environment") && kv.Tags["Environment"] == "Development")))
.Returns(mockAsyncPageable);

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
Expand Down
Loading