OLD | NEW |
| (Empty) |
1 # -*- test-case-name: buildbot.test.test_persistent_queue -*- | |
2 | |
3 import os | |
4 import shutil | |
5 from twisted.trial import unittest | |
6 | |
7 from buildbot.status.persistent_queue import DequeMemoryQueue, DiskQueue, \ | |
8 IQueue, ListMemoryQueue, MemoryQueue, PersistentQueue, WriteFile | |
9 | |
10 class test_Queues(unittest.TestCase): | |
11 def setUp(self): | |
12 if os.path.isdir('fake_dir'): | |
13 shutil.rmtree('fake_dir') | |
14 | |
15 def tearDown(self): | |
16 if os.path.isdir('fake_dir'): | |
17 self.assertEqual([], os.listdir('fake_dir')) | |
18 | |
19 def testQueued(self): | |
20 # Verify behavior when starting up with queued items on disk. | |
21 os.mkdir('fake_dir') | |
22 WriteFile(os.path.join('fake_dir', '3'), 'foo3') | |
23 WriteFile(os.path.join('fake_dir', '5'), 'foo5') | |
24 WriteFile(os.path.join('fake_dir', '8'), 'foo8') | |
25 queue = PersistentQueue(MemoryQueue(3), | |
26 DiskQueue('fake_dir', 5, pickleFn=str, unpickleFn=str)) | |
27 self.assertEqual(['foo3', 'foo5', 'foo8'], queue.items()) | |
28 self.assertEqual(3, queue.nbItems()) | |
29 self.assertEqual(['foo3', 'foo5', 'foo8'], queue.popChunk()) | |
30 | |
31 def _test_helper(self, q): | |
32 self.assertTrue(IQueue.providedBy(q)) | |
33 self.assertEqual(8, q.maxItems()) | |
34 self.assertEqual(0, q.nbItems()) | |
35 self.assertEqual([], q.items()) | |
36 | |
37 for i in range(4): | |
38 self.assertEqual(None, q.pushItem(i), str(i)) | |
39 self.assertEqual(i + 1, q.nbItems(), str(i)) | |
40 self.assertEqual([0, 1, 2, 3], q.items()) | |
41 self.assertEqual(4, q.nbItems()) | |
42 if isinstance(q, PersistentQueue): | |
43 self.assertEqual([0, 1, 2], q.primaryQueue.items()) | |
44 self.assertEqual([3], q.secondaryQueue.items()) | |
45 | |
46 self.assertEqual(None, q.save()) | |
47 self.assertEqual([0, 1, 2, 3], q.items()) | |
48 self.assertEqual(4, q.nbItems()) | |
49 if isinstance(q, PersistentQueue): | |
50 self.assertEqual([], q.primaryQueue.items()) | |
51 self.assertEqual([0, 1, 2, 3], q.secondaryQueue.items()) | |
52 | |
53 for i in range(4): | |
54 self.assertEqual(None, q.pushItem(i + 4), str(i + 4)) | |
55 self.assertEqual(i + 5, q.nbItems(), str(i + 4)) | |
56 self.assertEqual([0, 1, 2, 3, 4, 5, 6, 7], q.items()) | |
57 self.assertEqual(8, q.nbItems()) | |
58 if isinstance(q, PersistentQueue): | |
59 self.assertEqual([0, 1, 2], q.primaryQueue.items()) | |
60 self.assertEqual([3, 4, 5, 6, 7], q.secondaryQueue.items()) | |
61 | |
62 self.assertEqual(0, q.pushItem(8)) | |
63 self.assertEqual(8, q.nbItems()) | |
64 self.assertEqual([1, 2, 3, 4, 5, 6, 7, 8], q.items()) | |
65 if isinstance(q, PersistentQueue): | |
66 self.assertEqual([1, 2, 3], q.primaryQueue.items()) | |
67 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
68 | |
69 self.assertEqual([1, 2], q.popChunk(2)) | |
70 self.assertEqual([3, 4, 5, 6, 7, 8], q.items()) | |
71 self.assertEqual(6, q.nbItems()) | |
72 if isinstance(q, PersistentQueue): | |
73 self.assertEqual([3], q.primaryQueue.items()) | |
74 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
75 | |
76 self.assertEqual([3], q.popChunk(1)) | |
77 self.assertEqual([4, 5, 6, 7, 8], q.items()) | |
78 self.assertEqual(5, q.nbItems()) | |
79 if isinstance(q, PersistentQueue): | |
80 self.assertEqual([], q.primaryQueue.items()) | |
81 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
82 | |
83 self.assertEqual(None, q.save()) | |
84 self.assertEqual(5, q.nbItems()) | |
85 self.assertEqual([4, 5, 6, 7, 8], q.items()) | |
86 if isinstance(q, PersistentQueue): | |
87 self.assertEqual([], q.primaryQueue.items()) | |
88 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
89 | |
90 self.assertEqual(None, q.insertBackChunk([2, 3])) | |
91 self.assertEqual([2, 3, 4, 5, 6, 7, 8], q.items()) | |
92 self.assertEqual(7, q.nbItems()) | |
93 if isinstance(q, PersistentQueue): | |
94 self.assertEqual([2, 3], q.primaryQueue.items()) | |
95 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
96 | |
97 self.assertEqual([0], q.insertBackChunk([0, 1])) | |
98 self.assertEqual([1, 2, 3, 4, 5, 6, 7, 8], q.items()) | |
99 self.assertEqual(8, q.nbItems()) | |
100 if isinstance(q, PersistentQueue): | |
101 self.assertEqual([1, 2, 3], q.primaryQueue.items()) | |
102 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
103 | |
104 self.assertEqual([10, 11], q.insertBackChunk([10, 11])) | |
105 self.assertEqual([1, 2, 3, 4, 5, 6, 7, 8], q.items()) | |
106 self.assertEqual(8, q.nbItems()) | |
107 if isinstance(q, PersistentQueue): | |
108 self.assertEqual([1, 2, 3], q.primaryQueue.items()) | |
109 self.assertEqual([4, 5, 6, 7, 8], q.secondaryQueue.items()) | |
110 | |
111 self.assertEqual([1, 2, 3, 4, 5, 6, 7, 8], q.popChunk(8)) | |
112 self.assertEqual([], q.items()) | |
113 self.assertEqual(0, q.nbItems()) | |
114 if isinstance(q, PersistentQueue): | |
115 self.assertEqual([], q.primaryQueue.items()) | |
116 self.assertEqual([], q.secondaryQueue.items()) | |
117 | |
118 self.assertEqual([], q.popChunk()) | |
119 self.assertEqual(0, q.nbItems()) | |
120 if isinstance(q, PersistentQueue): | |
121 self.assertEqual([], q.primaryQueue.items()) | |
122 self.assertEqual([], q.secondaryQueue.items()) | |
123 | |
124 def testListMemoryQueue(self): | |
125 self._test_helper(ListMemoryQueue(maxItems=8)) | |
126 | |
127 def testDequeMemoryQueue(self): | |
128 # Will fail on python 2.3. | |
129 self._test_helper(DequeMemoryQueue(maxItems=8)) | |
130 | |
131 def testDiskQueue(self): | |
132 self._test_helper(DiskQueue('fake_dir', maxItems=8)) | |
133 | |
134 def testPersistentQueue(self): | |
135 self._test_helper(PersistentQueue(MemoryQueue(3), | |
136 DiskQueue('fake_dir', 5))) | |
137 | |
138 # vim: set ts=4 sts=4 sw=4 et: | |
OLD | NEW |