private async Task IdentifyCompletesOnlyWhenNewFlagsAreAvailable(Func <LdClient, User, Task> identifyTask) { var userA = User.WithKey("a"); var userB = User.WithKey("b"); var flagKey = "flag"; var userAFlags = new DataSetBuilder() .Add(flagKey, 1, LdValue.Of("a-value"), 0).Build(); var userBFlags = new DataSetBuilder() .Add(flagKey, 2, LdValue.Of("b-value"), 1).Build(); var startedIdentifyUserB = new SemaphoreSlim(0, 1); var canFinishIdentifyUserB = new SemaphoreSlim(0, 1); var finishedIdentifyUserB = new SemaphoreSlim(0, 1); var dataSourceFactory = new MockDataSourceFactoryFromLambda((ctx, updates, user, bg) => new MockDataSourceFromLambda(user, async() => { switch (user.Key) { case "a": updates.Init(user, userAFlags); break; case "b": startedIdentifyUserB.Release(); await canFinishIdentifyUserB.WaitAsync(); updates.Init(user, userBFlags); break; } })); var config = BasicConfig() .DataSource(dataSourceFactory) .Build(); using (var client = await LdClient.InitAsync(config, userA)) { Assert.True(client.Initialized); Assert.Equal("a-value", client.StringVariation(flagKey, null)); var identifyUserBTask = Task.Run(async() => { await identifyTask(client, userB); finishedIdentifyUserB.Release(); }); await startedIdentifyUserB.WaitAsync(); Assert.False(client.Initialized); Assert.Null(client.StringVariation(flagKey, null)); canFinishIdentifyUserB.Release(); await finishedIdentifyUserB.WaitAsync(); Assert.True(client.Initialized); Assert.Equal("b-value", client.StringVariation(flagKey, null)); } }
public void FlagsAreSavedToPersistentStorageByDefault() { var storage = new MockPersistentDataStore(); var initialFlags = new DataSetBuilder().Add("flag", 1, LdValue.Of(100), 0).Build(); var config = BasicConfig() .DataSource(MockPollingProcessor.Factory(initialFlags)) .Persistence(Components.Persistence().Storage(storage.AsSingletonFactory())) .Build(); using (var client = TestUtil.CreateClient(config, BasicUser)) { var storedData = storage.InspectUserData(config.MobileKey, BasicUser.Key); Assert.NotNull(storedData); AssertHelpers.DataSetsEqual(initialFlags, storedData.Value); } }
public void FlagsAreLoadedFromPersistentStorageByDefault() { var storage = new MockPersistentDataStore(); var data = new DataSetBuilder().Add("flag", 1, LdValue.Of(100), 0).Build(); var config = BasicConfig() .Persistence(Components.Persistence().Storage(storage.AsSingletonFactory())) .Offline(true) .Build(); storage.SetupUserData(config.MobileKey, BasicUser.Key, data); using (var client = TestUtil.CreateClient(config, BasicUser)) { Assert.Equal(100, client.IntVariation("flag", 99)); } }