You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2005/04/03 20:01:05 UTC
cvs commit: logging-log4net/tests/src/Appender RemotingAppenderTest.cs
nicko 2005/04/03 11:01:05
Modified: tests/src/Appender RemotingAppenderTest.cs
Log:
Added unit test to demonstrate issue LOG4NET-21 from Sam Smoot
Revision Changes Path
1.3 +134 -5 logging-log4net/tests/src/Appender/RemotingAppenderTest.cs
Index: RemotingAppenderTest.cs
===================================================================
RCS file: /home/cvs/logging-log4net/tests/src/Appender/RemotingAppenderTest.cs,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RemotingAppenderTest.cs 17 Jan 2005 21:40:52 -0000 1.2
+++ RemotingAppenderTest.cs 3 Apr 2005 18:01:05 -0000 1.3
@@ -17,6 +17,7 @@
#endregion
using System;
+using System.Collections;
using System.Diagnostics;
using System.Globalization;
using System.Runtime.Remoting;
@@ -51,7 +52,7 @@
// Setup the remoting appender
ConfigureRootAppender(FixFlags.Partial);
- RemoteLoggingSinkImpl.Instance.Events = null;
+ RemoteLoggingSinkImpl.Instance.Reset();
log4net.Repository.Hierarchy.Logger root = null;
root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
@@ -78,7 +79,7 @@
// Setup the remoting appender
ConfigureRootAppender(FixFlags.Partial);
- RemoteLoggingSinkImpl.Instance.Events = null;
+ RemoteLoggingSinkImpl.Instance.Reset();
log4net.Repository.Hierarchy.Logger root = null;
root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
@@ -106,7 +107,7 @@
// Setup the remoting appender
ConfigureRootAppender(FixFlags.All);
- RemoteLoggingSinkImpl.Instance.Events = null;
+ RemoteLoggingSinkImpl.Instance.Reset();
log4net.Repository.Hierarchy.Logger root = null;
root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
@@ -126,6 +127,67 @@
Assertion.AssertNotNull("Expect username to not be null because doing a full fix", eventData.UserName);
}
+ /// <summary>
+ /// Test that the Message property is correctly remoted
+ /// </summary>
+ [Test] public void TestRemotedMessageNdcPushPop()
+ {
+ // Setup the remoting appender
+ ConfigureRootAppender(FixFlags.Partial);
+
+ RemoteLoggingSinkImpl.Instance.Reset();
+
+ log4net.Repository.Hierarchy.Logger root = null;
+ root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
+
+ string testMessage = string.Format("test message [ {0} ]", (new Random()).Next());
+
+ using(NDC.Push("value")) {}
+
+ // Log a message that will be remoted
+ root.Log(Level.Debug, testMessage, null);
+
+ // Wait for the remoted object to be delivered
+ System.Threading.Thread.Sleep(1000);
+
+ LoggingEvent[] events = RemoteLoggingSinkImpl.Instance.Events;
+ Assertion.AssertEquals("Expect to receive 1 remoted event", 1, events.Length);
+
+ Assertion.AssertEquals("Expect Message match after remoting event", testMessage, events[0].RenderedMessage);
+ }
+
+ [Test] public void TestNestedNdc()
+ {
+ // Setup the remoting appender
+ ConfigureRootAppender(FixFlags.Partial);
+
+ RemoteLoggingSinkImpl.Instance.Reset();
+
+ log4net.Tests.Appender.Remoting.UserInterfaces.TestService t;
+ t = new log4net.Tests.Appender.Remoting.UserInterfaces.TestService();
+ t.Test();
+
+ // Wait for the remoted objects to be delivered
+ System.Threading.Thread.Sleep(2000);
+
+ LoggingEvent[] events = RemoteLoggingSinkImpl.Instance.Events;
+ Assertion.AssertEquals("Expect to receive 5 remoted event", 5, events.Length);
+
+ Assertion.AssertEquals("Verify event 1 RenderedMessage", "begin test", events[0].RenderedMessage);
+ Assertion.AssertEquals("Verify event 2 RenderedMessage", "feature", events[1].RenderedMessage);
+ Assertion.AssertEquals("Verify event 3 RenderedMessage", "return", events[2].RenderedMessage);
+ Assertion.AssertEquals("Verify event 4 RenderedMessage", "return", events[3].RenderedMessage);
+ Assertion.AssertEquals("Verify event 5 RenderedMessage", "end test", events[4].RenderedMessage);
+
+ Assertion.AssertNull("Verify event 1 Properties", events[0].Properties["NDC"]);
+ Assertion.AssertEquals("Verify event 2 Properties", "test1", events[1].Properties["NDC"]);
+ Assertion.AssertEquals("Verify event 3 Properties", "test1 test2", events[2].Properties["NDC"]);
+ Assertion.AssertEquals("Verify event 4 Properties", "test1", events[3].Properties["NDC"]);
+ Assertion.AssertNull("Verify event 5 Properties", events[4].Properties["NDC"]);
+ }
+
+
+
private void RegisterRemotingServerChannel()
{
if (m_remotingChannel == null)
@@ -205,7 +267,7 @@
{
public static readonly RemoteLoggingSinkImpl Instance = new RemoteLoggingSinkImpl();
- public LoggingEvent[] Events = null;
+ private ArrayList m_events = new ArrayList();
#region Public Instance Constructors
@@ -226,7 +288,7 @@
/// </remarks>
public void LogEvents(LoggingEvent[] events)
{
- Events = events;
+ m_events.AddRange(events);
}
#endregion Implementation of IRemoteLoggingSink
@@ -247,6 +309,19 @@
}
#endregion Override implementation of MarshalByRefObject
+
+ public void Reset()
+ {
+ m_events.Clear();
+ }
+
+ public LoggingEvent[] Events
+ {
+ get
+ {
+ return (LoggingEvent[])m_events.ToArray(typeof(LoggingEvent));
+ }
+ }
}
//
@@ -259,3 +334,57 @@
}
}
}
+
+// helper for TestNestedNdc
+namespace log4net.Tests.Appender.Remoting.UserInterfaces
+{
+ public class TestService
+ {
+ static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ public void Test()
+ {
+ log.Info("begin test");
+ Feature f = new Feature();
+ f.Test();
+ log.Info("end test");
+ }
+ }
+}
+// helper for TestNestedNdc
+namespace log4net.Tests.Appender.Remoting
+{
+ public class Feature
+ {
+ static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ public void Test()
+ {
+ using(NDC.Push("test1"))
+ {
+ log.Info("feature");
+ log4net.Tests.Appender.Remoting.Data.Dal d = new log4net.Tests.Appender.Remoting.Data.Dal();
+ d.Test();
+ log.Info("return");
+ }
+ }
+ }
+}
+// helper for TestNestedNdc
+namespace log4net.Tests.Appender.Remoting.Data
+{
+ public class Dal
+ {
+ static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ public void Test()
+ {
+ using(NDC.Push("test2"))
+ {
+ log.Info("return");
+ }
+ }
+ }
+}
+
+