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 rg...@apache.org on 2007/12/31 17:25:47 UTC

svn commit: r607749 - in /logging/log4net/trunk/tests/src: ./ Appender/ Appender/AdoNet/

Author: rgrabowski
Date: Mon Dec 31 08:25:45 2007
New Revision: 607749

URL: http://svn.apache.org/viewvc?rev=607749&view=rev
Log:
Added stub Ado.Net provider to allow testing of AdoNetAppender.

Added:
    logging/log4net/trunk/tests/src/Appender/AdoNet/   (with props)
    logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetCommand.cs
    logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetConnection.cs
    logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameter.cs
    logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameterCollection.cs
    logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetTransaction.cs
    logging/log4net/trunk/tests/src/Appender/AdoNetAppenderTest.cs
Modified:
    logging/log4net/trunk/tests/src/log4net.Tests.vs2005.csproj

Propchange: logging/log4net/trunk/tests/src/Appender/AdoNet/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Mon Dec 31 08:25:45 2007
@@ -0,0 +1 @@
+(LOG4NET-\d+)

Propchange: logging/log4net/trunk/tests/src/Appender/AdoNet/
------------------------------------------------------------------------------
    bugtraq:url = http://issues.apache.org/jira/browse/%BUGID%

Added: logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetCommand.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetCommand.cs?rev=607749&view=auto
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetCommand.cs (added)
+++ logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetCommand.cs Mon Dec 31 08:25:45 2007
@@ -0,0 +1,123 @@
+using System;
+using System.Data;
+
+namespace log4net.Tests.Appender.AdoNet
+{
+    public class Log4NetCommand : IDbCommand
+    {
+        #region AdoNetAppender
+
+        private static Log4NetCommand mostRecentInstance;
+
+        private IDbTransaction transaction;
+        private string commandText;
+        private readonly IDataParameterCollection parameters;
+        private CommandType commandType;
+        private int executeNonQueryCount;
+
+        public Log4NetCommand()
+        {
+            mostRecentInstance = this;
+
+            parameters = new Log4NetParameterCollection();
+        }
+
+        public void Dispose()
+        {
+            // empty
+        }
+
+        public IDbTransaction Transaction
+        {
+            get { return transaction; }
+            set { transaction = value; }
+        }
+
+        public int ExecuteNonQuery()
+        {
+            executeNonQueryCount++;
+            return 0;
+        }
+
+        public int ExecuteNonQueryCount
+        {
+            get { return executeNonQueryCount; }
+        }
+
+        public IDbDataParameter CreateParameter()
+        {
+            return new Log4NetParameter();
+        }
+
+        public string CommandText
+        {
+            get { return commandText; }
+            set { commandText = value; }
+        }
+
+        public CommandType CommandType
+        {
+            get { return commandType; }
+            set { commandType = value; }
+        }
+
+        public void Prepare()
+        {
+            // empty
+        }
+
+        public IDataParameterCollection Parameters
+        {
+            get { return parameters; }
+        }
+
+        public static Log4NetCommand MostRecentInstance
+        {
+            get { return mostRecentInstance; }
+        }
+
+        #endregion
+
+        #region Not Implemented
+
+        public void Cancel()
+        {
+            throw new NotImplementedException();
+        }
+
+        public IDataReader ExecuteReader()
+        {
+            throw new NotImplementedException();
+        }
+
+        public IDataReader ExecuteReader(CommandBehavior behavior)
+        {
+            throw new NotImplementedException();
+        }
+
+        public object ExecuteScalar()
+        {
+            throw new NotImplementedException();
+        }
+
+        public IDbConnection Connection
+        {
+            get { throw new NotImplementedException(); }
+            set { throw new NotImplementedException(); }
+        }
+
+        public int CommandTimeout
+        {
+            get { throw new NotImplementedException(); }
+            set { throw new NotImplementedException(); }
+        }
+
+        public UpdateRowSource UpdatedRowSource
+        {
+            get { throw new NotImplementedException(); }
+            set { throw new NotImplementedException(); }
+        }
+
+        #endregion
+    }
+}

