Ejemplo n.º 1
0
        public void SeqDestructureCustomObject()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var testObject = new TestObject()
            {
                X = 1.2, Y = 3.4
            };
            var structuredData = new StructuredData("{@a}", testObject);

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{@a}\"");
            StringAssert.Contains(requestBody, "\"a\":{\"X\":1.2,\"Y\":3.4}");
        }
Ejemplo n.º 2
0
        public void SeqHandlesEventFromTraceSource()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            TraceSource source   = new TraceSource("seq1Source");
            var         listener = source.Listeners.OfType <SeqTraceListener>().First();

            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            source.TraceEvent(TraceEventType.Warning, 2, "{0}-{1}", 3, "B");

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request = mockRequestFactory.RequestsCreated[0];

            Assert.AreEqual("POST", request.Method);
            Assert.AreEqual("application/json; charset=utf-8", request.ContentType);
            Assert.AreEqual("http://127.0.0.1:5341/api/events/raw", request.Uri);
            Assert.AreEqual(1, request.Headers.Count);

            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "seq1Source");
            StringAssert.Contains(requestBody, "{0}-{1}");
        }
Ejemplo n.º 3
0
        public void SeqStructuredArray()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData("{a}", new [] { 1, 2, 3 });

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            StringAssert.Contains(requestBody, "\"a\":[1,2,3]");
        }
Ejemplo n.º 4
0
        public void SeqIgnoresStructuredDictionaryWhenTurnedOff()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;
            listener.ProcessDictionaryData             = false;

            var dictionaryData = new Dictionary <string, object>()
            {
                { "MessageTemplate", "{a}" },
                { "a", 1 }
            };

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, dictionaryData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            var regexTemplateData = new Regex("\"MessageTemplate\":\"{Data}\"");

            StringAssert.Matches(requestBody, regexTemplateData);
            var regexData = new Regex("\"Data\":");

            StringAssert.Matches(requestBody, regexData);
        }
Ejemplo n.º 5
0
        public void SeqHandlesStructuredDataProperties()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData(new Dictionary <string, object>()
            {
                { "a", 1 }
            }, "{a}");

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            StringAssert.Contains(requestBody, "\"a\":1");
            var regexEvent1 = new Regex("\"EventId\":1");

            StringAssert.Matches(requestBody, regexEvent1);
        }
Ejemplo n.º 6
0
        public void SeqTraceOptionsAndAdditionalProperties()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            TraceSource source   = new TraceSource("seq3Source");
            var         listener = source.Listeners.OfType <SeqTraceListener>().First();

            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            source.TraceEvent(TraceEventType.Information, 1, "TestMessage");

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request = mockRequestFactory.RequestsCreated[0];

            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "ThreadId");
            StringAssert.Contains(requestBody, "ProcessId");
            StringAssert.Contains(requestBody, "MachineName");
        }
Ejemplo n.º 7
0
        public void SeqStructuredChildArray()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var list1 = new ArrayList()
            {
                1, "A"
            };
            var dictionary2 = new Dictionary <string, object>()
            {
                { "x", 2 },
                { "y", list1 }
            };
            var structuredData = new StructuredData("{a}", dictionary2);

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            StringAssert.Contains(requestBody, "\"a\":{\"x\":2,\"y\":[1,\"A\"]}");
        }
Ejemplo n.º 8
0
        public void SeqHandlesBasicEvent()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            listener.TraceEvent(null, "TestSource", TraceEventType.Warning, 1, "Test Message");

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request = mockRequestFactory.RequestsCreated[0];

            Assert.AreEqual("POST", request.Method);
            Assert.AreEqual("application/json; charset=utf-8", request.ContentType);
            Assert.AreEqual("http://testuri/api/events/raw", request.Uri);
            Assert.AreEqual(0, request.Headers.Count);

            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "TestSource");
            StringAssert.Contains(requestBody, "Test Message");
        }
Ejemplo n.º 9
0
        public void SeqStructuredCustomObject()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData("{a}", new TestObject());

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            // Note that the '\' is encoded as '\\'
            StringAssert.Contains(requestBody, @"""a"":""w=x\\y'z""");
        }
