nicko       2005/06/08 10:13:40

  Modified:    src/Appender BufferingAppenderSkeleton.cs
               tests/src log4net.Tests.csproj
               tests/src/Appender CountingAppender.cs
  Added:       tests/src/Appender BufferingAppenderTest.cs
  Log:
  Fix and tests for LOG4NET-32 AdoNetAppender losing first entry
  
  Revision  Changes    Path
  1.10      +30 -8     logging-log4net/src/Appender/BufferingAppenderSkeleton.cs
  
  Index: BufferingAppenderSkeleton.cs
  ===================================================================
  RCS file: 
/home/cvs/logging-log4net/src/Appender/BufferingAppenderSkeleton.cs,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- BufferingAppenderSkeleton.cs      16 Apr 2005 23:42:42 -0000      1.9
  +++ BufferingAppenderSkeleton.cs      8 Jun 2005 17:13:39 -0000       1.10
  @@ -431,17 +431,39 @@
                                // Add to the buffer, returns the event 
discarded from the buffer if there is no space remaining after the append

                                LoggingEvent discardedLoggingEvent = 
m_cb.Append(loggingEvent);

   

  -                             // Check if the discarded event should be logged

  -                             if (discardedLoggingEvent != null && 
m_lossyEvaluator != null && 
m_lossyEvaluator.IsTriggeringEvent(discardedLoggingEvent))

  +                             if (discardedLoggingEvent != null)

                                {

  -                                     SendBuffer(new LoggingEvent[] { 
discardedLoggingEvent } );

  +                                     // Buffer is full and has had to 
discard an event

  +                                     if (!m_lossy)

  +                                     {

  +                                             // Not lossy, must send all 
events

  +                                             SendBuffer(new LoggingEvent[] { 
discardedLoggingEvent } );

  +                                             SendBuffer(m_cb);

  +                                     }

  +                                     else

  +                                     {

  +                                             // Check if the discarded event 
should be logged

  +                                             if (m_lossyEvaluator != null && 
m_lossyEvaluator.IsTriggeringEvent(discardedLoggingEvent))

  +                                             {

  +                                                     SendBuffer(new 
LoggingEvent[] { discardedLoggingEvent } );

  +                                             }

  +

  +                                             // Check if the event should 
trigger the whole buffer to be sent

  +                                             if (m_evaluator != null && 
m_evaluator.IsTriggeringEvent(loggingEvent))

  +                                             {

  +                                                     SendBuffer(m_cb);

  +                                             }

  +                                     }

                                }

  -

  -                             // If the buffer is full & not lossy then send 
the buffer, otherwise check if

  -                             // the event will trigger the whole buffer to 
be sent

  -                             if ((discardedLoggingEvent!=null && !m_lossy) 
|| (m_evaluator != null && m_evaluator.IsTriggeringEvent(loggingEvent)) )

  +                             else

                                {

  -                                     SendBuffer(m_cb);

  +                                     // Buffer is not yet full

  +

  +                                     // Check if the event should trigger 
the whole buffer to be sent

  +                                     if (m_evaluator != null && 
m_evaluator.IsTriggeringEvent(loggingEvent))

  +                                     {

  +                                             SendBuffer(m_cb);

  +                                     }

                                }

                        }

                }

  
  
  
  1.10      +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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- log4net.Tests.csproj      11 Mar 2005 21:44:44 -0000      1.9
  +++ log4net.Tests.csproj      8 Jun 2005 17:13:39 -0000       1.10
  @@ -108,6 +108,11 @@
                       BuildAction = "Compile"

                   />

                   <File

  +                    RelPath = "Appender\BufferingAppenderTest.cs"

  +                    SubType = "Code"

  +                    BuildAction = "Compile"

  +                />

  +                <File

                       RelPath = "Appender\CountingAppender.cs"

                       SubType = "Code"

                       BuildAction = "Compile"

  
  
  
  1.3       +8 -0      logging-log4net/tests/src/Appender/CountingAppender.cs
  
  Index: CountingAppender.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/tests/src/Appender/CountingAppender.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CountingAppender.cs       17 Jan 2005 21:40:52 -0000      1.2
  +++ CountingAppender.cs       8 Jun 2005 17:13:40 -0000       1.3
  @@ -60,6 +60,14 @@
   

                #endregion Public Instance Properties

   

  +             /// <summary>

  +             /// Reset the counter to zero

  +             /// </summary>

  +             public void ResetCounter()

  +             {

  +                     m_counter = 0;

  +             }

  +

                #region Override implementation of AppenderSkeleton

   

                /// <summary>

  
  
  
  1.1                  
