public void BuildImpressionWithDebugAndWithPreviousTime() { // Arrange. var impressionsManager = new ImpressionsManager(_impressionsLog.Object, _customerImpressionListener.Object, _impressionsCounter.Object, true, ImpressionsMode.Debug, _impressionsObserver.Object); var impTime = CurrentTimeHelper.CurrentTimeMillis(); _impressionsObserver .Setup(mock => mock.TestAndSet(It.IsAny <KeyImpression>())) .Returns((long?)null); // Act. var result = impressionsManager.BuildImpression("matching-key", "feature", "off", impTime, 432543, "label", "bucketing-key"); // Assert. Assert.AreEqual("matching-key", result.keyName); Assert.AreEqual("feature", result.feature); Assert.AreEqual("off", result.treatment); Assert.AreEqual(impTime, result.time); Assert.AreEqual("label", result.label); Assert.AreEqual("bucketing-key", result.bucketingKey); Assert.IsNull(result.previousTime); _impressionsObserver.Verify(mock => mock.TestAndSet(It.IsAny <KeyImpression>()), Times.Once); _impressionsCounter.Verify(mock => mock.Inc("feature", impTime), 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 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 Track_Optimized_WithOneImpressionDropped() { // Arrange. var impressionsManager = new ImpressionsManager(_impressionsLog.Object, _customerImpressionListener.Object, _impressionsCounter.Object, true, ImpressionsMode.Optimized, _telemetryRuntimeProducer.Object, _tasksManager, _impressionsObserver.Object); var impTime = CurrentTimeHelper.CurrentTimeMillis(); var impressions = new List <KeyImpression> { new KeyImpression("matching-key", "feature", "off", impTime, 432543, "label", "bucketing-key", optimized: true), new KeyImpression("matching-key-2", "feature-2", "off", impTime, 432543, "label-2", "bucketing-key", optimized: true) }; _impressionsLog .Setup(mock => mock.Log(It.IsAny <List <KeyImpression> >())) .Returns(1); // 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.Exactly(2)); _telemetryRuntimeProducer.Verify(mock => mock.RecordImpressionsStats(ImpressionsEnum.ImpressionsDeduped, 0), Times.Once); _telemetryRuntimeProducer.Verify(mock => mock.RecordImpressionsStats(ImpressionsEnum.ImpressionsDropped, 1), Times.Once); _telemetryRuntimeProducer.Verify(mock => mock.RecordImpressionsStats(ImpressionsEnum.ImpressionsQueued, 1), Times.Once); }
private void BuildImpressionManager() { var impressionsHasher = new ImpressionHasher(); var impressionsObserver = new ImpressionsObserver(impressionsHasher); _impressionsCounter = new ImpressionsCounter(); _impressionsManager = new ImpressionsManager(_impressionsLog, _customerImpressionListener, _impressionsCounter, true, _config.ImpressionsMode, _telemetryRuntimeProducer, _tasksManager, impressionsObserver); }
public void BuildAndTrackWithoutCustomerListener() { // Arrange. var impressionsManager = new ImpressionsManager(_impressionsLog.Object, null, _impressionsCounter.Object, true, ImpressionsMode.Optimized, _impressionsObserver.Object); var impTime = CurrentTimeHelper.CurrentTimeMillis(); // Act. impressionsManager.BuildAndTrack("matching-key", "feature", "off", impTime, 432543, "label", "bucketing-key"); // Assert. _impressionsObserver.Verify(mock => mock.TestAndSet(It.IsAny <KeyImpression>()), Times.Once); _impressionsCounter.Verify(mock => mock.Inc("feature", impTime), Times.Once); Thread.Sleep(1000); _impressionsLog.Verify(mock => mock.Log(It.IsAny <List <KeyImpression> >()), Times.Once); _customerImpressionListener.Verify(mock => mock.Log(It.IsAny <KeyImpression>()), Times.Never); }
public void Track() { // Arrange. var impressionsManager = new ImpressionsManager(_impressionsLog.Object, _customerImpressionListener.Object, _impressionsCounter.Object, true, ImpressionsMode.Optimized, _impressionsObserver.Object); var impTime = CurrentTimeHelper.CurrentTimeMillis(); var impressions = new List <KeyImpression> { new KeyImpression("matching-key", "feature", "off", impTime, 432543, "label", "bucketing-key"), new KeyImpression("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.Exactly(2)); }
public LocalhostClient(string filePath, ISplitLogger log = null) : base(GetLogger(log)) { _fullPath = LookupFilePath(filePath); if (_fullPath.ToLower().EndsWith(SplitFileYaml) || _fullPath.ToLower().EndsWith(SplitFileYml)) { _localhostFileService = new YamlLocalhostFileService(); } else { _log.Warn("Localhost mode: .split/.splits mocks will be deprecated soon in favor of YAML files, which provide more targeting power. Take a look in our documentation."); _localhostFileService = new LocalhostFileService(); } var directoryPath = Path.GetDirectoryName(_fullPath); _watcher = new FileSystemWatcher(directoryPath != string.Empty ? directoryPath : Directory.GetCurrentDirectory(), Path.GetFileName(_fullPath)) { NotifyFilter = NotifyFilters.LastWrite }; _watcher.Changed += new FileSystemEventHandler(OnFileChanged); _watcher.EnableRaisingEvents = true; var splits = ParseSplitFile(_fullPath); _splitCache = new InMemorySplitCache(splits); _blockUntilReadyService = new NoopBlockUntilReadyService(); _manager = new SplitManager(_splitCache, _blockUntilReadyService); ApiKey = "localhost"; Destroyed = false; _trafficTypeValidator = new TrafficTypeValidator(_splitCache); BuildEvaluator(); _impressionsManager = new ImpressionsManager(null, null, null, false, ImpressionsMode.Debug); }
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); }