Added method to test if LocalMutex LockStrategy actually perform lock
Project: http://git-wip-us.apache.org/repos/asf/logging-log4net/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4net/commit/8fccdd34 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4net/tree/8fccdd34 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4net/diff/8fccdd34 Branch: refs/heads/feature/rfa-configurable-rolling-mutex Commit: 8fccdd3492a965ed49e09d8c95ceb683b0a64377 Parents: 1782679 Author: Andrei Stryia <andrei_str...@epam.com> Authored: Mon Oct 1 16:20:58 2018 +0300 Committer: Andrei Stryia <andrei_str...@epam.com> Committed: Mon Oct 1 16:20:58 2018 +0300 ---------------------------------------------------------------------- tests/src/Appender/RollingFileAppenderTest.cs | 29 +++++++--------------- 1 file changed, 9 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/8fccdd34/tests/src/Appender/RollingFileAppenderTest.cs ---------------------------------------------------------------------- diff --git a/tests/src/Appender/RollingFileAppenderTest.cs b/tests/src/Appender/RollingFileAppenderTest.cs index b9c2ed0..e3cf04d 100644 --- a/tests/src/Appender/RollingFileAppenderTest.cs +++ b/tests/src/Appender/RollingFileAppenderTest.cs @@ -33,7 +33,6 @@ using log4net.Util; using NUnit.Framework; using System.Globalization; using System.Threading; -using System.Threading.Tasks; namespace log4net.Tests.Appender { @@ -1787,28 +1786,30 @@ namespace log4net.Tests.Appender [Test] public void TestRollingLockStrategyLocalMutex() { - String filename = c_fileName; + String filename = "test_lock.log"; SilentErrorHandler sh = new SilentErrorHandler(); - ILogger log = CreateLogger(filename, new FileAppender.MinimalLock(), sh, maxFileSize: 1, maxSizeRollBackups: 2, rollingLockStrategy: RollingFileAppender.RollingLockStrategyKind.LocalMutex); - RollingFileAppender appender = (RollingFileAppender) log.Repository.GetAppenders()[0]; - Mutex syncObject = null; try { + ILogger log = CreateLogger(filename, new FileAppender.MinimalLock(), sh, maxFileSize: 1, maxSizeRollBackups: 2, rollingLockStrategy: RollingFileAppender.RollingLockStrategyKind.LocalMutex); + RollingFileAppender appender = (RollingFileAppender)log.Repository.GetAppenders()[0]; + syncObject = new Mutex(false, appender.File.Replace("\\", "_").Replace(":", "_").Replace("/", "_")); syncObject.WaitOne(); // Logger should acquire Mutex in different thread - var write1 = Task.Factory.StartNew(()=> Assert.DoesNotThrow(delegate { log.Log(GetType(), Level.Info, "1", null); })); + var loggerThread = new Thread(o => Assert.DoesNotThrow(delegate { log.Log(GetType(), Level.Info, "1", null); })); + loggerThread.Start(); // Wait some time - WaitForStart(write1); + Thread.Sleep(2000); // Since Mutex already locked, log file should be empty AssertFileEquals(filename, string.Empty, cleanup: false); syncObject.ReleaseMutex(); - write1.Wait(); + + loggerThread.Join(1000); DestroyLogger(); AssertFileEquals(filename, "1" + Environment.NewLine); @@ -1817,20 +1818,8 @@ namespace log4net.Tests.Appender finally { if (syncObject != null) - { syncObject.Dispose(); - } - - } - } - private void WaitForStart(Task write1) - { - while (write1.Status != TaskStatus.Running) - { - Thread.Sleep(100); } - - Thread.Sleep(800); } #endif