private async Task CreateAndRunWatcher <TData>(string testName, string filter, IConfiguration config, Func <List <IEnvelope>, Task> testBody, IRecordParser <TData, LogContext> recordParser, ILogger logger) { //Create a distinct directory based on testName so that tests can run in parallel string testDir = Path.Combine(TestUtility.GetTestHome(), testName); //The following will creates all directories and subdirectories in the specified path unless they already exist. Directory.CreateDirectory(testDir); //Clean up before the test rather than after so that we can inspect the files DeleteFiles(testDir, "*.*"); ListEventSink logRecords = new ListEventSink(); DirectorySource <TData, LogContext> watcher = new DirectorySource <TData, LogContext> (testDir, filter, 1000, new PluginContext(config, logger, null), recordParser); watcher.Subscribe(logRecords); watcher.Start(); await testBody(logRecords); watcher.Stop(); }
public void TestDirectorySourceMetricsOnSubscribe() { IConfiguration config = GetConfig("directorySourceTest"); string id = config[ConfigConstants.ID]; MemoryLogger logger = new MemoryLogger(null); KinesisTapMetricsSource metrics = new KinesisTapMetricsSource(new PluginContext(null, null, null, null, null)); DirectorySource <string, LogContext> source = new DirectorySource <string, LogContext>( TestUtility.GetTestHome(), "*.*", 1000, new PluginContext(config, logger, metrics), new SingeLineRecordParser()); MockMetricsSink metricsSink = new MockMetricsSink(3600, new PluginContext(config, logger, metrics)); source.Start(); metrics.Subscribe(metricsSink); metricsSink.Stop(); source.Stop(); Assert.Equal(2, metricsSink.AccumlatedValues.Count); Assert.Equal(0, TestUtility.GetMetricsCount(metricsSink.AccumlatedValues)); }