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 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 async Task FetchSplitChangesWithExcepionSouldReturnNull() { var apiClient = new Mock <ISplitSdkApiClient>(); apiClient .Setup(x => x.FetchSplitChanges(It.IsAny <long>())) .Throws(new Exception()); var apiFetcher = new ApiSplitChangeFetcher(apiClient.Object); //Act var result = await apiFetcher.Fetch(-1); //Assert Assert.IsNull(result); }
private void BuildSplitFetcher() { var segmentRefreshRate = _config.RandomizeRefreshRates ? Random(_config.SegmentRefreshRate) : _config.SegmentRefreshRate; var segmentChangeFetcher = new ApiSegmentChangeFetcher(_segmentSdkApiClient); var segmentTaskQueue = new SegmentTaskQueue(); _selfRefreshingSegmentFetcher = new SelfRefreshingSegmentFetcher(segmentChangeFetcher, _statusManager, segmentRefreshRate, _segmentCache, _config.NumberOfParalellSegmentTasks, segmentTaskQueue, _tasksManager, _wrapperAdapter); var splitChangeFetcher = new ApiSplitChangeFetcher(_splitSdkApiClient); var splitsRefreshRate = _config.RandomizeRefreshRates ? Random(_config.SplitsRefreshRate) : _config.SplitsRefreshRate; _splitParser = new InMemorySplitParser((SelfRefreshingSegmentFetcher)_selfRefreshingSegmentFetcher, _segmentCache); _splitFetcher = new SelfRefreshingSplitFetcher(splitChangeFetcher, _splitParser, _statusManager, splitsRefreshRate, _tasksManager, _splitCache); _trafficTypeValidator = new TrafficTypeValidator(_splitCache); }
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 async Task ExecuteJsonDeserializeSuccessfulWithChangeInJsonFormat() { //Arrange Mock <ISplitSdkApiClient> apiMock = new Mock <ISplitSdkApiClient>(); apiMock .Setup(x => x.FetchSplitChanges(-1)) .Returns(TaskEx.FromResult("{\"splits\": [ { \"trafficType\": \"user\", \"name\": \"Reset_Seed_UI\", \"seed\": 1552577712, \"status\": \"ACTIVE\", \"defaultTreatment\": \"off\", \"changeNumber\": 1469827821322, \"conditions\": [ { \"matcherGroup\": { \"combiner\": \"AND\", \"matchers\": [ { \"keySelector\": { \"trafficType\": \"user\", \"attribute\": null }, \"matcherType\": \"ALL_KEYS\", \"negate\": false, \"userDefinedSegmentMatcherData\": null, \"whitelistMatcherData\": null, \"unaryNumericMatcherData\": null, \"betweenMatcherData\": null } ] }, \"partitions\": [ { \"treatment\": \"on\", \"size\": 100 }, { \"treatment\": \"off\", \"size\": 0, \"addedField\": \"test\" } ] } ] } ], \"since\": 1469817846929, \"till\": 1469827821322 }\r\n")); ApiSplitChangeFetcher apiSplitChangeFetcher = new ApiSplitChangeFetcher(apiMock.Object); //Act var result = await apiSplitChangeFetcher.Fetch(-1); //Assert Assert.IsTrue(result != null); Assert.IsTrue(result.splits.Count > 0); }
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 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 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); }
public async Task FetchSplitChangesSuccessfull() { //Arrange var apiClient = new Mock <ISplitSdkApiClient>(); apiClient .Setup(x => x.FetchSplitChanges(It.IsAny <long>())) .Returns(TaskEx.FromResult(@"{ 'splits': [ { 'trafficTypeName': 'user', 'name': 'Test_1', 'seed': 673896442, 'status': 'ACTIVE', 'killed': false, 'defaultTreatment': 'off', 'changeNumber': 1470855828956, 'conditions': [ { 'matcherGroup': { 'combiner': 'AND', 'matchers': [ { 'keySelector': { 'trafficType': 'user', 'attribute': null }, 'matcherType': 'ALL_KEYS', 'negate': false, 'userDefinedSegmentMatcherData': null, 'whitelistMatcherData': null, 'unaryNumericMatcherData': null, 'betweenMatcherData': null } ] }, 'partitions': [ { 'treatment': 'on', 'size': 0 }, { 'treatment': 'off', 'size': 100 } ] } ] } ], 'since': -1, 'till': 1470855828956 }")); var apiFetcher = new ApiSplitChangeFetcher(apiClient.Object); //Act var result = await apiFetcher.Fetch(-1); //Assert Assert.IsNotNull(result); var split = result.splits.First(); Assert.AreEqual("Test_1", split.name); Assert.AreEqual(false, split.killed); Assert.AreEqual("ACTIVE", split.status); Assert.AreEqual("user", split.trafficTypeName); Assert.AreEqual("off", split.defaultTreatment); Assert.IsNotNull(split.conditions); Assert.AreEqual(-1, result.since); Assert.AreEqual(1470855828956, result.till); Assert.AreEqual(null, split.algo); }
public void FetchSplitChangesSuccessfullVerifyAlgorithmIsMurmur() { //Arrange var apiClient = new Mock <ISplitSdkApiClient>(); apiClient .Setup(x => x.FetchSplitChanges(It.IsAny <long>())) .Returns(@"{ 'splits': [ { 'trafficTypeName': 'user', 'name': 'Test_1', 'seed': 673896442, 'status': 'ACTIVE', 'killed': false, 'algo': 2, 'defaultTreatment': 'off', 'changeNumber': 1470855828956, 'conditions': [ { 'matcherGroup': { 'combiner': 'AND', 'matchers': [ { 'keySelector': { 'trafficType': 'user', 'attribute': null }, 'matcherType': 'ALL_KEYS', 'negate': false, 'userDefinedSegmentMatcherData': null, 'whitelistMatcherData': null, 'unaryNumericMatcherData': null, 'betweenMatcherData': null } ] }, 'partitions': [ { 'treatment': 'on', 'size': 0 }, { 'treatment': 'off', 'size': 100 } ] } ] } ], 'since': -1, 'till': 1470855828956 }"); var apiFetcher = new ApiSplitChangeFetcher(apiClient.Object); //Act var result = apiFetcher.Fetch(-1); //Assert Assert.IsNotNull(result); var split = result.splits.First(); Assert.AreEqual(AlgorithmEnum.Murmur, (AlgorithmEnum)split.algo); }