Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions pkgs/sdk/server/contract-tests/Representations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,15 @@ public class SdkConfigParams
public SdkTagParams Tags { get; set; }
public SdkHookParams Hooks { get; set; }
public SdkConfigDataSystemParams DataSystem { get; set; }
public SdkConfigOverridesParams Overrides { get; set; }
}

public class SdkConfigOverridesParams
{
public string[] FilePaths { get; set; }
public string DuplicateKeysHandling { get; set; }
public string ChangeDetection { get; set; }
public long? PollIntervalMs { get; set; }
}

public class SdkTagParams
Expand Down
50 changes: 50 additions & 0 deletions pkgs/sdk/server/contract-tests/SdkClientEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using LaunchDarkly.Sdk.Server.Interfaces;
using LaunchDarkly.Sdk.Server.Migrations;
using LaunchDarkly.Sdk.Server.Subsystems;
using YamlDotNet.Serialization;

namespace TestService
{
Expand Down Expand Up @@ -663,12 +664,61 @@ private static Configuration BuildSdkConfig(SdkConfigParams sdkParams, ILogAdapt
dataSystemBuilder.FDv1FallbackSynchronizer(fdv1FallbackBuilder);
}

// The override source is an option of the FDv2 data system.
if (sdkParams.Overrides != null)
{
dataSystemBuilder.Overrides(BuildOverrideSource(sdkParams.Overrides));
}

builder.DataSystem(dataSystemBuilder);
}
else if (sdkParams.Overrides != null)
{
throw new ArgumentException("the overrides configuration requires a dataSystem configuration");
}

return builder.Build();
}

private static FileOverrideSourceBuilder BuildOverrideSource(SdkConfigOverridesParams p)
{
var yaml = new DeserializerBuilder().WithAttemptingUnquotedStringTypeDeserialization().Build();
var source = FileOverrides.Source()
.FilePaths(p.FilePaths ?? new string[0])
.Parser(s => yaml.Deserialize<object>(s));
switch (p.DuplicateKeysHandling)
{
case null:
break;
case "fail":
source.DuplicateKeysHandling(FileOverrideTypes.DuplicateKeysHandling.Fail);
break;
case "ignore":
source.DuplicateKeysHandling(FileOverrideTypes.DuplicateKeysHandling.Ignore);
break;
default:
throw new ArgumentException("unrecognized duplicateKeysHandling: " + p.DuplicateKeysHandling);
}
switch (p.ChangeDetection)
{
case null:
break;
case "polling":
source.ChangeDetection(FileOverrideTypes.ChangeDetection.Polling);
break;
case "watching":
source.ChangeDetection(FileOverrideTypes.ChangeDetection.Watching);
break;
default:
throw new ArgumentException("unrecognized changeDetection: " + p.ChangeDetection);
}
if (p.PollIntervalMs.HasValue)
{
source.PollInterval(TimeSpan.FromMilliseconds(p.PollIntervalMs.Value));
}
return source;
}

private static IComponentConfigurer<IDataSource> CreateSynchronizer(
SdkConfigDataSynchronizerParams synchronizer,
string payloadFilter)
Expand Down
7 changes: 5 additions & 2 deletions pkgs/sdk/server/contract-tests/TestService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ public class Program
{
public static void Main(string[] args)
{
// An optional first argument selects the port, so that several test services can run at once.
var port = args.Length > 0 ? int.Parse(args[0]) : 8000;
var quitSignal = new EventWaitHandle(false, EventResetMode.AutoReset);
var app = new Webapp(quitSignal);
var server = HttpServer.Start(8000, app.Handler);
var server = HttpServer.Start(port, app.Handler);
server.Recorder.Enabled = false;
quitSignal.WaitOne();
server.Dispose();
Expand Down Expand Up @@ -49,7 +51,8 @@ public class Webapp
"fdv1-fallback",
"instance-id",
"retry-conformance-fdv1-streaming",
"retry-conformance-fdv1-polling"
"retry-conformance-fdv1-polling",
"flag-overrides"
};

public readonly Handler Handler;
Expand Down
1 change: 1 addition & 0 deletions pkgs/sdk/server/contract-tests/TestService.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

<ItemGroup>
<PackageReference Include="LaunchDarkly.TestHelpers" Version="2.0.0" />
<PackageReference Include="YamlDotNet" Version="12.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading