Skip to content
This repository was archived by the owner on Jan 10, 2019. It is now read-only.

Commit d7d991f

Browse files
committed
Basic script for testing interoperability
The start of testing compatibility of thoonk.py and thoonk.js
1 parent bcc3261 commit d7d991f

File tree

2 files changed

+301
-0
lines changed

2 files changed

+301
-0
lines changed

interop

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
Thoonk Interop Testing Script
2+
=============================
3+
4+
Thoonk is intended to be language agnostic, allowing for
5+
an ecosystem of various systems communicating over a set
6+
of common pubsub channels. Ensuring that multiple Thoonk
7+
implementations work together is paramount for that goal.
8+
9+
Feeds:
10+
-- Using interop-test-feed
11+
A: Publish item
12+
-- 'test item', id '1'
13+
B: Check item
14+
A: Edit item
15+
-- 'edited item', id '1'
16+
B: Check item
17+
A: Retract item
18+
-- id '1'
19+
B: Check items
20+
A: Set config to max_length 5
21+
Publish 5 items
22+
-- 'item-1', id '1'
23+
-- 'item-2', id '2'
24+
-- 'item-3', id '3'
25+
-- 'item-4', id '4'
26+
-- 'item-5', id '5'
27+
B: Check for 5 items
28+
A: Publish item
29+
-- 'item-6', id '6'
30+
B: Check for 5 items
31+
A: Edit item
32+
-- 'edited item-4', id '4'
33+
B: Check for 4 items (item dropped)
34+
35+
36+
Lists:
37+
38+
A: Publish 5 items
39+
B: Check items
40+
Publish event
41+
A: Publish item to before #3
42+
B: Check items
43+
A: Publish item to after #3
44+
B: Check items
45+
A: Retract item
46+
B: Check items
47+
Retract event
48+
49+
50+
Queues:
51+
52+
A: Publish 5 items
53+
B: Pull 2 items, check order
54+
Publish events
55+
Retract 1 item
56+
A: Pull 2 items, check order
57+
58+
59+
Jobs:
60+
61+
A: Publish 4 jobs
62+
B: Pull job
63+
Finish job 1
64+
A: Get results for job 1
65+
B: Pull job
66+
Cancel job 2
67+
Pull job
68+
Check job 2
69+
Retract job 2
70+
A: Stall job 3
71+
B: Pull job
72+
Check job 4
73+
Finish job 4
74+
A: Retry job 3
75+
B: Pull job
76+
Check job 3
77+
Finish job 3