Ejemplo n.º 10
0
        public void SeqBatchErrorResponseShouldRetry()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.RequestTimeout, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize    = 5;
            listener.BatchTimeout = TimeSpan.FromMilliseconds(500);
            listener.MaxRetries   = 5;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            listener.TraceEvent(null, "TestSource", TraceEventType.Warning, 1, "Test Message 1");
            Thread.Sleep(100);
            listener.TraceEvent(null, "TestSource", TraceEventType.Information, 2, "Test Message 2");
            Thread.Sleep(100);

            // Before batch timeout, should have only received one
            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);
            var request0Body = mockRequestFactory.RequestsCreated[0].RequestBody;

            Console.WriteLine(request0Body);

            // After batch timeout, should have two requests (second got error response)
            Thread.Sleep(500);
            Assert.AreEqual(2, mockRequestFactory.RequestsCreated.Count);
            var request1Body = mockRequestFactory.RequestsCreated[1].RequestBody;

            Console.WriteLine(request1Body);

            // After retry timeout, should have three requests
            Thread.Sleep(1200);
            Assert.AreEqual(3, mockRequestFactory.RequestsCreated.Count);
            var request2Body = mockRequestFactory.RequestsCreated[2].RequestBody;

            Console.WriteLine(request2Body);

            Assert.AreEqual(request1Body, request2Body);

            // Let background thread finish
            Thread.Sleep(1000);
        }
Ejemplo n.º 11
0
        public void SeqStructuredDataOverrides()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.TraceOutputOptions = TraceOptions.LogicalOperationStack;
            listener.BatchSize          = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData(new Dictionary <string, object>()
            {
                { "LogicalOperationStack", "A" }
            });

            try
            {
                Trace.CorrelationManager.StartLogicalOperation("X");
                listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);
            }
            finally
            {
                Trace.CorrelationManager.StopLogicalOperation();
            }

            // NOTE: Not sure if structured data should override trace options or the other way around.
            // Structured Data override -- allows per-trace specific values
            // Trace Option override -- allows dummy value to be passed in with templateMessage and then overriden by listener
            //                          (there are work arounds; e.g. pass property collection instead of template values)

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "TestSource");
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"\"");

            var regexStackA = new Regex("\"LogicalOperationStack\":\"A\"");

            StringAssert.Matches(requestBody, regexStackA);
            var regexStackX = new Regex("\"LogicalOperationStack\":\\[\"X\"\\]");

            StringAssert.DoesNotMatch(requestBody, regexStackX);
        }
Ejemplo n.º 12
0
        public void SeqStructuredRecursiveDictionaryShouldStop()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var dictionary1 = new Dictionary <string, object>()
            {
                { "A", 1 }
            };
            var dictionary2 = new Dictionary <string, object>()
            {
                { "X", 2 },
                { "Y", dictionary1 }
            };

            dictionary1.Add("B", dictionary2);
            var structuredData = new StructuredData("{a}|{b}", dictionary1, dictionary2);

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}|{b}\"");
            StringAssert.Contains(requestBody, "\"a\":{\"A\":1,\"B\":{\"X\":2,\"Y\":\"System.Collections.Generic.Dictionary`2[System.String,System.Object]\"}}");
            StringAssert.Contains(requestBody, "\"b\":{\"X\":2,\"Y\":{\"A\":1,\"B\":\"System.Collections.Generic.Dictionary`2[System.String,System.Object]\"}}");
        }
Ejemplo n.º 13
0
        public void SeqHandlesDictionaryOperationAsProperties()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var dictionaryData = new Dictionary <string, object>()
            {
                { "a", 1 }
            };

            Trace.CorrelationManager.StartLogicalOperation(dictionaryData);
            listener.TraceEvent(null, "TestSource", TraceEventType.Warning, 1, "x{0}", "y");
            Trace.CorrelationManager.StopLogicalOperation();

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"x{0}\"");
            StringAssert.Contains(requestBody, "\"0\":\"y\"");
            StringAssert.Contains(requestBody, "\"a\":1");
            var regexData = new Regex("\"Data\":");

            StringAssert.DoesNotMatch(requestBody, regexData);
            var regexStack = new Regex("\"LogicalOperationStack\":");

            StringAssert.DoesNotMatch(requestBody, regexStack);
        }
