public void TrackWithoutCustomerListener_Optimized() { // Arrange. var impressionsObserver = new ImpressionsObserver(new ImpressionHasher()); var impressionsCounter = new ImpressionsCounter(); var impressionsManager = new ImpressionsManager(_impressionsLog.Object, null, impressionsCounter, true, ImpressionsMode.Optimized, impressionsObserver); var impTime = CurrentTimeHelper.CurrentTimeMillis(); var impressions = new List <KeyImpression> { impressionsManager.BuildImpression("matching-key", "feature", "off", impTime, 432543, "label", "bucketing-key"), impressionsManager.BuildImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key"), impressionsManager.BuildImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key"), impressionsManager.BuildImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key") }; var optimizedImpressions = impressions.Where(i => impressionsManager.ShouldQueueImpression(i)).ToList(); // Act. impressionsManager.Track(impressions); // Assert. Thread.Sleep(1000); Assert.AreEqual(2, optimizedImpressions.Count()); _impressionsLog.Verify(mock => mock.Log(optimizedImpressions), Times.Once); _impressionsLog.Verify(mock => mock.Log(impressions), Times.Never); _customerImpressionListener.Verify(mock => mock.Log(It.IsAny <KeyImpression>()), Times.Never); }
public void TrackWithoutCustomerListener_Debug() { // Arrange. var impressionsObserver = new ImpressionsObserver(new ImpressionHasher()); var impressionsCounter = new ImpressionsCounter(); var impressionsManager = new ImpressionsManager(_impressionsLog.Object, null, impressionsCounter, true, ImpressionsMode.Debug, _telemetryRuntimeProducer.Object, _tasksManager, impressionsObserver); var impTime = CurrentTimeHelper.CurrentTimeMillis(); var impressions = new List <KeyImpression> { impressionsManager.BuildImpression("matching-key", "feature", "off", impTime, 432543, "label", "bucketing-key"), impressionsManager.BuildImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key"), impressionsManager.BuildImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key"), impressionsManager.BuildImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key") }; // Act. impressionsManager.Track(impressions); // Assert. Thread.Sleep(1000); _impressionsLog.Verify(mock => mock.Log(impressions), Times.Once); _customerImpressionListener.Verify(mock => mock.Log(It.IsAny <KeyImpression>()), Times.Never); _telemetryRuntimeProducer.Verify(mock => mock.RecordImpressionsStats(ImpressionsEnum.ImpressionsDeduped, 0), Times.Once); _telemetryRuntimeProducer.Verify(mock => mock.RecordImpressionsStats(ImpressionsEnum.ImpressionsDropped, 0), Times.Once); _telemetryRuntimeProducer.Verify(mock => mock.RecordImpressionsStats(ImpressionsEnum.ImpressionsQueued, 4), Times.Once); }
public void Start_ShouldNotSendImpressionsCount() { // Arrange. var impressionsCounter = new ImpressionsCounter(); var impressionsCountSender = new ImpressionsCountSender(_apiClient.Object, impressionsCounter, 1); // Act. impressionsCountSender.Start(); // Assert. Thread.Sleep(1500); _apiClient.Verify(mock => mock.SendBulkImpressionsCount(It.IsAny <ConcurrentDictionary <KeyCache, int> >()), Times.Never); }
public void Start_ShouldSendImpressionsCount() { // Arrange. var impressionsCounter = new ImpressionsCounter(); impressionsCounter.Inc("feature1", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 15, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature1", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 50, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature2", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 50, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature3", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 10, 50, 11, DateTimeKind.Utc))); var impressionsCountSender = new ImpressionsCountSender(_apiClient.Object, impressionsCounter, 1); // Act. impressionsCountSender.Start(); // Assert. Thread.Sleep(1500); _apiClient.Verify(mock => mock.SendBulkImpressionsCount(It.IsAny <ConcurrentDictionary <KeyCache, int> >()), Times.Once); }
public void IncBasicUsage() { // Arrange. var impressionsCounter = new ImpressionsCounter(); impressionsCounter.Inc("feature1", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 15, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature1", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 20, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature1", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 50, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature2", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 50, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature2", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 55, 11, DateTimeKind.Utc))); impressionsCounter.Inc("feature1", SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 10, 50, 11, DateTimeKind.Utc))); // Act. var result = impressionsCounter.PopAll(); // Assert. Assert.AreEqual(3, result.FirstOrDefault(x => x.Key.SplitName.Equals("feature1") && x.Key.TimeFrame.Equals(SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 0, 0, DateTimeKind.Utc)))).Value); Assert.AreEqual(2, result.FirstOrDefault(x => x.Key.SplitName.Equals("feature2") && x.Key.TimeFrame.Equals(SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 09, 0, 0, DateTimeKind.Utc)))).Value); Assert.AreEqual(1, result.FirstOrDefault(x => x.Key.SplitName.Equals("feature1") && x.Key.TimeFrame.Equals(SplitsHelper.MakeTimestamp(new DateTime(2020, 09, 02, 10, 0, 0, DateTimeKind.Utc)))).Value); }
private void BuildImpressionManager() { var impressionsCounter = new ImpressionsCounter(); _impressionsManager = new ImpressionsManager(_impressionsLog, _customerImpressionListener, impressionsCounter, false, ImpressionsMode.Debug); }
private void BuildImpressionManager() { var impressionsCounter = new ImpressionsCounter(); _impressionsManager = new ImpressionsManager(_impressionsLog, _customerImpressionListener, impressionsCounter, false, ImpressionsMode.Debug, telemetryRuntimeProducer: null, taskManager: _tasksManager); }