@@ -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 ;
0 commit comments