Ejemplo n.º 14
0
        public void SeqStructuredTraceOptionsInMessage()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.TraceOutputOptions = TraceOptions.LogicalOperationStack;
            listener.BatchSize          = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData("x{LogicalOperationStack}");

            try
            {
                Trace.CorrelationManager.StartLogicalOperation("X");
                listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);
            }
            finally
            {
                Trace.CorrelationManager.StopLogicalOperation();
            }

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"x{LogicalOperationStack}\"");

            var regexStackX = new Regex("\"LogicalOperationStack\":\\[\"X\"\\]");

            StringAssert.Matches(requestBody, regexStackX);
        }
Ejemplo n.º 15
0
        public void SeqStructuredRecursiveArrayShouldStop()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var list1 = new ArrayList()
            {
                1
            };
            var list2 = new ArrayList()
            {
                2, list1
            };

            list1.Add(list2);
            var structuredData = new StructuredData("{a}|{b}", list1, list2);

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}|{b}\"");
            StringAssert.Contains(requestBody, "\"a\":[1,[2,\"System.Collections.ArrayList\"]]");
            StringAssert.Contains(requestBody, "\"b\":[2,[1,\"System.Collections.ArrayList\"]]");
        }
Ejemplo n.º 16
0
        public void SeqBatchFirstMessageSentImmediately()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize    = 5;
            listener.BatchTimeout = TimeSpan.FromMilliseconds(500);
            listener.MaxRetries   = 5;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            listener.TraceEvent(null, "TestSource", TraceEventType.Warning, 1, "Test Message");
            // Although immediate, it is still async, so need to sleep thread
            Thread.Sleep(200);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            // Let background thread finish
            Thread.Sleep(1000);
        }
Ejemplo n.º 17
0
        public void SeqBatchErrorAbandonAfterMaxRetries()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.RequestTimeout, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.RequestTimeout, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.RequestTimeout, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.RequestTimeout, null)
                );
            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize    = 5;
            listener.BatchTimeout = TimeSpan.FromMilliseconds(500);
            listener.MaxRetries   = 3;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            // First batch (okay)
            listener.TraceEvent(null, "TestSource", TraceEventType.Warning, 1, "Test Message 1");
            Thread.Sleep(100);
            // Second batch (fail, plus 3 retry fails)
            listener.TraceEvent(null, "TestSource", TraceEventType.Information, 2, "Poison Message 2");
            Thread.Sleep(600);
            // Wait (above) for the batch to have started
            listener.TraceEvent(null, "TestSource", TraceEventType.Warning, 3, "Test Message 3");
            Thread.Sleep(100);

            // By now should have two requests (second got error response)
            Assert.AreEqual(2, mockRequestFactory.RequestsCreated.Count);
            var request0Body = mockRequestFactory.RequestsCreated[0].RequestBody;

            Console.WriteLine(request0Body);
            var request1Body = mockRequestFactory.RequestsCreated[1].RequestBody;

            Console.WriteLine(request1Body);

            // Three retries after 500, 1000, and 2000 ms, plus the 6th should have succeeded
            Thread.Sleep(3500);
            Assert.AreEqual(6, mockRequestFactory.RequestsCreated.Count);
            var request4Body = mockRequestFactory.RequestsCreated[4].RequestBody;

            Console.WriteLine(request4Body);
            var request5Body = mockRequestFactory.RequestsCreated[5].RequestBody;

            Console.WriteLine(request5Body);

            Assert.AreEqual(request1Body, request4Body);
            StringAssert.Contains(request0Body, "Test Message 1");
            StringAssert.Contains(request1Body, "Poison Message 2");
            StringAssert.Contains(request5Body, "Test Message 3");

            // Let background thread finish
            Thread.Sleep(1000);
        }