blob: 2d0dadd4cc870cd45fad6d14da7dbe8920c4b90c [file] [log] [blame]
Christian Heimesb186d002008-03-18 15:15:01 +00001from test import test_support
2import unittest
Guido van Rossumad50ca92002-12-30 22:30:22 +00003import dummy_threading as _threading
4import time
5
Christian Heimesb186d002008-03-18 15:15:01 +00006class DummyThreadingTestCase(unittest.TestCase):
Guido van Rossumad50ca92002-12-30 22:30:22 +00007
Christian Heimesb186d002008-03-18 15:15:01 +00008 class TestThread(_threading.Thread):
Tim Petersf2715e02003-02-19 02:35:07 +00009
Christian Heimesb186d002008-03-18 15:15:01 +000010 def run(self):
11 global running
12 global sema
13 global mutex
14 # Uncomment if testing another module, such as the real 'threading'
15 # module.
16 #delay = random.random() * 2
17 delay = 0
18 if test_support.verbose:
19 print('task', self.getName(), 'will run for', delay, 'sec')
20 sema.acquire()
21 mutex.acquire()
22 running += 1
23 if test_support.verbose:
24 print(running, 'tasks are running')
25 mutex.release()
26 time.sleep(delay)
27 if test_support.verbose:
28 print('task', self.getName(), 'done')
29 mutex.acquire()
30 running -= 1
31 if test_support.verbose:
32 print(self.getName(), 'is finished.', running, 'tasks are running')
33 mutex.release()
34 sema.release()
35
36 def setUp(self):
37 self.numtasks = 10
38 global sema
39 sema = _threading.BoundedSemaphore(value=3)
40 global mutex
41 mutex = _threading.RLock()
Guido van Rossumad50ca92002-12-30 22:30:22 +000042 global running
Christian Heimesb186d002008-03-18 15:15:01 +000043 running = 0
44 self.threads = []
Guido van Rossumad50ca92002-12-30 22:30:22 +000045
Christian Heimesb186d002008-03-18 15:15:01 +000046 def test_tasks(self):
47 for i in range(self.numtasks):
48 t = self.TestThread(name="<thread %d>"%i)
49 self.threads.append(t)
50 t.start()
Guido van Rossumad50ca92002-12-30 22:30:22 +000051
Christian Heimesb186d002008-03-18 15:15:01 +000052 if test_support.verbose:
53 print('waiting for all tasks to complete')
54 for t in self.threads:
55 t.join()
56 if test_support.verbose:
57 print('all tasks done')
Guido van Rossumad50ca92002-12-30 22:30:22 +000058
59def test_main():
Christian Heimesb186d002008-03-18 15:15:01 +000060 test_support.run_unittest(DummyThreadingTestCase)
Guido van Rossumad50ca92002-12-30 22:30:22 +000061
62
63if __name__ == '__main__':
64 test_main()