From: <fab...@us...> - 2008-08-16 06:10:27
|
Revision: 3709 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3709&view=rev Author: fabiomaulo Date: 2008-08-16 06:10:38 +0000 (Sat, 16 Aug 2008) Log Message: ----------- Test for NH-1251 (bug recreated) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/MultiThreadRunner.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/MultiThreadRunner.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MultiThreadRunner.cs 2008-08-16 05:03:56 UTC (rev 3708) +++ trunk/nhibernate/src/NHibernate.Test/MultiThreadRunner.cs 2008-08-16 06:10:38 UTC (rev 3709) @@ -11,6 +11,7 @@ private readonly Random rnd = new Random(); private bool running; private int timeout = 1000; + private int timeoutBetweenThreadStart = 30; public MultiThreadRunner(int numThreads, ExecuteAction[] actions) { @@ -37,6 +38,12 @@ set { timeout = value; } } + public int TimeoutBetweenThreadStart + { + get { return timeoutBetweenThreadStart; } + set { timeoutBetweenThreadStart = value; } + } + public void Run(T subjectInstance) { running = true; @@ -47,7 +54,7 @@ t[i].Name = i.ToString(); t[i].Start(subjectInstance); if (i > 2) - Thread.Sleep(30); + Thread.Sleep(timeoutBetweenThreadStart); } Thread.Sleep(timeout); Modified: trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs 2008-08-16 05:03:56 UTC (rev 3708) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs 2008-08-16 06:10:38 UTC (rev 3709) @@ -1,4 +1,7 @@ using System; +using System.Threading; +using log4net; +using log4net.Repository.Hierarchy; using NHibernate.Type; using NUnit.Framework; @@ -10,6 +13,13 @@ [TestFixture] public class TypeFactoryFixture { + public TypeFactoryFixture() + { + log4net.Config.XmlConfigurator.Configure(); + } + + private static readonly ILog log = LogManager.GetLogger(typeof(TypeFactoryFixture)); + /// <summary> /// Test that calling GetGuidType multiple times returns the /// exact same GuidType object by reference. @@ -62,5 +72,44 @@ set { _genericLong = value; } } } + + private readonly Random rnd = new Random(); + private int totalCall; + + [Test, Explicit] + public void MultiThreadAccess() + { + ((Logger) log.Logger).Level = log4net.Core.Level.Debug; + MultiThreadRunner<object>.ExecuteAction[] actions = new MultiThreadRunner<object>.ExecuteAction[] + { + delegate(object o) + { + TypeFactory.GetStringType(rnd.Next(1, 50)); + totalCall++; + }, + delegate(object o) + { + TypeFactory.GetBinaryType(rnd.Next(1, 50)); + totalCall++; + }, + delegate(object o) + { + TypeFactory.GetSerializableType(rnd.Next(1, 50)); + totalCall++; + }, + delegate(object o) + { + TypeFactory.GetTypeType(rnd.Next(1, 20)); + totalCall++; + }, + }; + MultiThreadRunner<object> mtr = new MultiThreadRunner<object>(100, actions); + mtr.EndTimeout = 2000; + mtr.TimeoutBetweenThreadStart = 2; + mtr.Run(null); + log.DebugFormat("{0} calls", totalCall); + TypeFactory.GetTypeType(rnd.Next()); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |