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"""); }
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); }
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\"]}"); }
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]"); }
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}"); }
public void StructuredChildDictionary() { var child1 = new Dictionary <string, object>() { { "X", "A" }, { "Y", 1 } }; var list1 = new ArrayList() { "x", child1 }; var obj2 = new TestObject2() { M = "y", N = child1 }; var properties = new Dictionary <string, object>() { { "a", list1 }, { "@b", obj2 }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a=['x','System.Collections.Generic.Dictionary`2[System.String,System.Object]'] b=(M='y' N='System.Collections.Generic.Dictionary`2[System.String,System.Object]')", actual); }
public string CreateJsonLDSummary(SearchResult searchResult) { StructuredData structuredData = new StructuredData(); List <ItemListElement> itemListElements = new List <ItemListElement>(); int itemElementCounter = 0; foreach (var movie in searchResult.Search) { Item item = new Item(); item.name = movie.Title; item.image = movie.Poster; ItemListElement itemListElement = new ItemListElement(); itemListElement.position = (itemElementCounter++).ToString(); itemListElement.item = item; itemListElements.Add(itemListElement); } structuredData.itemListElement = itemListElements; string jsonLD = JsonConvert.SerializeObject(structuredData); return(jsonLD); }
public void StructuredNullableValue() { int?b = -2; int?k = null; var properties = new Dictionary <string, object>() { { "a", (short?)-1 }, { "b", b }, { "c", (long?)-3 }, { "d", (ushort?)4 }, { "e", (uint?)5 }, { "f", (ulong?)6 }, { "g", (sbyte?)7 }, { "h", (float?)8.1 }, { "i", (double?)9.2 }, { "j", (decimal?)10.3 }, { "k", k }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Console.WriteLine(actual); Assert.AreEqual("a=-1 b=-2 c=-3 d=4 e=5 f=6 g=7 h=8.1 i=9.2 j=10.3 k=null", actual); }
public void StructuredStringExtraValues() { IStructuredData data = new StructuredData("x{a}", 1, 2); var actual = data.ToString(); Assert.AreEqual(@"x1; Extra1=2", actual); }
public void StructuredChildArray() { var child1 = new ArrayList() { 1, "A" }; var list1 = new ArrayList() { "x", child1 }; var obj2 = new TestObject2() { M = "y", N = child1 }; var dict3 = new Dictionary <string, object>() { { "P", "z" }, { "Q", child1 } }; var properties = new Dictionary <string, object>() { { "a", list1 }, { "@b", obj2 }, { "c", dict3 }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a=['x','System.Collections.ArrayList'] b=(M='y' N=[1,'A']) c=(P='z' Q=[1,'A'])", actual); }
public void StructuredStringWithDuplicateTemplateValues() { IStructuredData data = new StructuredData("{a}x{a}", "A", "B"); var actual = data.ToString(); Assert.AreEqual("BxB", actual); }
public void StructuredStringFormatValue() { var template = "x{a}"; IStructuredData data = new StructuredData(template, 1); var actual = data.ToString(); Assert.AreEqual("x1", actual); }
// Logical Operation Scope /// <summary> /// Starts a new structured data logical operation scope, typically output as additional structured properties. /// </summary> /// <param name="key">The additional structured property to include</param> /// <param name="value">The additional structured property value</param> /// <returns>A scope object that ends the scope whem disposed.</returns> public IDisposable BeginScope(string key, object value) { var structuredData = new StructuredData(new Dictionary <string, object>() { { key, value } }); return(BeginScope(structuredData)); }
public void StructuredStringValuesMissingAreBlank() { var template = "{a}x{b}y"; var a = "A"; IStructuredData data = new StructuredData(template, a); var actual = data.ToString(); Assert.AreEqual("Ax{b}y", actual); }
public override string ToString() { string structuredDataString = null; if (StructuredData != null) { structuredDataString = string.Join(", ", StructuredData.Select(e => e.ToString())); } return($"Header: {Header}, StructuredData: [{structuredDataString}], Message: {Message}"); }
public override int GetHashCode() { unchecked { var hashCode = Header != null?Header.GetHashCode() : 0; hashCode = (hashCode * 397) ^ (StructuredData != null ? StructuredData.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (Message != null ? Message.GetHashCode() : 0); return(hashCode); } }
public void StructuredPropertyValue() { var template = "x{a}"; IStructuredData data = new StructuredData(template, "A"); IDictionary <string, object> actual = data; Assert.AreEqual(1 + 1, actual.Count); Assert.AreEqual("a", actual.Keys.First()); Assert.AreEqual("A", actual["a"]); }
public void StructuredStringValuesInOrder() { var template = "{b}x{a}"; var a = "A"; var b = "B"; IStructuredData data = new StructuredData(template, a, b); var actual = data.ToString(); Assert.AreEqual("AxB", actual); }
public string CreateJsonLDMovie(MovieDetail movieDetail) { // return string.Empty; StructuredData structuredData = new StructuredData(); List <ItemListElement> itemListElements = new List <ItemListElement>(); int itemElementCounter = 0; // foreach (var movie in movieDetail) { Item item = new Item(); item.name = movieDetail.Title; item.image = movieDetail.Poster; item.dateCreated = movieDetail.Released; Director director = new Director(); director.name = movieDetail.Director; item.director = director; Review review = new Review(); ReviewRating reviewRating = new ReviewRating(); reviewRating.ratingValue = movieDetail.Ratings[0].Value; review.reviewRating = reviewRating; Author author = new Author(); author.name = movieDetail.Writer; review.author = author; review.reviewBody = movieDetail.Response; AggregateRating aggregateRating = new AggregateRating(); aggregateRating.bestRating = movieDetail.Ratings[0].Value; aggregateRating.ratingValue = movieDetail.Rated; aggregateRating.ratingCount = movieDetail.Ratings.Length.ToString(); review.aggregateRating = aggregateRating; item.review = review; ItemListElement itemListElement = new ItemListElement(); itemListElement.position = (itemElementCounter++).ToString(); itemListElement.item = item; itemListElements.Add(itemListElement); } structuredData.itemListElement = itemListElements; string jsonLD = JsonConvert.SerializeObject(structuredData); return(jsonLD); }
public void StructuredEscapedStringValue() { var properties = new Dictionary <string, object>() { { "a", @"w=x\y'z" }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual(@"a='w=x\\y\'z'", actual); }
public void StructuredEscapePropertyName() { var properties = new Dictionary <string, object>() { { "a b=c", 1 }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a_bc=1", actual); }
public void StructuredStringMessageAndProperty() { var properties = new Dictionary <string, object>() { { "a", 1 }, }; IStructuredData data = new StructuredData(properties, "X"); var actual = data.ToString(); Assert.AreEqual("X; a=1", actual); }
public void StructuredStringPropertyOnly() { var properties = new Dictionary <string, object>() { { "a", 1 }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a=1", actual); }
public void StructuredGuidValue() { var properties = new Dictionary <string, object>() { { "a", new Guid("12345678-abcd-4321-8765-ba9876543210") }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a=12345678-abcd-4321-8765-ba9876543210", actual); }
public void DestructuredCustomObjectMessage() { var testObject = new TestObject() { X = 1.2, Y = 3.4 }; IStructuredData data = new StructuredData("z{@a}", testObject); var actual = data.ToString(); Assert.AreEqual(@"z(X=1.2 Y=3.4)", actual); }
public void StructuredCustomObjectValue() { var properties = new Dictionary <string, object>() { { "a", new TestObject() }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual(@"a='w=x\\y\'z'", actual); }
public void StructuredEnumValue() { var properties = new Dictionary <string, object>() { { "a", (TestEnum)5 }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a='Flag1, Flag3'", actual); }
public void StructuredBasicStringValue() { var properties = new Dictionary <string, object>() { { "a", "A" }, }; IStructuredData data = new StructuredData(properties); var actual = data.ToString(); Assert.AreEqual("a='A'", actual); }
private void LogSampleLogs() { var structuredData = new StructuredData(); var simpleData = "This is a string."; _logger.LogTrace("Here's a Verbose message."); _logger.LogDebug("Here's a Debug message. Only Public Properties (not fields) are shown on structured data. Structured data: {@sampleData}. Simple data: {simpleData}.", structuredData, simpleData); _logger.LogInformation(new Exception("Exceptions can be put on all log levels"), "Here's an Info message."); _logger.LogWarning("Here's a Warning message."); _logger.LogError(new Exception("This is an exception."), "Here's an Error message."); _logger.LogCritical("Here's a Fatal message."); }
public void StructuredStringFormatProperty() { var template = "x{a}"; var properties = new Dictionary <string, object>() { { "a", 1 }, }; IStructuredData data = new StructuredData(properties, template); var actual = data.ToString(); Assert.AreEqual("x1", actual); }
/// <summary> /// Fire the events registered for this event type asynchronously /// </summary> /// <param name="capsEvent">Capability name</param> /// <param name="body">Decoded event body</param> /// <param name="simulator">Reference to the simulator that /// generated this event</param> internal void BeginRaiseEvent(string capsEvent, StructuredData.LLSD body, Simulator simulator) { bool specialHandler = false; Caps.EventQueueCallback callback; // Default handler first, if one exists if (_EventTable.TryGetValue(String.Empty, out callback)) { if (callback != null) { CapsCallbackWrapper wrapper; wrapper.Callback = callback; wrapper.CapsEvent = capsEvent; wrapper.Body = body; wrapper.Simulator = simulator; ThreadPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper); } } // Generic parser next, don't generic parse events we've manually registered for if (body.Type == StructuredData.LLSDType.Map && !_EventTable.ContainsKey(capsEvent)) { StructuredData.LLSDMap map = (StructuredData.LLSDMap)body; Packet packet = Packet.BuildPacket(capsEvent, map); if (packet != null) { NetworkManager.IncomingPacket incomingPacket; incomingPacket.Simulator = simulator; incomingPacket.Packet = packet; Client.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler"); Client.Network.PacketInbox.Enqueue(incomingPacket); specialHandler = true; } } // Explicit handler next if (_EventTable.TryGetValue(capsEvent, out callback) && callback != null) { CapsCallbackWrapper wrapper; wrapper.Callback = callback; wrapper.CapsEvent = capsEvent; wrapper.Body = body; wrapper.Simulator = simulator; ThreadPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper); specialHandler = true; } if (!specialHandler) Client.Log("Unhandled CAPS event " + capsEvent, Helpers.LogLevel.Warning); }
/// <summary> /// Fire the events registered for this event type synchronously /// </summary> /// <param name="capsEvent">Capability name</param> /// <param name="body">Decoded event body</param> /// <param name="simulator">Reference to the simulator that /// generated this event</param> internal void RaiseEvent(string capsEvent, StructuredData.LLSD body, Simulator simulator) { bool specialHandler = false; Caps.EventQueueCallback callback; // Default handler first, if one exists if (_EventTable.TryGetValue(capsEvent, out callback)) { if (callback != null) { try { callback(capsEvent, body, simulator); } catch (Exception ex) { Client.Log("CAPS Event Handler: " + ex.ToString(), Helpers.LogLevel.Error); } } } // Generic parser next if (body.Type == StructuredData.LLSDType.Map) { StructuredData.LLSDMap map = (StructuredData.LLSDMap)body; Packet packet = Packet.BuildPacket(capsEvent, map); if (packet != null) { NetworkManager.IncomingPacket incomingPacket; incomingPacket.Simulator = simulator; incomingPacket.Packet = packet; Client.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler"); Client.Network.PacketInbox.Enqueue(incomingPacket); specialHandler = true; } } // Explicit handler next if (_EventTable.TryGetValue(capsEvent, out callback) && callback != null) { try { callback(capsEvent, body, simulator); } catch (Exception ex) { Client.Log("CAPS Event Handler: " + ex.ToString(), Helpers.LogLevel.Error); } specialHandler = true; } if (!specialHandler) Client.Log("Unhandled CAPS event " + capsEvent, Helpers.LogLevel.Warning); }
/// <summary> /// Deserializes OSD in to a list of primitives /// </summary> /// <param name="osd">Structure holding the serialized primitive list, /// must be of the SDMap type</param> /// <returns>A list of deserialized primitives</returns> public static List<Primitive> OSDToPrimList(StructuredData.OSD osd) { if (osd.Type != StructuredData.OSDType.Map) throw new ArgumentException("LLSD must be in the Map structure"); StructuredData.OSDMap map = (StructuredData.OSDMap)osd; List<Primitive> prims = new List<Primitive>(map.Count); foreach (KeyValuePair<string, StructuredData.OSD> kvp in map) { Primitive prim = Primitive.FromOSD(kvp.Value); prim.LocalID = UInt32.Parse(kvp.Key); prims.Add(prim); } return prims; }