test_interop.py

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
import sys
2+
import thoonk
3+
import time
4+
import unittest
5+
from optparse import OptionParser
6+
7+
8+
CONFIG = {}
9+
10+
11+
class TestInteropDriver(unittest.TestCase):
12+
13+
"""
14+
"""
15+
16+
def setUp(self):
17+
self.thoonk = thoonk.Thoonk(CONFIG['host'], CONFIG['port'], CONFIG['db'])
18+
self.driver_queue= self.thoonk.queue('interop-testing-driver')
19+
self.follower_queue = self.thoonk.queue('interop-testing-follower')
20+
21+
def wait(self):
22+
self.driver_queue.get()
23+
24+
def proceed(self):
25+
self.follower_queue.put('token')
26+
27+
def test_10_feeds(self):
28+
"""Test interop for Feeds -- 1"""
29+
feed = self.thoonk.feed('interop-test-feed')
30+
feed.publish('test item', id='1')
31+
self.proceed()
32+
33+
def test_11_feeds(self):
34+
"""Test interop for Feeds -- 2"""
35+
feed = self.thoonk.feed('interop-test-feed')
36+
self.wait()
37+
feed.publish('edited item', id='1')
38+
self.proceed()
39+
40+
def test_12_feeds(self):
41+
"""Test interop for Feeds -- 3"""
42+
feed = self.thoonk.feed('interop-test-feed')
43+
self.wait()
44+
feed.retract('1')
45+
self.proceed()
46+
47+
def test_13_feeds(self):
48+
"""Test interop for Feeds -- 4"""
49+
feed = self.thoonk.feed('interop-test-feed')
50+
feed.config = {'max_length': 5}
51+
self.wait()
52+
feed.publish('item-1', id='1')
53+
time.sleep(0.1)
54+
feed.publish('item-2', id='2')
55+
time.sleep(0.1)
56+
feed.publish('item-3', id='3')
57+
time.sleep(0.1)
58+
feed.publish('item-4', id='4')
59+
time.sleep(0.1)
60+
feed.publish('item-5', id='5')
61+
time.sleep(0.1)
62+
self.proceed()
63+
64+
def test_14_feeds(self):
65+
"""Test interop for Feeds -- 5"""
66+
feed = self.thoonk.feed('interop-test-feed')
67+
self.wait()
68+
feed.publish('item-6', id='6')
69+
time.sleep(.1)
70+
self.proceed()
71+
72+
def test_15_feeds(self):
73+
"""Test interop for Feeds -- 6"""
74+
feed = self.thoonk.feed('interop-test-feed')
75+
self.wait()
76+
feed.publish('edited item-4', id='4')
77+
self.proceed()
78+
79+
def test_20_lists(self):
80+
"""Test interop for Lists"""
81+
pass
82+
83+
def test_30_queues(self):
84+
"""Test interop for Queues"""
85+
pass
86+
87+
def test_40_jobs(self):
88+
"""Test interop for Jobs"""
89+
pass
90+
91+
92+
class TestInteropFollower(unittest.TestCase):
93+
94+
"""
95+
"""
96+
97+
def setUp(self):
98+
self.thoonk = thoonk.Thoonk(CONFIG['host'], CONFIG['port'], CONFIG['db'])
99+
self.driver_queue = self.thoonk.queue('interop-testing-driver')
100+
self.follower_queue = self.thoonk.queue('interop-testing-follower')
101+
102+
def tearDown(self):
103+
self.proceed()
104+
105+
def proceed(self):
106+
self.driver_queue.put('token')
107+
108+
def wait(self):
109+
self.follower_queue.get()
110+
111+
def test_10_feeds(self):
112+
"""Test interop for Feeds -- 1"""
113+
feed = self.thoonk.feed('interop-test-feed')
114+
self.wait()
115+
items = feed.get_all()
116+
self.assertEqual({'1': 'test item'}, items,
117+
"Items don't match: %s" % items)
118+
119+
def test_11_feeds(self):
120+
"""Test interop for Feeds -- 2"""
121+
feed = self.thoonk.feed('interop-test-feed')
122+
self.wait()
123+
items = feed.get_all()
124+
self.assertEqual({'1': 'edited item'}, items,
125+
"Items don't match: %s" % items)
126+
127+
def test_12_feeds(self):
128+
"""Test interop for Feeds -- 3"""
129+
feed = self.thoonk.feed('interop-test-feed')
130+
self.wait()
131+
items = feed.get_all()
132+
self.assertEqual({}, items,
133+
"Items were not retracted: %s" % items)
134+
135+
def test_13_feeds(self):
136+
"""Test interop for Feeds -- 4"""
137+
feed = self.thoonk.feed('interop-test-feed', {'max_length':5})
138+
self.wait()
139+
items = feed.get_all()
140+
ids = feed.get_ids()
141+
expected = {
142+
'1': 'item-1',
143+
'2': 'item-2',
144+
'3': 'item-3',
145+
'4': 'item-4',
146+
'5': 'item-5'
147+
}
148+
self.assertEqual(expected, items,
149+
"Items don't match: %s" % items)
150+
self.assertEqual(['1','2','3','4','5'], ids,
151+
"Items not in order: %s" % ids)
152+
153+
def test_14_feeds(self):
154+
"""Test interop for Feeds -- 5"""
155+
feed = self.thoonk.feed('interop-test-feed', {'max_length':5})
156+
self.wait()
157+
items = feed.get_all()
158+
ids = feed.get_ids()
159+
expected = {
160+
'2': 'item-2',
161+
'3': 'item-3',
162+
'4': 'item-4',
163+
'5': 'item-5',
164+
'6': 'item-6'
165+
}
166+
self.assertEqual(expected, items,
167+
"Items don't match: %s" % items)
168+
self.assertEqual(['2','3','4','5','6'], ids,
169+
"Items not in order: %s" % ids)
170+
171+
def test_15_feeds(self):
172+
"""Test interop for Feeds -- 6"""
173+
feed = self.thoonk.feed('interop-test-feed')
174+
self.wait()
175+
items = feed.get_all()
176+
ids = feed.get_ids()
177+
expected = {
178+
'3': 'item-3',
179+
'4': 'edited item-4',
180+
'5': 'item-5',
181+
'6': 'item-6'
182+
}
183+
self.assertEqual(expected, items,
184+
"Items don't match: %s" % items)
185+
self.assertEqual(['3','5','6','4'], ids,
186+
"Items not in order: %s" % ids)
187+
188+
def test_20_lists(self):
189+
"""Test interop for Lists"""
190+
pass
191+
192+
def test_30_queues(self):
193+
"""Test interop for Queues"""
194+
pass
195+
196+
def test_40_jobs(self):
197+
"""Test interop for Jobs"""
198+
pass
199+
200+
201+
if __name__ == '__main__':
202+
optp = OptionParser()
203+
optp.add_option('-s', '--server', help='set Redis host',
204+
dest='server', default='localhost')
205+
optp.add_option('-p', '--port', help='set Redis host',
206+
dest='port', default=6379)
207+
optp.add_option('-d', '--db', help='set Redis db',
208+
dest='db', default=10)
209+
210+
opts, args = optp.parse_args()
211+
212+
CONFIG['host'] = opts.server
213+
CONFIG['port'] = opts.port
214+
CONFIG['db'] = opts.db
215+
216+
if args[0] == 'driver':
217+
t = thoonk.Thoonk(opts.server, opts.port, opts.db)
218+
t.redis.flushdb()
219+
test_class = TestInteropDriver
220+
else:
221+
test_class = TestInteropFollower
222+
223+
suite = unittest.TestLoader().loadTestsFromTestCase(test_class)
224+
unittest.TextTestRunner(verbosity=2).run(suite)

0 commit comments

Comments
 (0)