Author: lupus
Date: 2007-10-16 06:01:30 -0400 (Tue, 16 Oct 2007)
New Revision: 87566

Modified:
   trunk/mcs/class/corlib/Test/System.Threading/TimerTest.cs
Log:
Timer test cases from Rafael Ferreira ([EMAIL PROTECTED]).



Modified: trunk/mcs/class/corlib/Test/System.Threading/TimerTest.cs
===================================================================
--- trunk/mcs/class/corlib/Test/System.Threading/TimerTest.cs   2007-10-16 
10:00:19 UTC (rev 87565)
+++ trunk/mcs/class/corlib/Test/System.Threading/TimerTest.cs   2007-10-16 
10:01:30 UTC (rev 87566)
@@ -3,6 +3,7 @@
 //
 // Author:
 //   Zoltan Varga ([EMAIL PROTECTED])
+//   Rafael Ferreira ([EMAIL PROTECTED])
 //
 // (C) 2004 Novell, Inc (http://www.novell.com)
 //
@@ -10,10 +11,10 @@
 using NUnit.Framework;
 using System;
 using System.Threading;
+using System.Collections;
 
 namespace MonoTests.System.Threading {
 
-       [TestFixture]
        //
        // This whole test seems to fail randomly. Either
        // - It is relying on a race it might not win (that the timer code runs)
@@ -22,111 +23,178 @@
        // Am going with door #1, but it would be nice to investigate this.
        // -- Ben
        //
-       public class TimerTest : Assertion {
+       [TestFixture]
+       public class TimerTest {
+               // this bucket is used to avoid non-theadlocal issues
+               class Bucket {
+                       public int count;
+               }
+               [SetUp]
+               public void setup() {
+                       //creating a timer that will never run just to make 
sure the
+                       // scheduler is warm for the unit tests
+                       // this makes fair for the "DueTime" test since it 
+                       // doesn't have to wait for the scheduler thread to be 
+                       // created. 
+                       new Timer(null,null,Timeout.Infinite,0);
+               }
+               
                [Test]
-               [Category ("NotWorking")]
                public void TestDueTime ()
                {
-                       counter = 0;
-                       Timer t = new Timer (new TimerCallback (Callback), 
null, 200, Timeout.Infinite);
+                       Bucket bucket = new Bucket();
+                       Timer t = new Timer (new TimerCallback (Callback), 
bucket, 200, Timeout.Infinite);
                        Thread.Sleep (50);
-                       AssertEquals ("t0", 0, counter);
+                       Assert.AreEqual (0, bucket.count);
                        Thread.Sleep (200);
-                       AssertEquals ("t1", 1, counter);
+                       Assert.AreEqual (1, bucket.count);
                        Thread.Sleep (500);
-                       AssertEquals ("t2", 1, counter);
-                       
+                       Assert.AreEqual (1, bucket.count);
                        t.Change (10, 10);
-                       Thread.Sleep (500);
-                       Assert ("t3", counter > 20);
+                       Thread.Sleep (1000);
+                       Assert.IsTrue(bucket.count > 20);
                        t.Dispose ();
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void TestChange ()
                {
-                       counter = 0;
-                       Timer t = new Timer (new TimerCallback (Callback), 
null, 1, 1);
+                       Bucket bucket = new Bucket();
+                       Timer t = new Timer (new TimerCallback (Callback), 
bucket, 1, 1);
                        Thread.Sleep (500);
-                       int c = counter;
-                       Assert ("t1", c > 20);
+                       int c = bucket.count;
+                       Assert.IsTrue(c > 20);
                        t.Change (100, 100);
                        Thread.Sleep (500);
-                       Assert ("t2", counter <= c + 6);
+                       Assert.IsTrue(bucket.count <= c + 6);
                        t.Dispose ();
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void TestZeroDueTime () {
-                       counter = 0;
+                       Bucket bucket = new Bucket();
 
-                       Timer t = new Timer (new TimerCallback (Callback), 
null, 0, Timeout.Infinite);
+                       Timer t = new Timer (new TimerCallback (Callback), 
bucket, 0, Timeout.Infinite);
                        Thread.Sleep (100);
-                       AssertEquals (1, counter);
+                       Assert.AreEqual (1, bucket.count);
                        t.Change (0, Timeout.Infinite);
                        Thread.Sleep (100);
-                       AssertEquals (2, counter);
+                       Assert.AreEqual (2, bucket.count);
                        t.Dispose ();
                }
-
                [Test]
-               [Category ("NotWorking")]
                public void TestDispose ()
-               {
-                       counter = 0;
-                       Timer t = new Timer (new TimerCallback 
(CallbackTestDispose), null, 10, 10);
+               {       
+                       Bucket bucket = new Bucket();
+                       Timer t = new Timer (new TimerCallback (Callback), 
bucket, 10, 10);
                        Thread.Sleep (200);
                        t.Dispose ();
                        Thread.Sleep (20);
-                       int c = counter;
-                       Assert (counter > 5);
+                       int c = bucket.count;
+                       Assert.IsTrue(bucket.count > 5);
                        Thread.Sleep (200);
-                       AssertEquals (c, counter);
+                       Assert.AreEqual (c, bucket.count);
                }
 
                [Test] // bug #78208
                public void TestDispose2 ()
                {
-                       Timer t = new Timer (new TimerCallback 
(CallbackTestDispose), null, 10, 10);
+                       Timer t = new Timer (new TimerCallback (Callback), 
null, 10, 10);
                        t.Dispose ();
                        t.Dispose ();
                }
                
                [Test]
-               [Category ("NotWorking")]
+               public void TestHeavyCreationLoad() {
+                       int i = 0;
+                       Bucket b = new Bucket();
+                       while (i < 500) {
+                               new Timer(new 
TimerCallback(Callback),b,10,Timeout.Infinite);
+                               i++;
+                       }
+                       // 1000 * 10 msec = 10,000 msec or 10 sec - if 
everything goes well
+                       Thread.Sleep(12*500);
+                       Assert.AreEqual(500,b.count);
+                       
+               }
+               [Test]
+               public void TestQuickDisposeDeadlockBug() {
+                       int i = 0;
+                       Bucket b = new Bucket();
+                       ArrayList timers = new ArrayList();
+                       while (i < 500) {
+                               Timer t = new Timer(new 
TimerCallback(Callback),b,10,Timeout.Infinite);
+                               timers.Add(t);
+                               i++;
+                               t.Dispose();
+                       }
+                       Thread.Sleep(11*500);
+               }
+               [Test]
+               public void TestInt32MaxDelay() {
+                       Bucket b = new Bucket();
+                       new Timer(new 
TimerCallback(Callback),b,Int32.MaxValue,Timeout.Infinite);
+                       Thread.Sleep(50);
+                       Assert.AreEqual(0,b.count);
+                       
+               }
+               [Test]
+               public void TestInt32MaxPeriod() {
+                       Bucket b = new Bucket();
+                       new Timer(new 
TimerCallback(Callback),b,0,Int32.MaxValue);
+                       Thread.Sleep(50);
+                       Assert.AreEqual(1,b.count);
+                       
+               }
+               [Test]
+               public void TestNegativeDelay() {
+                       Bucket b = new Bucket();
+                       try {
+                               new Timer(new 
TimerCallback(Callback),b,-10,Timeout.Infinite);
+                       } catch (ArgumentOutOfRangeException) {
+                               return;
+                       }
+                       Assert.Fail();
+                       
+               }
+               [Test]
+               public void TestNegativePeriod() {
+                       Bucket b = new Bucket();
+                       try {
+                               new Timer(new TimerCallback(Callback),b,0,-10);
+                       } catch (ArgumentOutOfRangeException) {
+                               return;
+                       }
+                       Assert.Fail();
+               }
+
+               [Test]
+               public void TestDelayZeroPeriodZero() {
+                       Bucket b = new Bucket();
+                       new Timer(new TimerCallback(Callback),b,0,0);
+                       Thread.Sleep(50);
+                       Assert.IsTrue(b.count > 45);
+                       
+               }
+
+               [Category("NotWorking")]
                public void TestDisposeOnCallback () {
-                       counter = 0;
-                       t1 = new Timer (new TimerCallback 
(CallbackTestDisposeOnCallback), null, 0, 10);
+               
+                       Timer t1 = null;
+                       t1 = new Timer (new TimerCallback 
(CallbackTestDisposeOnCallback), t1, 0, 10);
                        Thread.Sleep (200);
-                       AssertNull (t1);
+                       Assert.IsNull(t1);
                        
-                       counter = 2;
-                       t1 = new Timer (new TimerCallback 
(CallbackTestDisposeOnCallback), null, 50, 0);
-                       Thread.Sleep (200);
-                       AssertNull (t1);
                }
-               
                private void CallbackTestDisposeOnCallback (object foo)
                {
-                       if (++counter == 3) {
-                               t1.Dispose ();
-                               t1 = null;
-                       }
+                       ((Timer)foo).Dispose();
                }
-
-               private void CallbackTestDispose (object foo)
-               {
-                       counter++;
-               }
-
+               
                private void Callback (object foo)
                {
-                       counter++;
+                       Bucket b = foo as Bucket;
+                       b.count++;
                }
-
-               Timer t1;
-               int counter;
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to