Skip to content

Commit 356c3e6

Browse files
authored
chore: Simulate initialization delay to reduce flaky test (#175)
1 parent 3b2ce8b commit 356c3e6

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

pkgs/sdk/client/src/Integrations/TestData.cs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public sealed class TestData : IComponentConfigurer<IDataSource>
5555
private readonly Dictionary<string, FlagBuilder> _currentBuilders =
5656
new Dictionary<string, FlagBuilder>();
5757
private readonly List<DataSourceImpl> _instances = new List<DataSourceImpl>();
58+
private TimeSpan _initializationDelay = TimeSpan.Zero;
5859

5960
#endregion
6061

@@ -75,6 +76,22 @@ private TestData() { }
7576
/// <returns>a new configurable test data source</returns>
7677
public static TestData DataSource() => new TestData();
7778

79+
/// <summary>
80+
/// Sets an artificial delay before the data source initializes.
81+
/// </summary>
82+
/// <remarks>
83+
/// This is useful for testing scenarios where you need to observe intermediate
84+
/// states like <see cref="DataSourceState.Initializing"/> before the data source
85+
/// reaches <see cref="DataSourceState.Valid"/>.
86+
/// </remarks>
87+
/// <param name="delay">the delay before initialization</param>
88+
/// <returns>the same <see cref="TestData"/> instance</returns>
89+
public TestData WithInitializationDelay(TimeSpan delay)
90+
{
91+
_initializationDelay = delay;
92+
return this;
93+
}
94+
7895
/// <summary>
7996
/// Creates or copies a <see cref="FlagBuilder"/> for building a test flag configuration.
8097
/// </summary>
@@ -202,7 +219,8 @@ public IDataSource Build(LdClientContext clientContext)
202219
this,
203220
clientContext.DataSourceUpdateSink,
204221
clientContext.CurrentContext,
205-
clientContext.BaseLogger.SubLogger("DataSource.TestData")
222+
clientContext.BaseLogger.SubLogger("DataSource.TestData"),
223+
_initializationDelay
206224
);
207225
lock (_lock)
208226
{
@@ -649,21 +667,27 @@ internal class DataSourceImpl : IDataSource
649667
private readonly TestData _parent;
650668
private readonly IDataSourceUpdateSink _updateSink;
651669
private readonly Logger _log;
670+
private readonly TimeSpan _initializationDelay;
652671

653672
internal readonly Context Context;
654673

655-
internal DataSourceImpl(TestData parent, IDataSourceUpdateSink updateSink, Context context, Logger log)
674+
internal DataSourceImpl(TestData parent, IDataSourceUpdateSink updateSink, Context context, Logger log, TimeSpan initializationDelay)
656675
{
657676
_parent = parent;
658677
_updateSink = updateSink;
659678
Context = context;
660679
_log = log;
680+
_initializationDelay = initializationDelay;
661681
}
662682

663-
public Task<bool> Start()
683+
public async Task<bool> Start()
664684
{
685+
if (_initializationDelay > TimeSpan.Zero)
686+
{
687+
await Task.Delay(_initializationDelay);
688+
}
665689
_updateSink.Init(Context, _parent.MakeInitData(Context));
666-
return Task.FromResult(true);
690+
return true;
667691
}
668692

669693
public bool Initialized => true;

pkgs/sdk/client/test/LaunchDarkly.ClientSdk.Tests/LdClientDataSourceStatusTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public void DataSourceStatusStartsAsSetOfflineIfConfiguredOffline()
150150
[Fact]
151151
public void DataSourceStatusIsRestoredWhenNoLongerSetOffline()
152152
{
153-
var testData = TestData.DataSource();
153+
var testData = TestData.DataSource().WithInitializationDelay(TimeSpan.FromMilliseconds(100));
154154
var config = BasicConfig().DataSource(testData).Offline(true).Build();
155155

156156
using (var client = TestUtil.CreateClient(config, BasicUser))
@@ -187,7 +187,7 @@ public void DataSourceStatusStartsAsNetworkUnavailableIfNetworkIsUnavailable()
187187
[Fact]
188188
public void DataSourceStatusIsRestoredWhenNetworkIsAvailableAgain()
189189
{
190-
var testData = TestData.DataSource();
190+
var testData = TestData.DataSource().WithInitializationDelay(TimeSpan.FromMilliseconds(100));
191191
var connectivity = new MockConnectivityStateManager(false);
192192
var config = BasicConfig()
193193
.DataSource(testData)
@@ -247,7 +247,7 @@ public void SetOfflineStatusOverridesNetworkUnavailableStatus()
247247
[Fact]
248248
public void BackgroundDisabledState()
249249
{
250-
var testData = TestData.DataSource();
250+
var testData = TestData.DataSource().WithInitializationDelay(TimeSpan.FromMilliseconds(100));
251251
var backgrounder = new MockBackgroundModeManager();
252252
var config = BasicConfig()
253253
.BackgroundModeManager(backgrounder)

0 commit comments

Comments
 (0)