instrumentation: add next-share/
[cs-p2p-next.git] / instrumentation / next-share / BaseLib / Test / test_threadpool.py
1 # Written by Arno Bakker\r
2 # see LICENSE.txt for license information\r
3 \r
4 import unittest\r
5 \r
6 import sys\r
7 import time\r
8 from traceback import print_exc\r
9 from threading import RLock\r
10 \r
11 from BaseLib.Core.APIImplementation.ThreadPool import ThreadPool\r
12 \r
13 \r
14 DEBUG=False\r
15 \r
16 class TestThreadPool(unittest.TestCase):\r
17     """ \r
18     Parent class for testing internal thread pool of Tribler\r
19     """\r
20     \r
21     def setUp(self):\r
22         """ unittest test setup code """\r
23         self.tp = ThreadPool(10)\r
24         self.exp = []\r
25         self.gotlock = RLock()\r
26         self.got = []\r
27 \r
28     def tearDown(self):\r
29         """ unittest test tear down code """\r
30         time.sleep(2)\r
31         self.got.sort()\r
32         self.assertEquals(self.exp,self.got)\r
33     \r
34     def test_queueTask1(self):\r
35         print >>sys.stderr,"test_queueTask1:"\r
36         self.exp = [1]\r
37         self.tp.queueTask(lambda:self.do_task(1))\r
38         \r
39     def do_task(self,val):\r
40         self.gotlock.acquire()\r
41         print >>sys.stderr,"test: got task",val\r
42         self.got.append(val)\r
43         self.gotlock.release()\r
44         \r
45     def test_queueTask10lambda(self):\r
46         print >>sys.stderr,"test_queueTask10lambda:"\r
47         self.exp = range(1,11)\r
48         def wrapper(x):\r
49             self.tp.queueTask(lambda:self.do_task(x))\r
50                           \r
51         for i in range(1,11):\r
52             print >>sys.stderr,"test: exp task",i\r
53             wrapper(i)\r
54 \r
55     #\r
56     # Confusing lambda crap, do explicit:\r
57     #\r
58     def test_queueTask10explicit(self):\r
59         print >>sys.stderr,"test_queueTask10explicit:"\r
60         self.exp = range(1,11)\r
61         self.tp.queueTask(self.do_task1)\r
62         self.tp.queueTask(self.do_task2)\r
63         self.tp.queueTask(self.do_task3)\r
64         self.tp.queueTask(self.do_task4)\r
65         self.tp.queueTask(self.do_task5)\r
66         self.tp.queueTask(self.do_task6)\r
67         self.tp.queueTask(self.do_task7)\r
68         self.tp.queueTask(self.do_task8)\r
69         self.tp.queueTask(self.do_task9)\r
70         self.tp.queueTask(self.do_task10)\r
71 \r
72 \r
73     def test_joinAll(self):\r
74         print >>sys.stderr,"test_joinall:"\r
75         self.exp = range(1,6)\r
76         print >>sys.stderr,"test: adding tasks"\r
77         self.tp.queueTask(self.do_task1)\r
78         self.tp.queueTask(self.do_task2)\r
79         self.tp.queueTask(self.do_task3)\r
80         self.tp.queueTask(self.do_task4)\r
81         self.tp.queueTask(self.do_task5)\r
82         print >>sys.stderr,"test: join all"\r
83         self.tp.joinAll()\r
84         print >>sys.stderr,"test: adding post tasks, shouldn't get run"\r
85         self.tp.queueTask(self.do_task6)\r
86         self.tp.queueTask(self.do_task7)\r
87         self.tp.queueTask(self.do_task8)\r
88         self.tp.queueTask(self.do_task9)\r
89         self.tp.queueTask(self.do_task10)\r
90 \r
91     def test_setThreadCountPlus10(self):\r
92         print >>sys.stderr,"test_setThreadCountPlus10:"\r
93         print >>sys.stderr,"test: pre threads",self.tp.getThreadCount()\r
94         self.tp.setThreadCount(20)\r
95         print >>sys.stderr,"test: post threads",self.tp.getThreadCount()\r
96         time.sleep(1)\r
97         self.test_joinAll()\r
98 \r
99     def test_setThreadCountMinus8(self):\r
100         print >>sys.stderr,"test_setThreadCountMinus8:"\r
101         print >>sys.stderr,"test: pre threads",self.tp.getThreadCount()\r
102         self.tp.setThreadCount(2)\r
103         print >>sys.stderr,"test: post threads",self.tp.getThreadCount()\r
104         time.sleep(1)\r
105         self.test_joinAll()\r
106 \r
107 \r
108     def do_task1(self):\r
109         self.gotlock.acquire()\r
110         self.got.append(1)\r
111         self.gotlock.release()\r
112 \r
113     def do_task2(self):\r
114         self.gotlock.acquire()\r
115         self.got.append(2)\r
116         self.gotlock.release()\r
117 \r
118     def do_task3(self):\r
119         self.gotlock.acquire()\r
120         self.got.append(3)\r
121         self.gotlock.release()\r
122 \r
123     def do_task4(self):\r
124         self.gotlock.acquire()\r
125         self.got.append(4)\r
126         self.gotlock.release()\r
127 \r
128     def do_task5(self):\r
129         self.gotlock.acquire()\r
130         self.got.append(5)\r
131         self.gotlock.release()\r
132 \r
133     def do_task6(self):\r
134         self.gotlock.acquire()\r
135         self.got.append(6)\r
136         self.gotlock.release()\r
137 \r
138     def do_task7(self):\r
139         self.gotlock.acquire()\r
140         self.got.append(7)\r
141         self.gotlock.release()\r
142 \r
143     def do_task8(self):\r
144         self.gotlock.acquire()\r
145         self.got.append(8)\r
146         self.gotlock.release()\r
147 \r
148     def do_task9(self):\r
149         self.gotlock.acquire()\r
150         self.got.append(9)\r
151         self.gotlock.release()\r
152 \r
153     def do_task10(self):\r
154         self.gotlock.acquire()\r
155         self.got.append(10)\r
156         self.gotlock.release()\r
157 \r
158 \r
159 \r
160 \r
161 \r
162 \r
163 \r
164 \r
165 def test_suite():\r
166     suite = unittest.TestSuite()\r
167     suite.addTest(unittest.makeSuite(TestThreadPool))\r
168     \r
169     return suite\r
170 \r
171 if __name__ == "__main__":\r
172     unittest.main()\r
173 \r