scalaroid 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +4 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +30 -0
- data/LICENSE.txt +202 -0
- data/Rakefile +8 -0
- data/bin/scalaroid +117 -0
- data/lib/scalaroid/json_connection.rb +370 -0
- data/lib/scalaroid/version.rb +3 -0
- data/lib/scalaroid.rb +108 -0
- data/scalaroid.gemspec +48 -0
- data/test/replicated_dht_test.rb +143 -0
- data/test/test_helper.rb +28 -0
- data/test/test_pub_sub.rb +299 -0
- data/test/transaction_single_op_test.rb +375 -0
- data/test/transaction_test.rb +267 -0
- metadata +130 -0
data/test/test_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
|
3
|
+
require "scalaroid"
|
4
|
+
require "pry"
|
5
|
+
|
6
|
+
$_TEST_DATA = [
|
7
|
+
"ahz2ieSh", "wooPhu8u", "quai9ooK", "Oquae4ee", "Airier1a", "Boh3ohv5", "ahD3Saog", "EM5ooc4i",
|
8
|
+
"Epahrai8", "laVahta7", "phoo6Ahj", "Igh9eepa", "aCh4Lah6", "ooT0ath5", "uuzau4Ie", "Iup6mae6",
|
9
|
+
# "xie7iSie", "ail8yeeP", "ooZ4eesi", "Ahn7ohph", "Ohy5moo6", "xooSh9Oo", "ieb6eeS7", "Thooqu9h",
|
10
|
+
# "eideeC9u", "phois3Ie", "EimaiJ2p", "sha6ahR1", "Pheih3za", "bai4eeXe", "rai0aB7j", "xahXoox6",
|
11
|
+
# "Xah4Okeg", "cieG8Yae", "Pe9Ohwoo", "Eehig6ph", "Xe7rooy6", "waY2iifu", "kemi8AhY", "Che7ain8",
|
12
|
+
# "ohw6seiY", "aegh1oBa", "thoh9IeG", "Kee0xuwu", "Gohng8ee", "thoh9Chi", "aa4ahQuu", "Iesh5uge",
|
13
|
+
# "Ahzeil8n", "ieyep5Oh", "xah3IXee", "Eefa5qui", "kai8Muuf", "seeCe0mu", "cooqua5Y", "Ci3ahF6z",
|
14
|
+
# "ot0xaiNu", "aewael8K", "aev3feeM", "Fei7ua5t", "aeCa6oph", "ag2Aelei", "Shah1Pho", "ePhieb0N",
|
15
|
+
# "Uqu7Phup", "ahBi8voh", "oon3aeQu", "Koopa0nu", "xi0quohT", "Oog4aiph", "Aip2ag5D", "tirai7Ae",
|
16
|
+
# "gi0yoePh", "uay7yeeX", "aeb6ahC1", "OoJeic2a", "ieViom1y", "di0eeLai", "Taec2phe", "ID2cheiD",
|
17
|
+
# "oi6ahR5M", "quaiGi8W", "ne1ohLuJ", "DeD0eeng", "yah8Ahng", "ohCee2ie", "ecu1aDai", "oJeijah4",
|
18
|
+
# "Goo9Una1", "Aiph3Phi", "Ieph0ce5", "ooL6cae7", "nai0io1H", "Oop2ahn8", "ifaxae7O", "NeHai1ae",
|
19
|
+
# "Ao8ooj6a", "hi9EiPhi", "aeTh9eiP", "ao8cheiH", "Yieg3sha", "mah7cu2D", "Uo5wiegi", "Oowei0ya",
|
20
|
+
# "efeiDee7", "Oliese6y", "eiSh1hoh", "Joh6hoh9", "zib6Ooqu", "eejiJie4", "lahZ3aeg", "keiRai1d",
|
21
|
+
# "Fei0aewe", "aeS8aboh", "hae3ohKe", "Een9ohQu", "AiYeeh7o", "Yaihah4s", "ood4Giez", "Oumai7te",
|
22
|
+
# "hae2kahY", "afieGh4v", "Ush0boo0", "Ekootee5", "Ya8iz6Ie", "Poh6dich", "Eirae4Ah", "pai8Eeme",
|
23
|
+
# "uNah7dae", "yo3hahCh", "teiTh7yo", "zoMa5Cuv", "ThiQu5ax", "eChi5caa", "ii9ujoiV", "ge7Iekui",
|
24
|
+
"sai2aiTa", "ohKi9rie", "ei2ioChu", "aaNgah9y", "ooJai1Ie", "shoh0oH9", "Ool4Ahya", "poh0IeYa",
|
25
|
+
"Uquoo0Il", "eiGh4Oop", "ooMa0ufe", "zee6Zooc", "ohhao4Ah", "Uweekek5", "aePoos9I", "eiJ9noor",
|
26
|
+
"phoong1E", "ianieL2h", "An7ohs4T", "Eiwoeku3", "sheiS3ao", "nei5Thiw", "uL5iewai", "ohFoh9Ae"]
|
27
|
+
|
28
|
+
$_TOO_LARGE_REQUEST_SIZE = 1024*1024*10 # number of bytes
|
@@ -0,0 +1,299 @@
|
|
1
|
+
class TestPubSub < Minitest::Test
|
2
|
+
def setup
|
3
|
+
@testTime = (Time.now.to_f * 1000).to_i
|
4
|
+
end
|
5
|
+
|
6
|
+
# checks if there are more elements in list than in expectedElements and returns one of those elements
|
7
|
+
def self._getDiffElement(list, expectedElements)
|
8
|
+
expectedElements.each do |e|
|
9
|
+
list.delete(e)
|
10
|
+
end
|
11
|
+
|
12
|
+
if list.length > 0
|
13
|
+
return list[0]
|
14
|
+
else
|
15
|
+
return nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Test method for PubSub()
|
20
|
+
def test_pub_sub1()
|
21
|
+
conn = Scalaroid::PubSub.new()
|
22
|
+
conn.close_connection()
|
23
|
+
end
|
24
|
+
|
25
|
+
# Test method for PubSub(conn)
|
26
|
+
def test_pub_sub2()
|
27
|
+
conn = Scalaroid::PubSub.new(conn = Scalaroid::JSONConnection.new(url = Scalaroid::DEFAULT_URL))
|
28
|
+
conn.close_connection()
|
29
|
+
end
|
30
|
+
|
31
|
+
# Test method for PubSub.close_connection() trying to close the connection twice.
|
32
|
+
def test_double_close()
|
33
|
+
conn = Scalaroid::PubSub.new()
|
34
|
+
conn.close_connection()
|
35
|
+
conn.close_connection()
|
36
|
+
end
|
37
|
+
|
38
|
+
# Test method for PubSub.publish(topic, content) with a closed connection.
|
39
|
+
def test_publish_not_connected()
|
40
|
+
topic = "_Publish_NotConnected"
|
41
|
+
conn = Scalaroid::PubSub.new()
|
42
|
+
conn.close_connection()
|
43
|
+
#assert_raises( Scalaroid::ConnectionError ) { conn.publish(@testTime.to_s + topic, $_TEST_DATA[0]) }
|
44
|
+
conn.publish(@testTime.to_s + topic, $_TEST_DATA[0])
|
45
|
+
conn.close_connection()
|
46
|
+
end
|
47
|
+
|
48
|
+
# Test method for PubSub.publish(topic, content).
|
49
|
+
# Publishes some topics and uses a distinct key for each value.
|
50
|
+
def test_publish1()
|
51
|
+
topic = "_Publish1_"
|
52
|
+
conn = Scalaroid::PubSub.new()
|
53
|
+
|
54
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
55
|
+
conn.publish(@testTime.to_s + topic + i.to_s, $_TEST_DATA[i])
|
56
|
+
end
|
57
|
+
|
58
|
+
conn.close_connection()
|
59
|
+
end
|
60
|
+
|
61
|
+
# Test method for PubSub.publish(topic, content).
|
62
|
+
# Publishes some topics and uses a single key for all the values.
|
63
|
+
def test_publish2()
|
64
|
+
topic = "_Publish2"
|
65
|
+
conn = Scalaroid::PubSub.new()
|
66
|
+
|
67
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
68
|
+
conn.publish(@testTime.to_s + topic, $_TEST_DATA[i])
|
69
|
+
end
|
70
|
+
|
71
|
+
conn.close_connection()
|
72
|
+
end
|
73
|
+
|
74
|
+
# Test method for PubSub.get_subscribers(topic) with a closed connection.
|
75
|
+
def test_get_subscribers_otp_not_connected()
|
76
|
+
topic = "_GetSubscribers_NotConnected"
|
77
|
+
conn = Scalaroid::PubSub.new()
|
78
|
+
conn.close_connection()
|
79
|
+
#assert_raises( Scalaroid::ConnectionError ) { conn.get_subscribers(@testTime.to_s + topic) }
|
80
|
+
conn.get_subscribers(@testTime.to_s + topic)
|
81
|
+
conn.close_connection()
|
82
|
+
end
|
83
|
+
|
84
|
+
# Test method for PubSub.get_subscribers(topic).
|
85
|
+
# Tries to get a subscriber list from an empty topic.
|
86
|
+
def test_get_subscribers_not_existing_topic()
|
87
|
+
topic = "_GetSubscribers_NotExistingTopic"
|
88
|
+
conn = Scalaroid::PubSub.new()
|
89
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic)
|
90
|
+
assert_equal([], subscribers)
|
91
|
+
conn.close_connection()
|
92
|
+
end
|
93
|
+
|
94
|
+
# Test method for PubSub.subscribe(topic url) with a closed connection.
|
95
|
+
def test_subscribe_not_connected()
|
96
|
+
topic = "_Subscribe_NotConnected"
|
97
|
+
conn = Scalaroid::PubSub.new()
|
98
|
+
conn.close_connection()
|
99
|
+
#assert_raises( Scalaroid::ConnectionError ) { conn.subscribe(@testTime.to_s + topic, $_TEST_DATA[0]) }
|
100
|
+
conn.subscribe(@testTime.to_s + topic, $_TEST_DATA[0])
|
101
|
+
conn.close_connection()
|
102
|
+
end
|
103
|
+
|
104
|
+
# Test method for PubSub.subscribe(topic, url) and PubSub.get_subscribers(topic).
|
105
|
+
# Subscribes some arbitrary URLs to arbitrary topics and uses a distinct topic for each URL.
|
106
|
+
def test_subscribe1()
|
107
|
+
topic = "_Subscribe1_"
|
108
|
+
conn = Scalaroid::PubSub.new()
|
109
|
+
|
110
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
111
|
+
conn.subscribe(@testTime.to_s + topic + i.to_s, $_TEST_DATA[i])
|
112
|
+
end
|
113
|
+
|
114
|
+
# check if the subscribers were successfully saved:
|
115
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
116
|
+
topic1 = topic + i.to_s
|
117
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic1)
|
118
|
+
assert(subscribers.include?($_TEST_DATA[i]),
|
119
|
+
"Subscriber \"" + $_TEST_DATA[i] + "\" does not exist for topic \"" + topic1 + "\"")
|
120
|
+
assert_equal(1, subscribers.length,
|
121
|
+
"Subscribers of topic (" + topic1 + ") should only be [" + $_TEST_DATA[i] + "], but is: " + subscribers.to_s)
|
122
|
+
end
|
123
|
+
|
124
|
+
conn.close_connection()
|
125
|
+
end
|
126
|
+
|
127
|
+
# Test method for PubSub.subscribe(topic, url) and PubSub.get_subscribers(topic).
|
128
|
+
# Subscribes some arbitrary URLs to arbitrary topics and uses a single topic for all URLs.
|
129
|
+
def test_subscribe2()
|
130
|
+
topic = "_Subscribe2"
|
131
|
+
conn = Scalaroid::PubSub.new()
|
132
|
+
|
133
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
134
|
+
conn.subscribe(@testTime.to_s + topic, $_TEST_DATA[i])
|
135
|
+
end
|
136
|
+
|
137
|
+
# check if the subscribers were successfully saved:
|
138
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic)
|
139
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
140
|
+
assert(subscribers.include?($_TEST_DATA[i]),
|
141
|
+
"Subscriber \"" + $_TEST_DATA[i] + "\" does not exist for topic \"" + topic + "\"")
|
142
|
+
end
|
143
|
+
assert_equal(nil, self.class._getDiffElement(subscribers, $_TEST_DATA),
|
144
|
+
"unexpected subscriber of topic \"" + topic + "\"")
|
145
|
+
|
146
|
+
conn.close_connection()
|
147
|
+
end
|
148
|
+
|
149
|
+
# Test method for PubSub.unsubscribe(topic url) with a closed connection.
|
150
|
+
def test_unsubscribe_not_connected()
|
151
|
+
topic = "_Unsubscribe_NotConnected"
|
152
|
+
conn = Scalaroid::PubSub.new()
|
153
|
+
conn.close_connection()
|
154
|
+
#assert_raises( Scalaroid::ConnectionError ) { conn.unsubscribe(@testTime.to_s + topic, $_TEST_DATA[0]) }
|
155
|
+
assert_raises( Scalaroid::NotFoundError ) { conn.unsubscribe(@testTime.to_s + topic, $_TEST_DATA[0]) }
|
156
|
+
conn.close_connection()
|
157
|
+
end
|
158
|
+
|
159
|
+
# Test method for PubSub.unsubscribe(topic url) and PubSub.get_subscribers(topic).
|
160
|
+
# Tries to unsubscribe an URL from a non-existing topic and tries to get the subscriber list afterwards.
|
161
|
+
def test_unsubscribe_not_existing_topic()
|
162
|
+
topic = "_Unsubscribe_NotExistingTopic"
|
163
|
+
conn = Scalaroid::PubSub.new()
|
164
|
+
# unsubscribe test "url":
|
165
|
+
assert_raises( Scalaroid::NotFoundError ) { conn.unsubscribe(@testTime.to_s + topic, $_TEST_DATA[0]) }
|
166
|
+
|
167
|
+
# check whether the unsubscribed urls were unsubscribed:
|
168
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic)
|
169
|
+
assert(!(subscribers.include?($_TEST_DATA[0])),
|
170
|
+
"Subscriber \"" + $_TEST_DATA[0] + "\" should have been unsubscribed from topic \"" + topic + "\"")
|
171
|
+
assert_equal(0, subscribers.length,
|
172
|
+
"Subscribers of topic (" + topic + ") should only be [], but is: " + subscribers.to_s)
|
173
|
+
|
174
|
+
conn.close_connection()
|
175
|
+
end
|
176
|
+
|
177
|
+
# Test method for PubSub.subscribe(topic url), PubSub.unsubscribe(topic url) and PubSub.get_subscribers(topic).
|
178
|
+
# Tries to unsubscribe an unsubscribed URL from an existing topic and compares the subscriber list afterwards.
|
179
|
+
def test_unsubscribe_not_existing_url()
|
180
|
+
topic = "_Unsubscribe_NotExistingUrl"
|
181
|
+
conn = Scalaroid::PubSub.new()
|
182
|
+
|
183
|
+
# first subscribe test "urls"...
|
184
|
+
conn.subscribe(@testTime.to_s + topic, $_TEST_DATA[0])
|
185
|
+
conn.subscribe(@testTime.to_s + topic, $_TEST_DATA[1])
|
186
|
+
|
187
|
+
# then unsubscribe another "url":
|
188
|
+
assert_raises( Scalaroid::NotFoundError ) { conn.unsubscribe(@testTime.to_s + topic, $_TEST_DATA[2]) }
|
189
|
+
|
190
|
+
# check whether the subscribers were successfully saved:
|
191
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic)
|
192
|
+
assert(subscribers.include?($_TEST_DATA[0]),
|
193
|
+
"Subscriber \"" + $_TEST_DATA[0] + "\" does not exist for topic \"" + topic + "\"")
|
194
|
+
assert(subscribers.include?($_TEST_DATA[1]),
|
195
|
+
"Subscriber \"" + $_TEST_DATA[1] + "\" does not exist for topic \"" + topic + "\"")
|
196
|
+
|
197
|
+
# check whether the unsubscribed urls were unsubscribed:
|
198
|
+
assert(!(subscribers.include?($_TEST_DATA[2])),
|
199
|
+
"Subscriber \"" + $_TEST_DATA[2] + "\" should have been unsubscribed from topic \"" + topic + "\"")
|
200
|
+
|
201
|
+
assert_equal(2, subscribers.length,
|
202
|
+
"Subscribers of topic (" + topic + ") should only be [\"" + $_TEST_DATA[0] + "\", \"" + $_TEST_DATA[1] + "\"], but is: " + subscribers.to_s)
|
203
|
+
|
204
|
+
conn.close_connection()
|
205
|
+
end
|
206
|
+
|
207
|
+
# Test method for PubSub.subscribe(topic url), PubSub.unsubscribe(topic url) and PubSub.get_subscribers(topic).
|
208
|
+
# Subscribes some arbitrary URLs to arbitrary topics and uses a distinct topic for each URL.
|
209
|
+
# Unsubscribes every second subscribed URL.
|
210
|
+
def test_unsubscribe1()
|
211
|
+
topic = "_UnsubscribeString1_"
|
212
|
+
conn = Scalaroid::PubSub.new()
|
213
|
+
|
214
|
+
# first subscribe test "urls"...
|
215
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
216
|
+
conn.subscribe(@testTime.to_s + topic + i.to_s, $_TEST_DATA[i])
|
217
|
+
end
|
218
|
+
|
219
|
+
# ... then unsubscribe every second url:
|
220
|
+
(0..($_TEST_DATA.length - 1)).step(2) do |i|
|
221
|
+
conn.unsubscribe(@testTime.to_s + topic + i.to_s, $_TEST_DATA[i])
|
222
|
+
end
|
223
|
+
|
224
|
+
# check whether the subscribers were successfully saved:
|
225
|
+
(1..($_TEST_DATA.length - 1)).step(2) do |i|
|
226
|
+
topic1 = topic + i.to_s
|
227
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic1)
|
228
|
+
assert(subscribers.include?($_TEST_DATA[i]),
|
229
|
+
"Subscriber \"" + $_TEST_DATA[i] + "\" does not exist for topic \"" + topic1 + "\"")
|
230
|
+
assert_equal(1, subscribers.length,
|
231
|
+
"Subscribers of topic (" + topic1 + ") should only be [\"" + $_TEST_DATA[i] + "\"], but is: " + subscribers.to_s)
|
232
|
+
end
|
233
|
+
|
234
|
+
# check whether the unsubscribed urls were unsubscribed:
|
235
|
+
(0..($_TEST_DATA.length - 1)).step(2) do |i|
|
236
|
+
topic1 = topic + i.to_s
|
237
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic1)
|
238
|
+
assert(!(subscribers.include?($_TEST_DATA[i])),
|
239
|
+
"Subscriber \"" + $_TEST_DATA[i] + "\" should have been unsubscribed from topic \"" + topic1 + "\"")
|
240
|
+
assert_equal(0, subscribers.length,
|
241
|
+
"Subscribers of topic (" + topic1 + ") should only be [], but is: " + subscribers.to_s)
|
242
|
+
end
|
243
|
+
|
244
|
+
conn.close_connection()
|
245
|
+
end
|
246
|
+
|
247
|
+
# Test method for PubSub.subscribe(topic url), PubSub.unsubscribe(topic url) and PubSub.get_subscribers(topic).
|
248
|
+
# Subscribes some arbitrary URLs to arbitrary topics and uses a single topic for all URLs.
|
249
|
+
# Unsubscribes every second subscribed URL.
|
250
|
+
def test_unsubscribe2()
|
251
|
+
topic = "_UnubscribeString2"
|
252
|
+
conn = Scalaroid::PubSub.new()
|
253
|
+
|
254
|
+
# first subscribe all test "urls"...
|
255
|
+
(0..($_TEST_DATA.length - 1)).each do |i|
|
256
|
+
conn.subscribe(@testTime.to_s + topic, $_TEST_DATA[i])
|
257
|
+
end
|
258
|
+
|
259
|
+
# ... then unsubscribe every second url:
|
260
|
+
(0..($_TEST_DATA.length - 1)).step(2) do |i|
|
261
|
+
conn.unsubscribe(@testTime.to_s + topic, $_TEST_DATA[i])
|
262
|
+
end
|
263
|
+
|
264
|
+
# check whether the subscribers were successfully saved:
|
265
|
+
subscribers = conn.get_subscribers(@testTime.to_s + topic)
|
266
|
+
subscribers_expected = []
|
267
|
+
(1..($_TEST_DATA.length - 1)).step(2) do |i|
|
268
|
+
subscribers_expected << $_TEST_DATA[i]
|
269
|
+
assert(subscribers.include?($_TEST_DATA[i]),
|
270
|
+
"Subscriber \"" + $_TEST_DATA[i] + "\" does not exist for topic \"" + topic + "\"")
|
271
|
+
end
|
272
|
+
|
273
|
+
# check whether the unsubscribed urls were unsubscribed:
|
274
|
+
(0..($_TEST_DATA.length - 1)).step(2) do |i|
|
275
|
+
assert(!(subscribers.include?($_TEST_DATA[i])),
|
276
|
+
"Subscriber \"" + $_TEST_DATA[i] + "\" should have been unsubscribed from topic \"" + topic + "\"")
|
277
|
+
end
|
278
|
+
|
279
|
+
assert_equal(nil, self.class._getDiffElement(subscribers, subscribers_expected),
|
280
|
+
"unexpected subscriber of topic \"" + topic + "\"")
|
281
|
+
|
282
|
+
conn.close_connection()
|
283
|
+
end
|
284
|
+
|
285
|
+
# Test method for PubSub.write(key, value=bytearray()) with a
|
286
|
+
# request that is too large.
|
287
|
+
def test_req_too_large()
|
288
|
+
conn = Scalaroid::PubSub.new()
|
289
|
+
data = (0..($_TOO_LARGE_REQUEST_SIZE)).map{0}.join()
|
290
|
+
key = "_ReqTooLarge"
|
291
|
+
begin
|
292
|
+
conn.publish(@testTime.to_s + key, data)
|
293
|
+
assert(false, 'The publish should have failed unless yaws_max_post_data was set larger than ' + $_TOO_LARGE_REQUEST_SIZE.to_s())
|
294
|
+
rescue Scalaroid::ConnectionError
|
295
|
+
end
|
296
|
+
|
297
|
+
conn.close_connection()
|
298
|
+
end
|
299
|
+
end
|