logging-log4net/tests/src/Appender/BufferingAppenderTest.cs
  
  Index: BufferingAppenderTest.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 log4net.Core;

  using log4net.Appender;

  

  using NUnit.Framework;

  

  namespace log4net.Tests.Appender

  {

        /// <summary>

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

        /// </summary>

        /// <remarks>

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

        /// </remarks>

        [TestFixture] public class BufferingAppenderTest

        {

                private BufferingForwardingAppender 
m_bufferingForwardingAppender;

                private CountingAppender m_countingAppender;

                private log4net.Repository.Hierarchy.Hierarchy m_hierarchy;

  

  

                private void SetupRepository()

                {

                        m_hierarchy = new Repository.Hierarchy.Hierarchy();

  

                        m_countingAppender = new CountingAppender();

                        m_countingAppender.ActivateOptions();

  

                        m_bufferingForwardingAppender = new 
BufferingForwardingAppender();

                        
m_bufferingForwardingAppender.AddAppender(m_countingAppender);

  

                        m_bufferingForwardingAppender.BufferSize = 0;

                        m_bufferingForwardingAppender.ClearFilters();

                        m_bufferingForwardingAppender.Evaluator = null;

                        m_bufferingForwardingAppender.Fix = FixFlags.Partial;

                        m_bufferingForwardingAppender.Lossy = false;

                        m_bufferingForwardingAppender.LossyEvaluator = null;

                        m_bufferingForwardingAppender.Threshold = Level.All;

  

                        m_bufferingForwardingAppender.ActivateOptions();

  

                        log4net.Config.BasicConfigurator.Configure(m_hierarchy, 
m_bufferingForwardingAppender);

                }

  

                /// <summary>

                /// </summary>

                [Test] public void TestSetupAppender()

                {

                        SetupRepository();

  

                        Assertion.AssertEquals("Test empty appender", 0, 
m_countingAppender.Counter);

  

                        ILogger logger = m_hierarchy.GetLogger("test");

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message logged", null);

  

                        Assertion.AssertEquals("Test 1 event logged", 1, 
m_countingAppender.Counter);

                }

  

                /// <summary>

                /// </summary>

                [Test] public void TestBufferSize5()

                {

                        SetupRepository();

  

                        m_bufferingForwardingAppender.BufferSize = 5;

                        m_bufferingForwardingAppender.ActivateOptions();

  

                        Assertion.AssertEquals(m_countingAppender.Counter, 0);

  

                        ILogger logger = m_hierarchy.GetLogger("test");

  

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 1", null);

                        Assertion.AssertEquals("Test 1 event in buffer", 0, 
m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 2", null);

                        Assertion.AssertEquals("Test 2 event in buffer", 0, 
m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 3", null);

                        Assertion.AssertEquals("Test 3 event in buffer", 0, 
m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 4", null);

                        Assertion.AssertEquals("Test 4 event in buffer", 0, 
m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 5", null);

                        Assertion.AssertEquals("Test 5 event in buffer", 0, 
m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 6", null);

                        Assertion.AssertEquals("Test 0 event in buffer. 6 event 
sent", 6, m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 7", null);

                        Assertion.AssertEquals("Test 1 event in buffer. 6 event 
sent", 6, m_countingAppender.Counter);

                        logger.Log(typeof(BufferingAppenderTest), Level.Warn, 
"Message 8", null);

                        Assertion.AssertEquals("Test 2 event in buffer. 6 event 
sent", 6, m_countingAppender.Counter);

                }

        }

  }

  
  
  

Reply via email to