Added: logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetConnection.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetConnection.cs?rev=607749&view=auto
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetConnection.cs (added)
+++ logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetConnection.cs Mon Dec 31 08:25:45 2007
@@ -0,0 +1,90 @@
+using System;
+using System.Data;
+
+namespace log4net.Tests.Appender.AdoNet
+{
+    public class Log4NetConnection : IDbConnection
+    {
+        #region AdoNetAppender
+
+        private static Log4NetConnection mostRecentInstance;
+
+        private bool open;
+        private string connectionString;
+
+        public Log4NetConnection()
+        {
+            mostRecentInstance = this;
+        }
+
+        public void Close()
+        {
+            open = false;
+        }
+
+        public ConnectionState State
+        {
+            get 
+            {
+                return open ? ConnectionState.Open : ConnectionState.Closed;
+            }
+        }
+
+        public string ConnectionString
+        {
+            get { return connectionString; }
+            set { connectionString = value; }
+        }
+
+        public IDbTransaction BeginTransaction()
+        {
+            return new Log4NetTransaction();
+        }
+
+        public IDbCommand CreateCommand()
+        {
+            return new Log4NetCommand();
+        }
+
+        public void Open()
+        {
+            open = true;
+        }
+
+        public static Log4NetConnection MostRecentInstance
+        {
+            get { return mostRecentInstance; }
+        }
+
+        #endregion
+
+        #region Not Implemented
+
+        public IDbTransaction BeginTransaction(IsolationLevel il)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void ChangeDatabase(string databaseName)
+        {
+            throw new NotImplementedException();
+        }
+
+        public int ConnectionTimeout
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public string Database
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public void Dispose()
+        {
+            throw new NotImplementedException();
+        }
+
+        #endregion
+    }
+}

Added: logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameter.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameter.cs?rev=607749&view=auto
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameter.cs (added)
+++ logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameter.cs Mon Dec 31 08:25:45 2007
@@ -0,0 +1,82 @@
+using System;
+using System.Data;
+
+namespace log4net.Tests.Appender.AdoNet
+{
+    public class Log4NetParameter : IDbDataParameter
+    {
+        #region AdoNetAppender
+
+        private string parameterName;
+        private byte precision;
+        private byte scale;
+        private int size;
+        private DbType dbType;
+        private object value;
+
+        public string ParameterName
+        {
+            get { return parameterName; }
+            set { parameterName = value; }
+        }
+
+        public byte Precision
+        {
+            get { return precision; }
+            set { precision = value; }
+        }
+
+        public byte Scale
+        {
+            get { return scale; }
+            set { scale = value; }
+        }
+
+        public int Size
+        {
+            get { return size; }
+            set { size = value; }
+        }
+
+        public DbType DbType
+        {
+            get { return dbType; }
+            set { dbType = value; }
+        }
+
+        public object Value
+        {
+            get { return value; }
+            set { this.value = value; }
+        }
+
+        #endregion
+
+        #region Not Implemented
+
+        public ParameterDirection Direction
+        {
+            get { throw new NotImplementedException(); }
+            set { throw new NotImplementedException(); }
+        }
+
+        public bool IsNullable
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public string SourceColumn
+        {
+            get { throw new NotImplementedException(); }
+            set { throw new NotImplementedException(); }
+        }
+
+        public DataRowVersion SourceVersion
+        {
+            get { throw new NotImplementedException(); }
+            set { throw new NotImplementedException(); }
+        }
+
+        #endregion
+    }
+}

