public void TestEverythingTogether() { var tpp = new TraceParameterProvider(); tpp .For<IEmailer>(m => m.Send(Any<IEmail>.Value, Any<DateTime>.Value)) .With<IEmail>() .Trace(e => e.From).As("sender") .Trace(e => e.To).As("recipient") .Trace(e => e.Subject).As("s") .And(e => e.Body).As("b") .TogetherAs("message") .Trace(e => String.Join("/", e.Attachments.Select(Convert.ToBase64String).ToArray())) .As("attachments") .EndWith() .Trace("when") .ForAnything() .AddContext("context", () => "testing"); var proxy = (IEmailer)new TypeImplementer(typeof(IEmailer), tpp).EventSource; EnableLogging(proxy); proxy.Send(new EMail("from", "to", "subject", "body", new byte[][] { new byte[] { 1 } }), DateTime.Parse("1/1/2000")); // look at the events again var events = _listener.Events.ToArray(); Assert.AreEqual(1, events.Length); var payload = events[0].Payload.Select(o => o.ToString()).ToArray(); Assert.AreEqual(6, payload.Length); Assert.That(payload[0] == ("from")); Assert.That(payload[1] == ("to")); Assert.That(payload[2] == ("{\"s\":\"subject\",\"b\":\"body\"}")); Assert.That(payload[3] == ("AQ==")); Assert.That(payload[4] == ("1/1/2000 12:00:00 AM")); Assert.That(payload[5] == ("testing")); }
public void AndExpressionWithNameAlternateSyntax() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .With<IEmail>() .Trace("email", e => e.From, e => e.To) .EndWith(); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(1)); Assert.That(builders[0].Alias, Is.EqualTo("email")); var values = builders[0].Values.ToArray(); ValidateValue(values[0], "From", "email", true); ValidateValue(values[1], "To", "email", true); }
public void AndExpressionAlternateSyntaxWithRename() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .With<IEmail>() .Trace(e => e.From, e => e.To).As("Sender", "Recipient") .TogetherAs("metadata") .EndWith(); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(1)); Assert.That(builders[0].Alias, Is.EqualTo("metadata")); var values = builders[0].Values.ToArray(); ValidateValue(values[0], "Sender", null, true); ValidateValue(values[1], "Recipient", null, true); }
public void AndNameAlternateSyntax() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .Trace("email", "when"); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(1)); Assert.That(builders[0].Alias, Is.EqualTo("email")); var values = builders[0].Values.ToArray(); ValidateValue(values[0], "email", "email", false); ValidateValue(values[1], "when", "when", false); }
public void ParameterProviderAddsMappingForSubClassWhenBaseClassIsMapped() { var tpp = new TraceParameterProvider(); tpp.ForAnything() .With<BaseClass>() .Trace(c => c.Message); var proxy2 = new TypeImplementer(typeof(ISubClassEventSource), tpp).EventSource; Assert.DoesNotThrow(delegate { var proxy = new TypeImplementer(typeof(ISubClassEventSource), tpp).EventSource; }); }
public void AddContext() { var traceDescription = new TraceParameterProvider().For<IEmailer>() .AddContext("context", () => "foo"); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.That(traceBuilder.Alias, Is.EqualTo("context")); var traceValues = traceBuilder.Values.ToArray(); Assert.That(traceValues.Length, Is.EqualTo(1)); ValidateValue(traceValues[0], "context", null, true); }
public void TraceParameterMemberAs() { var traceDescription = new TraceParameterProvider().For<IEmailer>() .With<IEmail>() .Trace(email => email.From) .As("sender") .EndWith(); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.That(traceBuilder.Alias, Is.EqualTo("sender")); var traceValues = traceBuilder.Values.ToArray(); Assert.That(traceValues.Length, Is.EqualTo(1)); ValidateValue(traceValues[0], "sender", null, true); }
public void TraceAllParametersByDefault() { var tpp = new TraceParameterProvider(); var proxy = (IEmailer)new TypeImplementer(typeof(IEmailer), tpp).EventSource; EnableLogging(proxy); proxy.Send(new EMail("from", "to", "subject", "body", new byte[][] { new byte[] { 1 } }), DateTime.Parse("1/1/2000")); // look at the events again var events = _listener.Events.ToArray(); Assert.AreEqual(1, events.Length); var payload = events[0].Payload.Select(o => o.ToString()).ToArray(); Assert.AreEqual(2, payload.Length); Assert.That(payload.Contains("{\"From\":\"from\",\"To\":\"to\",\"Subject\":\"subject\",\"Body\":\"body\",\"Attachments\":[\"AQ==\"]}")); Assert.That(payload.Contains("1/1/2000 12:00:00 AM")); }
public void TraceParameterNameAs() { var traceDescription = new TraceParameterProvider().For<IEmailer>() .Trace("email") .As("message"); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.That(traceBuilder.Alias, Is.EqualTo("message")); var traceValues = traceBuilder.Values.ToArray(); Assert.That(traceValues.Length, Is.EqualTo(1)); ValidateValue(traceValues[0], "message", "email", false); }
public void TraceParameterExpressionAndName() { var traceDescription = new TraceParameterProvider().For<IEmailer>() .With<IEmail>() .Trace("email", email => email.From) .EndWith(); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.That(traceBuilder.Values.First().Matches(typeof(IEmailer).GetMethod("Send").GetParameters()).Count(), Is.EqualTo(1)); Assert.That(traceBuilder.Values.First().Matches(typeof(IEmailer).GetMethod("OtherName").GetParameters()).Count(), Is.EqualTo(0)); Assert.That(traceBuilder.Alias, Is.EqualTo("email")); var traceValues = traceBuilder.Values.ToArray(); Assert.That(traceValues.Length, Is.EqualTo(1)); ValidateValue(traceValues[0], "From", "email", true); }
public void ForMethod() { var traceDescription = new TraceParameterProvider().For<IEmailer>(e => e.Send(Any<IEmail>.Value, Any<DateTime>.Value)); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.True(traceBuilder.Matches(typeof(IEmailer).GetMethod("Send"))); Assert.False(traceBuilder.Matches(typeof(IEmailer).GetMethod("Receive"))); Assert.False(traceBuilder.Matches(typeof(INotEmail).GetMethod("Nothing"))); }
public void ForInterface() { var traceDescription = new TraceParameterProvider().For<IEmailer>(); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.True(traceBuilder.Matches(typeof(IEmailer).GetMethod("Send"))); Assert.True(traceBuilder.Matches(typeof(IEmailer).GetMethod("Receive"))); Assert.False(traceBuilder.Matches(typeof(INotEmail).GetMethod("Nothing"))); }
public void Test33() { var tpp = new TraceParameterProvider(); tpp.ForAnything().Trace((RagStatus r) => r.ToString()); var proxy = (ITest33)new TypeImplementer(typeof(ITest33), tpp).EventSource; EnableLogging(proxy); // do some logging proxy.LogItServiceStatusEvent("it", RagStatus.Up); // look at the events var events = _listener.Events.ToArray(); Assert.AreEqual(1, events.Length); Assert.AreEqual(2, events[0].Payload.Count); Assert.AreEqual("it", events[0].Payload[0]); Assert.AreEqual("Up", events[0].Payload[1]); }
public void WithTypeAndNameTrace() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .With<IEmail>("email") .Trace(e => e.From) .Trace(e => e.To); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(2)); Assert.That(builders[0].Alias, Is.EqualTo("From")); ValidateValue(builders[0].Values.First(), "From", "email", true); Assert.That(builders[1].Alias, Is.EqualTo("To")); ValidateValue(builders[1].Values.First(), "To", "email", true); }
public void TraceParameterExpressionAs() { var traceDescription = new TraceParameterProvider().For<IEmailer>() .With<IEmail>() .Trace(email => string.Join("/", email.Attachments.Select(Convert.ToBase64String).ToArray())) .As("attachments") .EndWith(); ParameterBuilder traceBuilder = (ParameterBuilder)traceDescription; Assert.That(traceBuilder.Alias, Is.EqualTo("attachments")); var traceValues = traceBuilder.Values.ToArray(); Assert.That(traceValues.Length, Is.EqualTo(1)); ValidateValue(traceValues[0], "attachments", null, true); }
public void WithChained() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .With<IEmail>("email") .Trace(e => e.From) .Trace(e => e.To) .With<OtherClass>() .Trace(c => c.ToString()).As("other"); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(3)); Assert.That(builders[0].Alias, Is.EqualTo("From")); ValidateValue(builders[0].Values.First(), "From", "email", true); Assert.That(builders[0].Values.First().ParameterType, Is.EqualTo(typeof(IEmail))); Assert.That(builders[1].Alias, Is.EqualTo("To")); Assert.That(builders[1].Values.First().ParameterType, Is.EqualTo(typeof(IEmail))); ValidateValue(builders[1].Values.First(), "To", "email", true); Assert.That(builders[2].Alias, Is.EqualTo("other")); Assert.That(builders[2].Values.First().ParameterType, Is.EqualTo(typeof(OtherClass))); }
public void TwoNameTraces() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .Trace("email") .Trace("when"); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(2)); ValidateValue(builders[0].Values.First(), "email", "email", false); ValidateValue(builders[1].Values.First(), "when", "when", false); }
public void IgnoreParameterByType() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>().Ignore<IEmail>(); var proxy = (IEmailer)new TypeImplementer(typeof(IEmailer), tpp).EventSource; EnableLogging(proxy); proxy.Send(new EMail("from", "to", "subject", "body", new byte[][] { new byte[] { 1 } }), DateTime.Parse("1/1/2000")); // look at the events again var events = _listener.Events.ToArray(); Assert.AreEqual(1, events.Length); var payload = events[0].Payload.Select(o => o.ToString()).ToArray(); Assert.AreEqual(1, payload.Length); Assert.That(payload.Contains("1/1/2000 12:00:00 AM")); }
public void TwoTracesRenamed() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .With<IEmail>() .Trace(email => email.From).As("Sender") .Trace(email => email.To).As("Recipient") .EndWith(); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(2)); ValidateValue(builders[0].Values.First(), "Sender", null, true); ValidateValue(builders[1].Values.First(), "Recipient", null, true); }
public void CanAddRulesToEventSource() { var tpp = new TraceParameterProvider(); tpp.ForAnything().With<Exception>() .Trace(e => e.Message) .Trace(e => e.StackTrace); var proxy = (EventSourceWithRules)new TypeImplementer(typeof(EventSourceWithRules), tpp).EventSource; EnableLogging(proxy); proxy.TraceException(new Exception("oops, world")); // look at the events var events = _listener.Events.ToArray(); Assert.AreEqual(1, events.Length); Assert.AreEqual(2, events[0].Payload.Count); Assert.That(events[0].Payload.Contains("oops, world")); }
public void AndTracesTogetherAs() { var tpp = new TraceParameterProvider(); tpp.For<IEmailer>() .With<IEmail>() .Trace(email => email.From) .And(email => email.To) .As("Sender", "Recipient") .TogetherAs("Metadata") .EndWith(); var builders = tpp.Builders.ToArray(); Assert.That(builders.Length, Is.EqualTo(1)); Assert.That(builders[0].Alias, Is.EqualTo("Metadata")); var values = builders[0].Values.ToArray(); ValidateValue(values[0], "Sender", null, true); ValidateValue(values[1], "Recipient", null, true); }
public void ContextShouldBeLast() { var tpp = new TraceParameterProvider(); tpp.ForAnything().AddContext("arg2", () => "extra"); var proxy = (IPayloadOrder)new TypeImplementer(typeof(IPayloadOrder), tpp).EventSource; EnableLogging(proxy); proxy.ForLoopIteration(0); // look at the events var events = _listener.Events.ToArray(); Assert.AreEqual(1, events.Length); var payload = events[0].Payload.Select(o => o.ToString()).ToArray(); Assert.AreEqual(2, payload.Length); Assert.That(payload[0] == ("0")); Assert.That(payload[1] == ("extra")); }
/// <summary> /// Initializes a new instance of the TypeImplementer class. /// </summary> /// <param name="interfaceType">The type to implement.</param> /// <param name="parameterProvider">An optional parameter provider to use when building the type. Used for testing.</param> public TypeImplementer(Type interfaceType, TraceParameterProvider parameterProvider = null) { _interfaceType = interfaceType; _contextProvider = ProviderManager.GetProvider<TraceContextProvider>(interfaceType, typeof(TraceContextProviderAttribute), null); _serializationProvider = TraceSerializationProvider.GetSerializationProvider(interfaceType); _eventAttributeProvider = ProviderManager.GetProvider<EventAttributeProvider>(interfaceType, typeof(EventAttributeProviderAttribute), () => new EventAttributeProvider()); _traceParameterProvider = parameterProvider ?? TraceParameterProvider.GetParameterProvider(interfaceType); // only interfaces support context if (_contextProvider != null && !_interfaceType.IsInterface) throw new InvalidOperationException("Context Providers can only be added to interface-based logs."); ImplementType(); }