From ecedbd6462b71229f016722ee189a5d3e2d92e3f Mon Sep 17 00:00:00 2001 From: Aaron Zeisler Date: Wed, 18 Feb 2026 21:11:34 -0800 Subject: [PATCH] chore: Fix flaky end-to-end tests While working with the Go server SDK, I noticed that some tests were intermittently failing in CI. These tests were unrelated to the changes that I was making. After digging into the failures, I found that the failing tests were asserting that an LDClient object was in the "VALID" state immedaitely after initializing the object. In CI, the state was being reported as "INITIALIZING". When I simply re-ran the tests in the CI system, the tests passed. This commit updates tests cases in the end-to-end tests to wait for the LDClient to reach the "VALID" state. I've used the WaitFor() method that's built into the client. The test times out if the client hasn't reached the expected state within 5 seconds. --- ldclient_end_to_end_fdv2_test.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ldclient_end_to_end_fdv2_test.go b/ldclient_end_to_end_fdv2_test.go index e980b78f..32c7a92f 100644 --- a/ldclient_end_to_end_fdv2_test.go +++ b/ldclient_end_to_end_fdv2_test.go @@ -64,7 +64,8 @@ func TestFDV2DefaultIsTwoPhaseInit(t *testing.T) { require.NoError(t, err) defer client.Close() - assert.Equal(t, string(interfaces.DataSourceStateValid), string(client.GetDataSourceStatusProvider().GetStatus().State)) + reached := client.GetDataSourceStatusProvider().WaitFor(interfaces.DataSourceStateValid, time.Second*5) + require.True(t, reached, "timed out waiting for data source to reach VALID state") value, _ := client.BoolVariation(alwaysTrueFlag.Key, testUser, false) assert.True(t, value) @@ -104,7 +105,8 @@ func TestFDV2CanFallBackToV1(t *testing.T) { require.NoError(t, err) defer client.Close() - assert.Equal(t, string(interfaces.DataSourceStateValid), string(client.GetDataSourceStatusProvider().GetStatus().State)) + reached := client.GetDataSourceStatusProvider().WaitFor(interfaces.DataSourceStateValid, time.Second*5) + require.True(t, reached, "timed out waiting for data source to reach VALID state") assertNoMoreRequests(t, pollV2SyncReqCh) assertNoMoreRequests(t, streamV2SyncReqCh) @@ -144,7 +146,8 @@ func TestFDV2StreamingSynchronizer(t *testing.T) { require.NoError(t, err) defer client.Close() - assert.Equal(t, string(interfaces.DataSourceStateValid), string(client.GetDataSourceStatusProvider().GetStatus().State)) + reached := client.GetDataSourceStatusProvider().WaitFor(interfaces.DataSourceStateValid, time.Second*5) + require.True(t, reached, "timed out waiting for data source to reach VALID state") value, _ := client.BoolVariation(alwaysTrueFlag.Key, testUser, false) assert.True(t, value) @@ -238,7 +241,8 @@ func TestFDV2StreamingSynchronizeReconnectsWithNonFatalError(t *testing.T) { require.NoError(t, err) defer client.Close() - assert.Equal(t, string(interfaces.DataSourceStateValid), string(client.GetDataSourceStatusProvider().GetStatus().State)) + reached := client.GetDataSourceStatusProvider().WaitFor(interfaces.DataSourceStateValid, time.Second*5) + require.True(t, reached, "timed out waiting for data source to reach VALID state") value, _ := client.BoolVariation(alwaysTrueFlag.Key, testUser, false) assert.True(t, value) @@ -402,7 +406,8 @@ func TestFDV2FileInitializerWillDeferToFirstSynchronizer(t *testing.T) { require.NoError(t, err) defer client.Close() - assert.Equal(t, string(interfaces.DataSourceStateValid), string(client.GetDataSourceStatusProvider().GetStatus().State)) + reached := client.GetDataSourceStatusProvider().WaitFor(interfaces.DataSourceStateValid, time.Second*5) + require.True(t, reached, "timed out waiting for data source to reach VALID state") value, _ := client.BoolVariation(alwaysTrueFlag.Key, testUser, false) assert.True(t, value)