public void SendBulkImpressions_WithRetries() { var impressions = new List <KeyImpression>(); for (int i = 0; i < 10; i++) { impressions.Add(new KeyImpression($"key-{i}", $"feature-{i}", "off", 1, 1, "label-test", $"bucket-{i}")); } var data1 = "[{\"f\":\"feature-0\",\"i\":[{\"k\":\"key-0\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-0\"}]},{\"f\":\"feature-1\",\"i\":[{\"k\":\"key-1\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-1\"}]},{\"f\":\"feature-2\",\"i\":[{\"k\":\"key-2\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-2\"}]},{\"f\":\"feature-3\",\"i\":[{\"k\":\"key-3\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-3\"}]},{\"f\":\"feature-4\",\"i\":[{\"k\":\"key-4\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-4\"}]},{\"f\":\"feature-5\",\"i\":[{\"k\":\"key-5\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-5\"}]},{\"f\":\"feature-6\",\"i\":[{\"k\":\"key-6\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-6\"}]},{\"f\":\"feature-7\",\"i\":[{\"k\":\"key-7\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-7\"}]},{\"f\":\"feature-8\",\"i\":[{\"k\":\"key-8\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-8\"}]},{\"f\":\"feature-9\",\"i\":[{\"k\":\"key-9\",\"t\":\"off\",\"m\":1,\"c\":1,\"r\":\"label-test\",\"b\":\"bucket-9\"}]}]"; using (var httpClientMock = new HttpClientMock()) { httpClientMock.Post_Response("/api/testImpressions/bulk", 500, data1, "fail"); var impressionsSdkApiClient = new ImpressionsSdkApiClient("", new Dictionary <string, string>(), httpClientMock.GetUrl(), 10000, 10000, _telemetryRuntimeProducer.Object, _wrapperAdapter, 10); impressionsSdkApiClient.SendBulkImpressions(impressions); Thread.Sleep(5000); var logs = httpClientMock.GetImpressionLogs(); Assert.AreEqual(3, logs.Count); foreach (var log in logs) { Assert.IsTrue(log.RequestMessage.Body.Equals(data1)); } } }
public void CorrectFormatSendImpressions() { // Arrange. var impressions = new List <KeyImpression> { new KeyImpression("matching-key", "feature-1", "treatment", 34534546, 3333444, "label", "bucketing-key"), new KeyImpression("matching-key", "feature-1", "treatment", 34534550, 3333444, "label", "bucketing-key", 34534546), new KeyImpression("matching-key", "feature-2", "treatment", 34534546, 3333444, "label", "bucketing-key"), }; var telemetryStorage = new InMemoryTelemetryStorage(); var impressionsSdkApiClient = new ImpressionsSdkApiClient(string.Empty, new Dictionary <string, string>(), "http://www.fake-test-split.com", 5, 5, telemetryStorage, _wrapperAdapter, 5); // Act. var result = impressionsSdkApiClient.ConvertToJson(impressions); // Assert. var expected = "[{\"f\":\"feature-1\",\"i\":[{\"k\":\"matching-key\",\"t\":\"treatment\",\"m\":34534546,\"c\":3333444,\"r\":\"label\",\"b\":\"bucketing-key\"},{\"k\":\"matching-key\",\"t\":\"treatment\",\"m\":34534550,\"c\":3333444,\"r\":\"label\",\"b\":\"bucketing-key\"}]},{\"f\":\"feature-2\",\"i\":[{\"k\":\"matching-key\",\"t\":\"treatment\",\"m\":34534546,\"c\":3333444,\"r\":\"label\",\"b\":\"bucketing-key\"}]}]"; Assert.AreEqual(expected, result); }
public void CorrectFormatSendCounts() { // Arrange. var time9am = SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 00, 00, DateTimeKind.Utc)); var time10am = SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 10, 00, 00, DateTimeKind.Utc)); var impressions = new ConcurrentDictionary <KeyCache, int>(); impressions.TryAdd(new KeyCache("featur1", time9am), 2); var telemetryStorage = new InMemoryTelemetryStorage(); var impressionsSdkApiClient = new ImpressionsSdkApiClient(string.Empty, new Dictionary <string, string>(), "http://www.fake-test-split.com", 5, 5, telemetryStorage, _wrapperAdapter, 5); // Act. var result = impressionsSdkApiClient.ConvertToJson(impressions); // Assert. var expected = $"{{\"pf\":[{{\"f\":\"featur1\",\"m\":{time9am},\"rc\":2}}]}}"; Assert.AreEqual(expected, result); }