Пример #1
0
        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"));
        }
Пример #3
0
        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"));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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);
        }
Пример #6
0
        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));
        }
Пример #7
0
        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);
        }
Пример #8
0
        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"));
        }
Пример #9
0
        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);
        }
Пример #10
0
        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"));
        }
Пример #11
0
        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));
        }
Пример #12
0
        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);
        }
Пример #13
0
        public void IsInSegmentWithInexistentSegmentTest()
        {
            //Arrange
            var segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>());

            //Act
            var result = segmentCache.IsInSegment("test", "abcd");

            //Assert
            Assert.IsFalse(result);
        }
Пример #14
0
        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"));
        }
Пример #15
0
        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);
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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);
        }
Пример #20
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);
        }
Пример #21
0
        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);
        }
Пример #23
0
        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);
        }
Пример #24
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);
        }
Пример #25
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));
        }
Пример #26
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);
        }
Пример #27
0
 private void BuildSegmentCache()
 {
     _segmentCache = new InMemorySegmentCache(new ConcurrentDictionary <string, Segment>(_config.ConcurrencyLevel, InitialCapacity));
 }