diff --git a/lib/sdk/server/Makefile b/lib/sdk/server/Makefile index 9dad9be..262ca5b 100644 --- a/lib/sdk/server/Makefile +++ b/lib/sdk/server/Makefile @@ -32,8 +32,8 @@ run-contract-tests: @curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/v2/downloader/run.sh \ | VERSION=v2 PARAMS="-url http://localhost:$(TEST_SERVICE_PORT) -debug -skip-from=$(SUPPRESSION_FILE) $(TEST_HARNESS_PARAMS)" sh @echo "Running SDK contract test v3.0.0-alpha.1..." - @curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/v3.0.0-alpha.1/downloader/run.sh \ - | VERSION=v3.0.0-alpha.1 PARAMS="-url http://localhost:$(TEST_SERVICE_PORT) -debug -stop-service-at-end -skip-from=$(SUPPRESSION_FILE_FDV2) $(TEST_HARNESS_PARAMS)" sh + @curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/v3.0.0-alpha.3/downloader/run.sh \ + | VERSION=v3.0.0-alpha.3 PARAMS="-url http://localhost:$(TEST_SERVICE_PORT) -debug -stop-service-at-end -skip-from=$(SUPPRESSION_FILE_FDV2) $(TEST_HARNESS_PARAMS)" sh contract-tests: build-contract-tests start-contract-test-service-bg run-contract-tests diff --git a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java index 265150a..99890e7 100644 --- a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java +++ b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/Representations.java @@ -133,7 +133,8 @@ public static class SdkConfigDataSystemParams { SdkConfigDataStoreParams store; Integer storeMode; SdkConfigDataInitializerParams[] initializers; - SdkConfigSynchronizersParams synchronizers; + /** List of synchronizers (matches servicedef DataSystem.Synchronizers). */ + SdkConfigSynchronizerParams[] synchronizers; String payloadFilter; } @@ -161,11 +162,6 @@ public static class SdkConfigDataInitializerParams { SdkConfigPollingParams polling; } - public static class SdkConfigSynchronizersParams { - SdkConfigSynchronizerParams primary; - SdkConfigSynchronizerParams secondary; - } - public static class SdkConfigSynchronizerParams { SdkConfigStreamingParams streaming; SdkConfigPollingParams polling; diff --git a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java index 22180a5..ced6e3f 100644 --- a/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java +++ b/lib/sdk/server/contract-tests/service/src/main/java/sdktest/SdkClientEntity.java @@ -70,7 +70,6 @@ import sdktest.Representations.SdkConfigParams; import sdktest.Representations.SdkConfigDataSystemParams; import sdktest.Representations.SdkConfigDataInitializerParams; -import sdktest.Representations.SdkConfigSynchronizersParams; import sdktest.Representations.SdkConfigSynchronizerParams; import sdktest.Representations.SdkConfigPollingParams; import sdktest.Representations.SdkConfigStreamingParams; @@ -542,34 +541,23 @@ private LDConfig buildSdkConfig(SdkConfigParams params, String tag) { } } - // Configure synchronizers - if (params.dataSystem.synchronizers != null) { - List> synchronizers = new ArrayList<>(); - // Primary synchronizer - if (params.dataSystem.synchronizers.primary != null) { - DataSourceBuilder primary = createSynchronizer(params.dataSystem.synchronizers.primary, params.dataSystem.payloadFilter); - if (primary != null) { - synchronizers.add(primary); + if (params.dataSystem.synchronizers != null && params.dataSystem.synchronizers.length > 0) { + List> synchronizerBuilders = new ArrayList<>(); + for (SdkConfigSynchronizerParams syncParams : params.dataSystem.synchronizers) { + DataSourceBuilder sync = createSynchronizer(syncParams, params.dataSystem.payloadFilter); + if (sync != null) { + synchronizerBuilders.add(sync); } } - - // Secondary synchronizer (optional) - if (params.dataSystem.synchronizers.secondary != null) { - DataSourceBuilder secondary = createSynchronizer(params.dataSystem.synchronizers.secondary, params.dataSystem.payloadFilter); - if (secondary != null) { - synchronizers.add(secondary); - } - } - - if (!synchronizers.isEmpty()) { - dataSystemBuilder.synchronizers(synchronizers.toArray(new DataSourceBuilder[0])); + if (!synchronizerBuilders.isEmpty()) { + dataSystemBuilder.synchronizers(synchronizerBuilders.toArray(new DataSourceBuilder[0])); } } - // Configure FDv1 fallback synchronizer + // Configure FDv1 fallback synchronizer (pick first polling, else first synchronizer) SdkConfigSynchronizerParams fallbackSynchronizer = - selectFallbackSynchronizer(params.dataSystem); + selectFallbackSynchronizer(params.dataSystem.synchronizers); if (fallbackSynchronizer != null) { // Set global polling endpoints if the fallback synchronizer has polling with custom base URI if (fallbackSynchronizer.polling != null && @@ -624,32 +612,21 @@ private DataSourceBuilder createSynchronizer( /** * Selects the best synchronizer configuration to use for FDv1 fallback. - * Prefers polling synchronizers, falls back to primary synchronizer. + * Prefers the first polling synchronizer in the list, otherwise the first synchronizer. */ private static SdkConfigSynchronizerParams selectFallbackSynchronizer( - SdkConfigDataSystemParams dataSystemParams) { - - // Prefer secondary polling synchronizer - if (dataSystemParams.synchronizers != null && - dataSystemParams.synchronizers.secondary != null && - dataSystemParams.synchronizers.secondary.polling != null) { - return dataSystemParams.synchronizers.secondary; - } - - // Fall back to primary polling synchronizer - if (dataSystemParams.synchronizers != null && - dataSystemParams.synchronizers.primary != null && - dataSystemParams.synchronizers.primary.polling != null) { - return dataSystemParams.synchronizers.primary; + SdkConfigSynchronizerParams[] synchronizers) { + if (synchronizers == null || synchronizers.length == 0) { + return null; } - - // Fall back to primary synchronizer (even if streaming) - if (dataSystemParams.synchronizers != null && - dataSystemParams.synchronizers.primary != null) { - return dataSystemParams.synchronizers.primary; + // Prefer first polling synchronizer (FDv1 fallback is polling-based) + for (SdkConfigSynchronizerParams sync : synchronizers) { + if (sync.polling != null) { + return sync; + } } - - return null; + // Otherwise use first synchronizer (streaming; FDv1 will use default polling config) + return synchronizers[0]; } /**