public void TestParseTruncatedFile() { var parser = new SingleLineJsonParser(null, null, NullLogger.Instance); var testFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); var context = new LogContext { FilePath = testFile }; var value1 = new string('1', 1024); var value2 = new string('2', 1024); try { File.AppendAllText(testFile, $"{{\"a\":\"{value1}\"}}"); var records = ParseFile(parser, context); Assert.Empty(records); File.Delete(testFile); context.Position = 0; File.AppendAllText(testFile, $"{{\"a\":\"{value2}\"}}{Environment.NewLine}"); records = ParseFile(parser, context); Assert.Single(records); Assert.Equal(value2, (string)records[0].Data["a"]); } finally { File.Delete(testFile); } }
public void TestParseInterleavedWrites() { var parser = new SingleLineJsonParser(null, null, NullLogger.Instance); var testFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); var context = new LogContext { FilePath = testFile }; try { var records = ParseFile(parser, context); Assert.Empty(records); File.AppendAllText(testFile, $"{{\"a\":1}}{Environment.NewLine}"); records = ParseFile(parser, context); Assert.Single(records); File.AppendAllText(testFile, $"{{\"b\":"); records = ParseFile(parser, context); Assert.Empty(records); File.AppendAllText(testFile, $"2}}{Environment.NewLine}"); records = ParseFile(parser, context); Assert.Single(records); } finally { File.Delete(testFile); } }
public void TestParseLongRecords(int size) { var parser = new SingleLineJsonParser(null, null, NullLogger.Instance); var testFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); var context = new LogContext { FilePath = testFile }; var value = new string('a', size); try { File.AppendAllText(testFile, $"{{\"a\":\"{value}\"}}{Environment.NewLine}"); var records = ParseFile(parser, context); Assert.Single(records); Assert.Equal(value, (string)records[0].Data["a"]); File.AppendAllText(testFile, $"{{\"b\":"); records = ParseFile(parser, context); Assert.Empty(records); File.AppendAllText(testFile, $"\"{value}\"}}{Environment.NewLine}"); records = ParseFile(parser, context); Assert.Single(records); Assert.Equal(value, (string)records[0].Data["b"]); } finally { File.Delete(testFile); } }
public void TestMultipleFilesInterleavedWrites(int noFiles) { var parser = new SingleLineJsonParser(null, null, NullLogger.Instance); var contexts = Enumerable.Range(0, noFiles) .Select(i => new LogContext { FilePath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}_{i}") }) .ToArray(); try { for (var i = 0; i < noFiles; i++) { File.AppendAllText(contexts[i].FilePath, $"{{\"a{i}\":1"); var records = ParseFile(parser, contexts[i]); Assert.Empty(records); } for (var i = 0; i < noFiles; i++) { File.AppendAllText(contexts[i].FilePath, $"}}{Environment.NewLine}"); var records = ParseFile(parser, contexts[i]); Assert.Single(records); Assert.Equal(1, (int)records[0].Data[$"a{i}"]); } } finally { foreach (var ctx in contexts) { File.Delete(ctx.FilePath); } } }
private static List <IEnvelope <JObject> > ParseRecords(StreamReader sr, Microsoft.Extensions.Configuration.IConfigurationSection config) { string timetampFormat = config["TimestampFormat"]; string timestampField = config["TimestampField"]; var parser = new SingleLineJsonParser(timestampField, timetampFormat, NullLogger.Instance); var records = parser.ParseRecords(sr, new DelimitedLogContext()).ToList(); return(records); }
private static List <IEnvelope <JObject> > ParseFile(SingleLineJsonParser parser, LogContext context) { using (var readStream = new FileStream(context.FilePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite)) using (var sr = new StreamReader(readStream)) { var records = parser.ParseRecords(sr, context).ToList(); context.Position = readStream.Position; return(records); } }
public void TestNonGenericCreateEventSource() { var config = TestUtility.GetConfig("Sources", "JsonLog1"); string timetampFormat = config["TimestampFormat"]; string timestampField = config["TimestampField"]; IRecordParser parser = new SingleLineJsonParser(timestampField, timetampFormat, NullLogger.Instance); PluginContext context = new PluginContext(config, null, null); var source = DirectorySourceFactory.CreateEventSource(context, parser); Assert.NotNull(source); Assert.IsType <DirectorySource <JObject, LogContext> >(source); }