Added: logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameterCollection.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameterCollection.cs?rev=607749&view=auto
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameterCollection.cs (added)
+++ logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetParameterCollection.cs Mon Dec 31 08:25:45 2007
@@ -0,0 +1,48 @@
+using System;
+using System.Collections;
+using System.Data;
+
+namespace log4net.Tests.Appender.AdoNet
+{
+    public class Log4NetParameterCollection : CollectionBase, IDataParameterCollection
+    {
+        #region AdoNetAppender
+
+        private readonly Hashtable parameterNameToIndex = new Hashtable();
+
+        protected override void OnInsertComplete(int index, object value)
+        {
+            base.OnInsertComplete(index, value);
+
+            IDataParameter param = (IDataParameter)value;
+            parameterNameToIndex[param.ParameterName] = index;
+        }
+
+        public int IndexOf(string parameterName)
+        {
+            return (int)parameterNameToIndex[parameterName];
+        }
+
+        public object this[string parameterName]
+        {
+            get { return InnerList[IndexOf(parameterName)]; }
+            set { InnerList[InnerList.IndexOf(parameterName)] = value; }
+        }
+
+        #endregion
+
+        #region Not Implemented
+
+        public void RemoveAt(string parameterName)
+        {
+            throw new NotImplementedException();
+        }
+
+        public bool Contains(string parameterName)
+        {
+            throw new NotImplementedException();
+        }
+
+        #endregion
+    }
+}

Added: logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetTransaction.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetTransaction.cs?rev=607749&view=auto
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetTransaction.cs (added)
+++ logging/log4net/trunk/tests/src/Appender/AdoNet/Log4NetTransaction.cs Mon Dec 31 08:25:45 2007
@@ -0,0 +1,41 @@
+using System;
+using System.Data;
+
+namespace log4net.Tests.Appender.AdoNet
+{
+    public class Log4NetTransaction : IDbTransaction
+    {
+        #region AdoNetAppender
+
+        public void Commit()
+        {
+            // empty
+        }
+
+        public void Rollback()
+        {
+            // empty
+        }
+
+        #endregion
+
+        #region Not Implemented
+
+        public IDbConnection Connection
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public IsolationLevel IsolationLevel
+        {
+            get { throw new NotImplementedException(); }
+        }
+
+        public void Dispose()
+        {
+            throw new NotImplementedException();
+        }
+
+        #endregion
+    }
+}

