Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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);
        }
Exemple #6
0
 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);
        }