public void ExecuteGetSuccessfulWithResults() { //Arrange var baseUrl = "https://sdk-aws-staging.split.io/api/"; var headers = new Dictionary <string, string> { { "SplitSDKMachineIP", "1.0.0.0" }, { "SplitSDKMachineName", "localhost" }, { "SplitSDKVersion", "1" } }; var telemetryStorage = new InMemoryTelemetryStorage(); var sdkApiClient = new SegmentSdkApiClient("///PUT API KEY HERE///", headers, baseUrl, 10000, 10000, telemetryStorage); var apiSegmentChangeFetcher = new ApiSegmentChangeFetcher(sdkApiClient); var gates = new InMemoryReadinessGatesCache(); var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var segmentTaskQueue = new SegmentTaskQueue(); var wrapperAdapter = new WrapperAdapter(); var selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(apiSegmentChangeFetcher, gates, 30, segmentCache, 4, segmentTaskQueue, new TasksManager(wrapperAdapter), wrapperAdapter); //Act var name = "payed"; selfRefreshingSegmentFetcher.InitializeSegment(name); //Assert Assert.IsTrue(segmentCache.IsInSegment(name, "abcdz")); }
public void InitializeSegmentNotExistent() { //Arrange var gates = new InMemoryReadinessGatesCache(); var apiClient = new Mock <ISegmentSdkApiClient>(); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>())) .Returns(Task.FromResult(@"{ 'name': 'payed', 'added': [ 'abcdz', 'bcadz', 'xzydz' ], 'removed': [], 'since': -1, 'till': 10001 }")); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentTaskQueue = new SegmentTaskQueue(); var segmentFetcher = new SelfRefreshingSegmentFetcher(apiFetcher, gates, 10, cache, 1, segmentTaskQueue); //Act segmentFetcher.InitializeSegment("payed"); //Assert Thread.Sleep(5000); Assert.IsTrue(gates.AreSegmentsReady(1)); Assert.IsTrue(cache.IsInSegment("payed", "abcdz")); }
public void GetSegmentNamesTest() { // Arrange. var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); // Act & Assert. var result = segmentCache.GetSegmentNames(); Assert.AreEqual(0, result.Count); var keys = new List <string> { "abcd", "1234" }; var segmentName = "test"; segmentCache.AddToSegment(segmentName, keys); segmentCache.AddToSegment($"{segmentName}-1", keys); segmentCache.AddToSegment($"{segmentName}-2", keys); result = segmentCache.GetSegmentNames(); Assert.AreEqual(3, result.Count); Assert.IsTrue(result.Contains(segmentName)); Assert.IsTrue(result.Contains($"{segmentName}-1")); Assert.IsTrue(result.Contains($"{segmentName}-2")); }
public void RefreshSegmentShouldUpdateReadinessGatesWhenNoMoreChanges() { //Arrange var gates = new InMemoryReadinessGatesCache(); var apiClient = new Mock <ISegmentSdkApiClient>(); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>(), It.IsAny <CancellationToken>())) .Returns(TaskEx.FromResult(@"{ 'name': 'payed', 'added': [ 'abcdz', 'bcadz', 'xzydz' ], 'removed': [], 'since': -1, 'till': -1 }")); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentFetcher = new SelfRefreshingSegment("payed", apiFetcher, gates, cache); //Act segmentFetcher.RefreshSegment(); //Assert Assert.IsTrue(gates.AreSegmentsReady(1)); }
public void RefreshSegmentShouldUpdateSegmentsCache() { //Arrange var gates = new InMemoryReadinessGatesCache(); var apiClient = new Mock <ISegmentSdkApiClient>(); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>())) .Returns(@"{ 'name': 'payed', 'added': [ 'abcdz', 'bcadz', 'xzydz' ], 'removed': [], 'since': -1, 'till': 10001 }"); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentFetcher = new SelfRefreshingSegment("payed", apiFetcher, gates, cache); //Act segmentFetcher.RefreshSegment(); //Assert Assert.AreEqual(1, segments.Count); }
public void StartSchedullerSuccessfully() { //Arrange var gates = new InMemoryReadinessGatesCache(); var apiClient = new Mock <ISegmentSdkApiClient>(); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>())) .Returns(@"{ 'name': 'payed', 'added': [ 'abcdz', 'bcadz', 'xzydz' ], 'removed': [], 'since': -1, 'till': 10001 }"); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentFetcher = new SelfRefreshingSegmentFetcher(apiFetcher, gates, 10, cache, 1); //Act segmentFetcher.InitializeSegment("payed"); segmentFetcher.StartScheduler(); //Assert SelfRefreshingSegment segment; Assert.IsTrue(SegmentTaskQueue.segmentsQueue.TryTake(out segment, -1)); }
public void ExecuteGetWithoutResults() { //Arrange var baseUrl = "https://sdk-aws-staging.split.io/api/"; var headers = new Dictionary <string, string> { { "SplitSDKMachineIP", "1.0.0.0" }, { "SplitSDKMachineName", "localhost" }, { "SplitSDKVersion", "1" } }; var telemetryStorage = new InMemoryTelemetryStorage(); var sdkApiClient = new SplitSdkApiClient("0", headers, baseUrl, 10000, 10000, telemetryStorage); var apiSplitChangeFetcher = new ApiSplitChangeFetcher(sdkApiClient); var sdkSegmentApiClient = new SegmentSdkApiClient("0", headers, baseUrl, 10000, 10000, telemetryStorage); var apiSegmentChangeFetcher = new ApiSegmentChangeFetcher(sdkSegmentApiClient); var gates = new InMemoryReadinessGatesCache(); var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var segmentTaskQueue = new SegmentTaskQueue(); var wrapperAdapter = new WrapperAdapter(); var selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(apiSegmentChangeFetcher, gates, 30, segmentCache, 4, segmentTaskQueue, new TasksManager(wrapperAdapter), wrapperAdapter); var splitParser = new InMemorySplitParser(selfRefreshingSegmentFetcher, segmentCache); var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>()); var selfRefreshingSplitFetcher = new SelfRefreshingSplitFetcher(apiSplitChangeFetcher, splitParser, gates, 30, new TasksManager(wrapperAdapter), splitCache); selfRefreshingSplitFetcher.Start(); //Act gates.WaitUntilReady(10); var result = splitCache.GetSplit("condition_and"); //Assert Assert.IsNull(result); }
public void InitializeSegmentNotExistent() { // Arrange var gates = new InMemoryReadinessGatesCache(); gates.SetReady(); var apiClient = new Mock <ISegmentSdkApiClient>(); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentTaskQueue = new SegmentTaskQueue(); var segmentFetcher = new SelfRefreshingSegmentFetcher(apiFetcher, gates, 1, cache, 1, segmentTaskQueue, new TasksManager(wrapperAdapter), wrapperAdapter); segmentFetcher.Start(); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>(), It.IsAny <FetchOptions>())) .Returns(Task.FromResult(PayedSplitJson)); // Act segmentFetcher.InitializeSegment("payed"); // Assert Thread.Sleep(5000); Assert.IsTrue(cache.IsInSegment("payed", "abcdz")); }
public void ExecuteGetWithoutResults() { //Arrange var baseUrl = "https://sdk-aws-staging.split.io/api/"; var httpHeader = new HTTPHeader() { authorizationApiKey = "0", splitSDKMachineIP = "1.0.0.0", splitSDKMachineName = "localhost", splitSDKVersion = "net-0.0.0", splitSDKSpecVersion = "1.2", }; var sdkApiClient = new SplitSdkApiClient(httpHeader, baseUrl, 10000, 10000); var apiSplitChangeFetcher = new ApiSplitChangeFetcher(sdkApiClient); var sdkSegmentApiClient = new SegmentSdkApiClient(httpHeader, baseUrl, 10000, 10000); var apiSegmentChangeFetcher = new ApiSegmentChangeFetcher(sdkSegmentApiClient); var gates = new InMemoryReadinessGatesCache(); var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(apiSegmentChangeFetcher, gates, 30, segmentCache, 4); var splitParser = new InMemorySplitParser(selfRefreshingSegmentFetcher, segmentCache); var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>()); var selfRefreshingSplitFetcher = new SelfRefreshingSplitFetcher(apiSplitChangeFetcher, splitParser, gates, 30, splitCache); selfRefreshingSplitFetcher.Start(); //Act gates.IsSDKReady(10); var result = splitCache.GetSplit("condition_and"); //Assert Assert.IsNull(result); }
public void ExecuteGetSuccessfulWithResults() { //Arrange var baseUrl = "https://sdk-aws-staging.split.io/api/"; var httpHeader = new HTTPHeader() { authorizationApiKey = "///PUT API KEY HERE///", splitSDKMachineIP = "1.0.0.0", splitSDKMachineName = "localhost", splitSDKVersion = "net-0.0.0", splitSDKSpecVersion = "1.2", }; var sdkApiClient = new SegmentSdkApiClient(httpHeader, baseUrl, 10000, 10000); var apiSegmentChangeFetcher = new ApiSegmentChangeFetcher(sdkApiClient); var gates = new InMemoryReadinessGatesCache(); var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(apiSegmentChangeFetcher, gates, 30, segmentCache, 4); //Act var name = "payed"; selfRefreshingSegmentFetcher.InitializeSegment(name); while (!gates.AreSegmentsReady(1000)) { Thread.Sleep(10); } //Assert Assert.IsTrue(segmentCache.IsInSegment(name, "abcdz")); }
public void ExecuteGetSuccessfulWithResultsFromJSONFileIncludingTrafficAllocation() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var splitParser = new InMemorySplitParser(new JSONFileSegmentFetcher("segment_payed.json", segmentCache), segmentCache); var splitChangeFetcher = new JSONFileSplitChangeFetcher("splits_staging_4.json"); var splitChangesResult = splitChangeFetcher.Fetch(-1); var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>()); var gates = new InMemoryReadinessGatesCache(); var selfRefreshingSplitFetcher = new SelfRefreshingSplitFetcher(splitChangeFetcher, splitParser, gates, 30, splitCache); selfRefreshingSplitFetcher.Start(); gates.IsSDKReady(1000); //Act ParsedSplit result = (ParsedSplit)splitCache.GetSplit("Traffic_Allocation_UI"); //Assert Assert.IsNotNull(result); Assert.IsTrue(result.name == "Traffic_Allocation_UI"); Assert.IsTrue(result.trafficAllocation == 100); Assert.IsTrue(result.trafficAllocationSeed == 0); Assert.IsTrue(result.conditions.Count > 0); Assert.IsNotNull(result.conditions.Find(x => x.conditionType == ConditionType.ROLLOUT)); }
public void GetSegmentKeysTest() { // Arrange. var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var keys = new List <string> { "abcd", "1234" }; var segmentName = "test"; segmentCache.AddToSegment(segmentName, keys); // Act & Assert. var result = segmentCache.GetSegmentKeys(segmentName); Assert.AreEqual(2, result.Count); Assert.IsTrue(result.Contains("abcd")); Assert.IsTrue(result.Contains("1234")); var otherSegment = "segmentName"; var otherKeys = new List <string>(); result = segmentCache.GetSegmentKeys(otherSegment); Assert.AreEqual(0, result.Count); segmentCache.AddToSegment(otherSegment, otherKeys); result = segmentCache.GetSegmentKeys(otherSegment); Assert.AreEqual(0, result.Count); }
public void IsInSegmentWithInexistentSegmentTest() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); //Act var result = segmentCache.IsInSegment("test", "abcd"); //Assert Assert.IsFalse(result); }
public void ExecuteGetSuccessfulWithResultsFromJSONFile() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var segmentFetcher = new JSONFileSegmentFetcher($"{rootFilePath}segment_payed.json", segmentCache); //Act segmentFetcher.InitializeSegment("payed"); //Assert Assert.IsTrue(segmentCache.IsInSegment("payed", "abcdz")); }
public void SetAndGetChangeNumberTest() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var segmentName = "test"; //Act segmentCache.AddToSegment(segmentName, null); segmentCache.SetChangeNumber(segmentName, 1234); var result = segmentCache.GetChangeNumber(segmentName); //Assert Assert.AreEqual(1234, result); }
public void MatchShouldReturnFalseIfCacheEmptyWithKey() { //Arrange var segmentName = "test-segment"; var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var matcher = new UserDefinedSegmentMatcher(segmentName, segmentCache); //Act var result = matcher.Match(new Key("test2", "test2")); //Assert Assert.IsFalse(result); }
private void BuildSplitFetcher() { var segmentRefreshRate = RandomizeRefreshRates ? Random(SegmentRefreshRate) : SegmentRefreshRate; var splitsRefreshRate = RandomizeRefreshRates ? Random(SplitsRefreshRate) : SplitsRefreshRate; segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>(ConcurrencyLevel, InitialCapacity)); var segmentChangeFetcher = new ApiSegmentChangeFetcher(segmentSdkApiClient); selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(segmentChangeFetcher, gates, segmentRefreshRate, segmentCache, NumberOfParalellSegmentTasks); var splitChangeFetcher = new ApiSplitChangeFetcher(splitSdkApiClient); var splitParser = new InMemorySplitParser(selfRefreshingSegmentFetcher, segmentCache); splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>(ConcurrencyLevel, InitialCapacity)); splitFetcher = new SelfRefreshingSplitFetcher(splitChangeFetcher, splitParser, gates, splitsRefreshRate, splitCache); }
public void IsNotInSegmentTest() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var keys = new List <string> { "1234" }; var segmentName = "test"; //Act segmentCache.AddToSegment(segmentName, keys); var result = segmentCache.IsInSegment(segmentName, "abcd"); //Assert Assert.IsFalse(result); }
public void FetchSegmentNullChangesFetcherResponseShouldNotUpdateCache() { //Arrange var apiClient = new Mock <ISegmentSdkApiClient>(); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>(), It.IsAny <FetchOptions>())) .Throws(new Exception()); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentFetcher = new SelfRefreshingSegment("payed", apiFetcher, cache); //Act segmentFetcher.FetchSegment(new FetchOptions()); //Assert Assert.AreEqual(0, segments.Count); }
private void BuildSplitFetcher() { var segmentRefreshRate = _config.RandomizeRefreshRates ? Random(_config.SegmentRefreshRate) : _config.SegmentRefreshRate; var splitsRefreshRate = _config.RandomizeRefreshRates ? Random(_config.SplitsRefreshRate) : _config.SplitsRefreshRate; _segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>(_config.ConcurrencyLevel, InitialCapacity)); var segmentChangeFetcher = new ApiSegmentChangeFetcher(_segmentSdkApiClient); _selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(segmentChangeFetcher, _gates, segmentRefreshRate, _segmentCache, _config.NumberOfParalellSegmentTasks); var splitChangeFetcher = new ApiSplitChangeFetcher(_splitSdkApiClient); _splitParser = new InMemorySplitParser((SelfRefreshingSegmentFetcher)_selfRefreshingSegmentFetcher, _segmentCache); _splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>(_config.ConcurrencyLevel, InitialCapacity)); _splitFetcher = new SelfRefreshingSplitFetcher(splitChangeFetcher, _splitParser, _gates, splitsRefreshRate, _splitCache); _trafficTypeValidator = new TrafficTypeValidator(_splitCache); }
public void RemoveKeyFromSegmentTest() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var keys = new List <string> { "1234" }; var segmentName = "test"; //Act segmentCache.AddToSegment(segmentName, keys); var result = segmentCache.IsInSegment(segmentName, "1234"); segmentCache.RemoveFromSegment(segmentName, keys); var result2 = segmentCache.IsInSegment(segmentName, "1234"); //Assert Assert.IsTrue(result); Assert.IsFalse(result2); }
public void MatchShouldReturnTrueOnMatchingSegment() { //Arrange var keys = new List <string>(); keys.Add("test1"); keys.Add("test2"); var segmentName = "test-segment"; var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); segmentCache.AddToSegment(segmentName, keys); var matcher = new UserDefinedSegmentMatcher(segmentName, segmentCache); //Act var result = matcher.Match("test2"); //Assert Assert.IsTrue(result); }
public void ExecuteGetSuccessfulWithResults() { //Arrange var baseUrl = "https://sdk-aws-staging.split.io/api/"; //var baseUrl = "http://localhost:3000/api/"; var headers = new Dictionary <string, string> { { "SplitSDKMachineIP", "1.0.0.0" }, { "SplitSDKMachineName", "localhost" }, { "SplitSDKVersion", "1" } }; var telemetryStorage = new InMemoryTelemetryStorage(); var sdkApiClient = new SplitSdkApiClient("///PUT API KEY HERE///", headers, baseUrl, 10000, 10000, telemetryStorage); var apiSplitChangeFetcher = new ApiSplitChangeFetcher(sdkApiClient); var sdkSegmentApiClient = new SegmentSdkApiClient("///PUT API KEY HERE///", headers, baseUrl, 10000, 10000, telemetryStorage); var apiSegmentChangeFetcher = new ApiSegmentChangeFetcher(sdkSegmentApiClient); var gates = new InMemoryReadinessGatesCache(); var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var segmentTaskQueue = new SegmentTaskQueue(); var wrapperAdapter = new WrapperAdapter(); var selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(apiSegmentChangeFetcher, gates, 30, segmentCache, 4, segmentTaskQueue, new TasksManager(wrapperAdapter), wrapperAdapter); var splitParser = new InMemorySplitParser(selfRefreshingSegmentFetcher, segmentCache); var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>()); var selfRefreshingSplitFetcher = new SelfRefreshingSplitFetcher(apiSplitChangeFetcher, splitParser, gates, 30, new TasksManager(wrapperAdapter), splitCache); selfRefreshingSplitFetcher.Start(); //Act gates.WaitUntilReady(1000); selfRefreshingSplitFetcher.Stop(); ParsedSplit result = (ParsedSplit)splitCache.GetSplit("Pato_Test_1"); ParsedSplit result2 = (ParsedSplit)splitCache.GetSplit("Manu_Test_1"); //Assert Assert.IsNotNull(result); Assert.IsTrue(result.name == "Pato_Test_1"); Assert.IsTrue(result.conditions.Count > 0); }
public void ExecuteGetSuccessfulWithResultsFromJSONFile() { //Arrange var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var splitParser = new InMemorySplitParser(new JSONFileSegmentFetcher("segment_payed.json", segmentCache), segmentCache); var splitChangeFetcher = new JSONFileSplitChangeFetcher("splits_staging.json"); var splitChangesResult = splitChangeFetcher.Fetch(-1); var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>()); var gates = new InMemoryReadinessGatesCache(); var selfRefreshingSplitFetcher = new SelfRefreshingSplitFetcher(splitChangeFetcher, splitParser, gates, 30, splitCache); selfRefreshingSplitFetcher.Start(); gates.IsSDKReady(1000); //Act ParsedSplit result = (ParsedSplit)splitCache.GetSplit("Pato_Test_1"); //Assert Assert.IsNotNull(result); Assert.IsTrue(result.name == "Pato_Test_1"); Assert.IsTrue(result.conditions.Count > 0); }
public void StartSchedullerSuccessfully() { // Arrange var statusManager = new Mock <IStatusManager>(); var apiClient = new Mock <ISegmentSdkApiClient>(); var apiFetcher = new ApiSegmentChangeFetcher(apiClient.Object); var segments = new ConcurrentDictionary <string, Segment>(); var cache = new InMemorySegmentCache(segments); var segmentTaskQueue = new SegmentTaskQueue(); var segmentFetcher = new SelfRefreshingSegmentFetcher(apiFetcher, statusManager.Object, 10, cache, 1, segmentTaskQueue, new TasksManager(wrapperAdapter), wrapperAdapter); apiClient .Setup(x => x.FetchSegmentChanges(It.IsAny <string>(), It.IsAny <long>(), It.IsAny <FetchOptions>())) .Returns(Task.FromResult(PayedSplitJson)); // Act segmentFetcher.InitializeSegment("payed"); segmentFetcher.Start(); // Assert Assert.IsTrue(segmentTaskQueue.GetQueue().TryTake(out SelfRefreshingSegment segment, -1)); }
public void ExecuteGetSuccessfulWithResults() { //Arrange var baseUrl = "https://sdk-aws-staging.split.io/api/"; //var baseUrl = "http://localhost:3000/api/"; var httpHeader = new HTTPHeader() { authorizationApiKey = "///PUT API KEY HERE///", splitSDKMachineIP = "1.0.0.0", splitSDKMachineName = "localhost", splitSDKVersion = "net-0.0.0", splitSDKSpecVersion = "1.2", encoding = "gzip" }; var sdkApiClient = new SplitSdkApiClient(httpHeader, baseUrl, 10000, 10000); var apiSplitChangeFetcher = new ApiSplitChangeFetcher(sdkApiClient); var sdkSegmentApiClient = new SegmentSdkApiClient(httpHeader, baseUrl, 10000, 10000); var apiSegmentChangeFetcher = new ApiSegmentChangeFetcher(sdkSegmentApiClient); var gates = new InMemoryReadinessGatesCache(); var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>()); var selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(apiSegmentChangeFetcher, gates, 30, segmentCache, 4); var splitParser = new InMemorySplitParser(selfRefreshingSegmentFetcher, segmentCache); var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>()); var selfRefreshingSplitFetcher = new SelfRefreshingSplitFetcher(apiSplitChangeFetcher, splitParser, gates, 30, splitCache); selfRefreshingSplitFetcher.Start(); //Act gates.IsSDKReady(1000); selfRefreshingSplitFetcher.Stop(); ParsedSplit result = (ParsedSplit)splitCache.GetSplit("Pato_Test_1"); ParsedSplit result2 = (ParsedSplit)splitCache.GetSplit("Manu_Test_1"); //Assert Assert.IsNotNull(result); Assert.IsTrue(result.name == "Pato_Test_1"); Assert.IsTrue(result.conditions.Count > 0); }
private void BuildSegmentCache() { _segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>(_config.ConcurrencyLevel, InitialCapacity)); }