2007-09-14 Jb Evain <jbevain@novell.com>
[mono.git] / mcs / class / corlib / Test / System.Threading / TimerTest.cs
index e40f3f2d4603939eedb38821c089574ed90feb9b..2be2ec76bbb90627951af08199623f6f41bc41d4 100644 (file)
@@ -106,14 +106,16 @@ namespace MonoTests.System.Threading {
                
                [Test]
                public void TestHeavyCreationLoad() {
-                       int i = 0;
                        Bucket b = new Bucket();
-                       while (i < 500) {
+                       for (int i = 0; i < 500; ++i)
                                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);
+                       // we add some slack to cope with timing issues caused by system load etc.
+                       for (int i = 0; i < 20; ++i) {
+                               if (b.count == 500)
+                                       break;
+                               Thread.Sleep(1000);
+                       }
                        Assert.AreEqual(500,b.count);
                        
                }
@@ -171,9 +173,11 @@ namespace MonoTests.System.Threading {
                [Test]
                public void TestDelayZeroPeriodZero() {
                        Bucket b = new Bucket();
-                       new Timer(new TimerCallback(Callback),b,0,0);
-                       Thread.Sleep(50);
-                       Assert.IsTrue(b.count > 45);
+                       Timer t = new Timer(new TimerCallback(Callback),b,0,0);
+                       Thread.Sleep(100);
+                       t.Change (int.MaxValue, Timeout.Infinite);
+                       // since period is 0 the callback should happen once (bug #340212)
+                       Assert.IsTrue(b.count == 1);
                        
                }