Removed untyped contructor from ComponentRegistration and add a protected setter.
[castle.git] / InversionOfControl / Castle.MicroKernel.Tests / Pools / MultithreadedPooledTestCase.cs
blobe3b5b624083cd9527c8754a7620bc233e7d513f8
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle.MicroKernel.Tests.Pools
17 using System.Threading;
18 using NUnit.Framework;
20 [TestFixture]
21 public class MultithreadedPooledTestCase
23 private ManualResetEvent _startEvent = new ManualResetEvent(false);
24 private ManualResetEvent _stopEvent = new ManualResetEvent(false);
25 private IKernel _kernel;
27 [Test]
28 public void Multithreaded()
30 _kernel = new DefaultKernel();
31 _kernel.AddComponent("a", typeof(PoolableComponent1));
33 const int threadCount = 15;
35 Thread[] threads = new Thread[threadCount];
37 for(int i = 0; i < threadCount; i++)
39 threads[i] = new Thread(new ThreadStart(ExecuteMethodUntilSignal));
40 threads[i].Start();
43 _startEvent.Set();
45 Thread.CurrentThread.Join(3 * 1000);
47 _stopEvent.Set();
50 public void ExecuteMethodUntilSignal()
52 _startEvent.WaitOne(int.MaxValue, false);
54 while(!_stopEvent.WaitOne(1, false))
56 PoolableComponent1 instance = _kernel["a"] as PoolableComponent1;
58 Assert.IsNotNull(instance);
60 Thread.Sleep(1 * 500);
62 _kernel.ReleaseComponent(instance);