nicko       2005/06/20 12:11:53

  Modified:    src/Util ThreadContextStack.cs
               tests/src log4net.Tests.csproj
  Added:       tests/src/Context ThreadContextTest.cs
  Log:
  Fix for LOG4NET-35 Exception rendering ThreadContextStack if null value 
pushed into stack. Fix and tests included
  
  Revision  Changes    Path
  1.8       +1 -1      logging-log4net/src/Util/ThreadContextStack.cs
  
  Index: ThreadContextStack.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Util/ThreadContextStack.cs,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ThreadContextStack.cs     3 Apr 2005 17:59:38 -0000       1.7
  +++ ThreadContextStack.cs     20 Jun 2005 19:11:53 -0000      1.8
  @@ -298,7 +298,7 @@
                        {

                                get 

                                {

  -                                     if (m_fullMessage == null)

  +                                     if (m_fullMessage == null && m_parent 
!= null)

                                        {

                                                m_fullMessage = 
string.Concat(m_parent.FullMessage, " ", m_message);

                                        }

  
  
  
  1.11      +5 -0      logging-log4net/tests/src/log4net.Tests.csproj
  
  Index: log4net.Tests.csproj
  ===================================================================
  RCS file: /home/cvs/logging-log4net/tests/src/log4net.Tests.csproj,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- log4net.Tests.csproj      8 Jun 2005 17:13:39 -0000       1.10
  +++ log4net.Tests.csproj      20 Jun 2005 19:11:53 -0000      1.11
  @@ -138,6 +138,11 @@
                       BuildAction = "Compile"

                   />

                   <File

  +                    RelPath = "Context\ThreadContextTest.cs"

  +                    SubType = "Code"

  +                    BuildAction = "Compile"

  +                />

  +                <File

                       RelPath = "Core\ShutdownTest.cs"

                       SubType = "Code"

                       BuildAction = "Compile"

  
  
  
  1.1                  logging-log4net/tests/src/Context/ThreadContextTest.cs
  
  Index: ThreadContextTest.cs
  ===================================================================
  #region Copyright & License

  //

  // Copyright 2001-2005 The Apache Software Foundation

  //

  // Licensed under the Apache License, Version 2.0 (the "License");

  // you may not use this file except in compliance with the License.

  // You may obtain a copy of the License at

  //

  // http://www.apache.org/licenses/LICENSE-2.0

  //

  // Unless required by applicable law or agreed to in writing, software

  // distributed under the License is distributed on an "AS IS" BASIS,

  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  // See the License for the specific language governing permissions and

  // limitations under the License.

  //

  #endregion

  

  using System;

  

  using log4net.Config;

  using log4net.Layout;

  using log4net.Repository;

  

  using log4net.Tests.Appender;

  

  using NUnit.Framework;

  

  namespace log4net.Tests.Context

  {

        /// <summary>

        /// Used for internal unit testing the <see cref="ThreadContext"/> 
class.

        /// </summary>

        /// <remarks>

        /// Used for internal unit testing the <see cref="ThreadContext"/> 
class.

        /// </remarks>

        [TestFixture] public class ThreadContextTest

        {

                [Test] public void TestThreadPropertiesPattern()

                {

                        StringAppender stringAppender = new StringAppender();

                        stringAppender.Layout = new 
PatternLayout("%property{prop1}");

  

                        ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());

                        BasicConfigurator.Configure(rep, stringAppender);

  

                        ILog log1 = LogManager.GetLogger(rep.Name, 
"TestThreadProperiesPattern");

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test no thread properties value 
set", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

  

                        ThreadContext.Properties["prop1"] = "val1";

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test thread properties value 
set", "val1", stringAppender.GetString());

                        stringAppender.Reset();

  

                        ThreadContext.Properties.Remove("prop1");

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test thread properties value 
removed", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

                }

  

                [Test] public void TestThreadStackPattern()

                {

                        StringAppender stringAppender = new StringAppender();

                        stringAppender.Layout = new 
PatternLayout("%property{prop1}");

  

                        ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());

                        BasicConfigurator.Configure(rep, stringAppender);

  

                        ILog log1 = LogManager.GetLogger(rep.Name, 
"TestThreadStackPattern");

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test no thread stack value 
set", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

  

                        using(ThreadContext.Stacks["prop1"].Push("val1"))

                        {

                                log1.Info("TestMessage");

                                Assertion.AssertEquals("Test thread stack value 
set", "val1", stringAppender.GetString());

                                stringAppender.Reset();

                        }

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test thread stack value 
removed", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

                }

  

                [Test] public void TestThreadStackPattern2()

                {

                        StringAppender stringAppender = new StringAppender();

                        stringAppender.Layout = new 
PatternLayout("%property{prop1}");

  

                        ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());

                        BasicConfigurator.Configure(rep, stringAppender);

  

                        ILog log1 = LogManager.GetLogger(rep.Name, 
"TestThreadStackPattern");

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test no thread stack value 
set", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

  

                        using(ThreadContext.Stacks["prop1"].Push("val1"))

                        {

                                log1.Info("TestMessage");

                                Assertion.AssertEquals("Test thread stack value 
set", "val1", stringAppender.GetString());

                                stringAppender.Reset();

  

                                
using(ThreadContext.Stacks["prop1"].Push("val2"))

                                {

                                        log1.Info("TestMessage");

                                        Assertion.AssertEquals("Test thread 
stack value pushed 2nd val", "val1 val2", stringAppender.GetString());

                                        stringAppender.Reset();

                                }

                        }

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test thread stack value 
removed", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

                }

  

                [Test] public void TestThreadStackPatternNullVal()

                {

                        StringAppender stringAppender = new StringAppender();

                        stringAppender.Layout = new 
PatternLayout("%property{prop1}");

  

                        ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());

                        BasicConfigurator.Configure(rep, stringAppender);

  

                        ILog log1 = LogManager.GetLogger(rep.Name, 
"TestThreadStackPattern");

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test no thread stack value 
set", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

  

                        using(ThreadContext.Stacks["prop1"].Push(null))

                        {

                                log1.Info("TestMessage");

                                Assertion.AssertEquals("Test thread stack value 
set", "(null)", stringAppender.GetString());

                                stringAppender.Reset();

                        }

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test thread stack value 
removed", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

                }

  

                [Test] public void TestThreadStackPatternNullVal2()

                {

                        StringAppender stringAppender = new StringAppender();

                        stringAppender.Layout = new 
PatternLayout("%property{prop1}");

  

                        ILoggerRepository rep = 
LogManager.CreateRepository(Guid.NewGuid().ToString());

                        BasicConfigurator.Configure(rep, stringAppender);

  

                        ILog log1 = LogManager.GetLogger(rep.Name, 
"TestThreadStackPattern");

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test no thread stack value 
set", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

  

                        using(ThreadContext.Stacks["prop1"].Push("val1"))

                        {

                                log1.Info("TestMessage");

                                Assertion.AssertEquals("Test thread stack value 
set", "val1", stringAppender.GetString());

                                stringAppender.Reset();

  

                                using(ThreadContext.Stacks["prop1"].Push(null))

                                {

                                        log1.Info("TestMessage");

                                        Assertion.AssertEquals("Test thread 
stack value pushed null", "val1 ", stringAppender.GetString());

                                        stringAppender.Reset();

                                }

                        }

  

                        log1.Info("TestMessage");

                        Assertion.AssertEquals("Test thread stack value 
removed", "(null)", stringAppender.GetString());

                        stringAppender.Reset();

                }

        }

  }

  
  
  

Reply via email to