Skip to content

Commit 29d236f

Browse files
feat: Update contract tests to support multiple synchronizers and initializers
Update the contract test implementation to use array-based synchronizers instead of Primary/Secondary structure to match the sdk-test-harness changes that add support for multiple synchronizers. Changes: - Change SdkConfigDataSystemParams.Synchronizers from SdkConfigSynchronizersParams to SdkConfigDataSynchronizerParams[] (array) - Remove SdkConfigSynchronizersParams class (Primary/Secondary structure) - Rename SdkConfigSynchronizerParams to SdkConfigDataSynchronizerParams - Update SdkClientEntity to iterate over synchronizers array Co-Authored-By: rlamb@launchdarkly.com <rlamb@launchdarkly.com>
1 parent aa4616d commit 29d236f

File tree

2 files changed

+21
-39
lines changed

2 files changed

+21
-39
lines changed

pkgs/sdk/server/contract-tests/Representations.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public class SdkConfigDataSystemParams
152152
public SdkConfigDataStoreParams Store { get; set; }
153153
public int? StoreMode { get; set; }
154154
public SdkConfigDataInitializerParams[] Initializers { get; set; }
155-
public SdkConfigSynchronizersParams Synchronizers { get; set; }
155+
public SdkConfigDataSynchronizerParams[] Synchronizers { get; set; }
156156
public string PayloadFilter { get; set; }
157157
}
158158

@@ -185,13 +185,7 @@ public class SdkConfigDataInitializerParams
185185
public SdkConfigPollingParams Polling { get; set; }
186186
}
187187

188-
public class SdkConfigSynchronizersParams
189-
{
190-
public SdkConfigSynchronizerParams Primary { get; set; }
191-
public SdkConfigSynchronizerParams Secondary { get; set; }
192-
}
193-
194-
public class SdkConfigSynchronizerParams
188+
public class SdkConfigDataSynchronizerParams
195189
{
196190
public SdkConfigStreamingParams Streaming { get; set; }
197191
public SdkConfigPollingParams Polling { get; set; }

pkgs/sdk/server/contract-tests/SdkClientEntity.cs

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -487,27 +487,16 @@ private static Configuration BuildSdkConfig(SdkConfigParams sdkParams, ILogAdapt
487487
}
488488

489489
// Configure synchronizers
490-
if (sdkParams.DataSystem.Synchronizers != null)
490+
if (sdkParams.DataSystem.Synchronizers != null && sdkParams.DataSystem.Synchronizers.Length > 0)
491491
{
492492
var synchronizers = new List<IComponentConfigurer<IDataSource>>();
493493

494-
// Primary synchronizer
495-
if (sdkParams.DataSystem.Synchronizers.Primary != null)
494+
foreach (var synchronizerParams in sdkParams.DataSystem.Synchronizers)
496495
{
497-
var primary = CreateSynchronizer(sdkParams.DataSystem.Synchronizers.Primary, sdkParams.DataSystem.PayloadFilter);
498-
if (primary != null)
496+
var synchronizer = CreateSynchronizer(synchronizerParams, sdkParams.DataSystem.PayloadFilter);
497+
if (synchronizer != null)
499498
{
500-
synchronizers.Add(primary);
501-
}
502-
}
503-
504-
// Secondary synchronizer (optional)
505-
if (sdkParams.DataSystem.Synchronizers.Secondary != null)
506-
{
507-
var secondary = CreateSynchronizer(sdkParams.DataSystem.Synchronizers.Secondary, sdkParams.DataSystem.PayloadFilter);
508-
if (secondary != null)
509-
{
510-
synchronizers.Add(secondary);
499+
synchronizers.Add(synchronizer);
511500
}
512501
}
513502

@@ -517,23 +506,22 @@ private static Configuration BuildSdkConfig(SdkConfigParams sdkParams, ILogAdapt
517506

518507
// Find the best synchronizer to use for FDv1 fallback configuration
519508
// Prefer polling synchronizers since FDv1 fallback is polling-based
520-
SdkConfigSynchronizerParams synchronizerForFallback = null;
509+
SdkConfigDataSynchronizerParams synchronizerForFallback = null;
521510

522-
// First, try to find a polling synchronizer (check secondary first, then primary)
523-
if (sdkParams.DataSystem.Synchronizers.Secondary != null &&
524-
sdkParams.DataSystem.Synchronizers.Secondary.Polling != null)
511+
// First, try to find a polling synchronizer
512+
foreach (var syncParams in sdkParams.DataSystem.Synchronizers)
525513
{
526-
synchronizerForFallback = sdkParams.DataSystem.Synchronizers.Secondary;
527-
}
528-
else if (sdkParams.DataSystem.Synchronizers.Primary != null &&
529-
sdkParams.DataSystem.Synchronizers.Primary.Polling != null)
530-
{
531-
synchronizerForFallback = sdkParams.DataSystem.Synchronizers.Primary;
514+
if (syncParams.Polling != null)
515+
{
516+
synchronizerForFallback = syncParams;
517+
break;
518+
}
532519
}
533-
// If no polling synchronizer found, use primary synchronizer (could be streaming)
534-
else if (sdkParams.DataSystem.Synchronizers.Primary != null)
520+
521+
// If no polling synchronizer found, use the first synchronizer (could be streaming)
522+
if (synchronizerForFallback == null && sdkParams.DataSystem.Synchronizers.Length > 0)
535523
{
536-
synchronizerForFallback = sdkParams.DataSystem.Synchronizers.Primary;
524+
synchronizerForFallback = sdkParams.DataSystem.Synchronizers[0];
537525
}
538526

539527
if (synchronizerForFallback != null)
@@ -563,7 +551,7 @@ private static Configuration BuildSdkConfig(SdkConfigParams sdkParams, ILogAdapt
563551
}
564552

565553
private static IComponentConfigurer<IDataSource> CreateSynchronizer(
566-
SdkConfigSynchronizerParams synchronizer,
554+
SdkConfigDataSynchronizerParams synchronizer,
567555
string payloadFilter)
568556
{
569557
if (synchronizer.Polling != null)
@@ -608,7 +596,7 @@ private static IComponentConfigurer<IDataSource> CreateSynchronizer(
608596
}
609597

610598
private static IComponentConfigurer<IDataSource> CreateFDv1FallbackSynchronizer(
611-
SdkConfigSynchronizerParams synchronizer)
599+
SdkConfigDataSynchronizerParams synchronizer)
612600
{
613601
// FDv1 fallback synchronizer is always polling-based
614602
var fdv1PollingBuilder = DataSystemComponents.FDv1Polling();

0 commit comments

Comments
 (0)