Added: logging/log4net/trunk/tests/src/Appender/AdoNetAppenderTest.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/AdoNetAppenderTest.cs?rev=607749&view=auto
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/AdoNetAppenderTest.cs (added)
+++ logging/log4net/trunk/tests/src/Appender/AdoNetAppenderTest.cs Mon Dec 31 08:25:45 2007
@@ -0,0 +1,122 @@
+using System;
+using System.Data;
+using System.Xml;
+using log4net.Appender;
+using log4net.Config;
+using log4net.Core;
+using log4net.Repository;
+using log4net.Tests.Appender.AdoNet;
+using NUnit.Framework;
+
+namespace log4net.Tests.Appender
+{
+    [TestFixture]
+    public class AdoNetAppenderTest
+    {
+        [Test]
+        public void NoBufferingTest()
+        {
+            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
+
+            AdoNetAppender adoNetAppender = new AdoNetAppender();
+            adoNetAppender.BufferSize = -1;
+            adoNetAppender.ConnectionType = "log4net.Tests.Appender.AdoNet.Log4NetConnection";
+            adoNetAppender.ActivateOptions();
+
+            BasicConfigurator.Configure(rep, adoNetAppender);
+
+            ILog log = LogManager.GetLogger(rep.Name, "NoBufferingTest");
+            log.Debug("Message");
+            Assert.AreEqual(1, Log4NetCommand.MostRecentInstance.ExecuteNonQueryCount);
+        }
+
+        [Test]
+        public void WebsiteExample()
+        {
+            XmlDocument log4netConfig = new XmlDocument();
+            #region Load log4netConfig
+            log4netConfig.LoadXml(@"
+                <log4net>
+                <appender name=""AdoNetAppender"" type=""log4net.Appender.AdoNetAppender"">
+                    <bufferSize value=""-1"" />
+                    <connectionType value=""log4net.Tests.Appender.AdoNet.Log4NetConnection"" />
+                    <connectionString value=""data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]"" />
+                    <commandText value=""INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"" />
+                    <parameter>
+                        <parameterName value=""@log_date"" />
+                        <dbType value=""DateTime"" />
+                        <layout type=""log4net.Layout.RawTimeStampLayout"" />
+                    </parameter>
+                    <parameter>
+                        <parameterName value=""@thread"" />
+                        <dbType value=""String"" />
+                        <size value=""255"" />
+                        <layout type=""log4net.Layout.PatternLayout"">
+                            <conversionPattern value=""%thread"" />
+                        </layout>
+                    </parameter>
+                    <parameter>
+                        <parameterName value=""@log_level"" />
+                        <dbType value=""String"" />
+                        <size value=""50"" />
+                        <layout type=""log4net.Layout.PatternLayout"">
+                            <conversionPattern value=""%level"" />
+                        </layout>
+                    </parameter>
+                    <parameter>
+                        <parameterName value=""@logger"" />
+                        <dbType value=""String"" />
+                        <size value=""255"" />
+                        <layout type=""log4net.Layout.PatternLayout"">
+                            <conversionPattern value=""%logger"" />
+                        </layout>
+                    </parameter>
+                    <parameter>
+                        <parameterName value=""@message"" />
+                        <dbType value=""String"" />
+                        <size value=""4000"" />
+                        <layout type=""log4net.Layout.PatternLayout"">
+                            <conversionPattern value=""%message"" />
+                        </layout>
+                    </parameter>
+                    <parameter>
+                        <parameterName value=""@exception"" />
+                        <dbType value=""String"" />
+                        <size value=""2000"" />
+                        <layout type=""log4net.Layout.ExceptionLayout"" />
+                    </parameter>
+                </appender>
+                <root>
+                    <level value=""ALL"" />
+                    <appender-ref ref=""AdoNetAppender"" />
+                  </root>  
+                </log4net>");
+            #endregion
+
+            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
+            XmlConfigurator.Configure(rep, log4netConfig["log4net"]);
+            ILog log = LogManager.GetLogger(rep.Name, "WebsiteExample");
+            log.Debug("Message");
+
+            IDbCommand command = Log4NetCommand.MostRecentInstance;
+            
+            Assert.AreEqual(
+                "INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)",
+                command.CommandText);
+            
+            Assert.AreEqual(6, command.Parameters.Count);
+
+            IDbDataParameter param = (IDbDataParameter)command.Parameters["@message"];
+            Assert.AreEqual("Message", param.Value);
+
+            param = (IDbDataParameter)command.Parameters["@log_level"];
+            Assert.AreEqual(Level.Debug.ToString(), param.Value);
+
+            param = (IDbDataParameter)command.Parameters["@logger"];
+            Assert.AreEqual("WebsiteExample", param.Value);
+
+            param = (IDbDataParameter)command.Parameters["@exception"];
+            Assert.IsEmpty((string)param.Value);
+        }
+    }
+}

Modified: logging/log4net/trunk/tests/src/log4net.Tests.vs2005.csproj
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/log4net.Tests.vs2005.csproj?rev=607749&r1=607748&r2=607749&view=diff
==============================================================================
--- logging/log4net/trunk/tests/src/log4net.Tests.vs2005.csproj (original)
+++ logging/log4net/trunk/tests/src/log4net.Tests.vs2005.csproj Mon Dec 31 08:25:45 2007
@@ -74,6 +74,7 @@
     <Reference Include="System">
       <Name>System</Name>
     </Reference>
+    <Reference Include="System.configuration" />
     <Reference Include="System.Data">
       <Name>System.Data</Name>
     </Reference>
@@ -89,6 +90,12 @@
       <Link>AssemblyVersionInfo.cs</Link>
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Appender\AdoNetAppenderTest.cs" />
+    <Compile Include="Appender\AdoNet\Log4NetCommand.cs" />
+    <Compile Include="Appender\AdoNet\Log4NetConnection.cs" />
+    <Compile Include="Appender\AdoNet\Log4NetParameter.cs" />
+    <Compile Include="Appender\AdoNet\Log4NetParameterCollection.cs" />
+    <Compile Include="Appender\AdoNet\Log4NetTransaction.cs" />
     <Compile Include="Appender\BufferingAppenderTest.cs">
       <SubType>Code</SubType>
     </Compile>