roma 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +44 -1
  3. data/Gemfile.lock +18 -15
  4. data/README.md +15 -1
  5. data/bin/consistency_test +10 -0
  6. data/bin/data_accumulation +11 -0
  7. data/lib/roma/async_process.rb +39 -2
  8. data/lib/roma/command/sys_command_receiver.rb +80 -0
  9. data/lib/roma/command/vn_command_receiver.rb +1 -1
  10. data/lib/roma/config.rb +1 -1
  11. data/lib/roma/plugin/plugin_storage.rb +105 -1
  12. data/lib/roma/romad.rb +13 -1
  13. data/lib/roma/routing/cb_rttable.rb +1 -1
  14. data/lib/roma/tools/consistency_test.rb +77 -0
  15. data/lib/roma/tools/data_accumulation.rb +64 -0
  16. data/lib/roma/version.rb +1 -1
  17. data/lib/roma/write_behind.rb +138 -1
  18. data/test/config4mhash.rb +1 -1
  19. data/test/config4storage_error.rb +1 -1
  20. data/test/config4test.rb +1 -1
  21. data/test/cpdbtest/config4cpdb_base.rb +1 -1
  22. data/test/optional_test/t_mkroute_rich.rb +44 -0
  23. data/test/optional_test/t_other_cpdb.rb +45 -0
  24. data/test/optional_test/t_other_database.rb +59 -0
  25. data/test/{t_routing_logic.rb → optional_test/t_routing_logic.rb} +1 -0
  26. data/test/roma-test-storage.rb +685 -0
  27. data/test/roma-test-utils.rb +24 -0
  28. data/test/run-test.rb +9 -0
  29. data/test/t_command_definition.rb +2 -0
  30. data/test/t_cpdata.rb +1 -0
  31. data/test/t_cpdb.rb +22 -34
  32. data/test/t_eventmachine.rb +1 -0
  33. data/test/t_listplugin.rb +2 -0
  34. data/test/t_logshift.rb +2 -4
  35. data/test/t_mapcountplugin.rb +48 -37
  36. data/test/t_mapplugin.rb +2 -0
  37. data/test/t_mhash.rb +2 -1
  38. data/test/t_new_func.rb +386 -0
  39. data/test/t_protocol.rb +66 -1
  40. data/test/t_rclient.rb +2 -0
  41. data/test/t_replication.rb +299 -0
  42. data/test/t_routing_data.rb +6 -5
  43. data/test/t_storage.rb +5 -740
  44. data/test/t_storage_error.rb +1 -0
  45. data/test/t_writebehind.rb +11 -2
  46. metadata +31 -19
@@ -113,10 +113,12 @@ module MapPluginTests
113
113
  end # MapPluginTests
114
114
 
115
115
  class MapPluginTest < Test::Unit::TestCase
116
+ self.test_order = :defined
116
117
  include MapPluginTests
117
118
  end
118
119
 
119
120
  class MapPluginTestForceForward < Test::Unit::TestCase
121
+ self.test_order = :defined
120
122
  include MapPluginTests
121
123
 
122
124
  def setup
@@ -9,6 +9,7 @@ Roma::Client::RomaClient.class_eval do
9
9
  end
10
10
 
11
11
  class MHashTest < Test::Unit::TestCase
12
+ self.test_order = :defined
12
13
  include RomaTestUtils
13
14
 
14
15
  def setup
@@ -99,7 +100,7 @@ class MHashTest < Test::Unit::TestCase
99
100
  assert_equal('STORED', @rc.set('roma', 'hname=test'))
100
101
  assert_equal('hname=test', @rc.get('roma'))
101
102
 
102
- # stop roam
103
+ # stop roma
103
104
  stop_roma
104
105
 
105
106
  # restart roma
@@ -0,0 +1,386 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'socket'
4
+
5
+ class NewFuncTest < Test::Unit::TestCase
6
+ self.test_order = :defined
7
+ include RomaTestUtils
8
+
9
+ def setup
10
+ start_roma
11
+ @sock = TCPSocket.new("localhost", 11211)
12
+ end
13
+
14
+ def teardown
15
+ @sock.close if @sock
16
+ stop_roma
17
+ rescue => e
18
+ puts "#{e} #{$@}"
19
+ end
20
+
21
+ def test_jaro_winkler
22
+ @sock.write("staat\r\n")
23
+ assert_equal("", @sock.gets.chomp)
24
+ assert_equal("ERROR: 'staat' is not roma command.", @sock.gets.chomp)
25
+ assert_equal("Did you mean this?", @sock.gets.chomp)
26
+ assert_equal("\tstat", @sock.gets.chomp)
27
+
28
+ @sock.write("outingdump yaml\r\n")
29
+ assert_equal("", @sock.gets.chomp)
30
+ assert_equal("ERROR: 'outingdump' is not roma command.", @sock.gets.chomp)
31
+ assert_equal("Did you mean this?", @sock.gets.chomp)
32
+ assert_equal("\troutingdump", @sock.gets.chomp)
33
+
34
+ @sock.write("hoge\r\n")
35
+ assert_equal("ERROR: 'hoge' is not roma command. Please check command.", @sock.gets.chomp)
36
+ assert_equal("(closing telnet connection command is 'quit')", @sock.gets.chomp)
37
+ end
38
+
39
+ def test_stat_log_level
40
+ @sock.write("stat log_level\r\n")
41
+ assert_equal("stats.log_level debug", @sock.gets.chomp)
42
+ assert_equal("END", @sock.gets.chomp)
43
+ end
44
+
45
+ def test_stat_failover
46
+ @sock.write("stat failover\r\n")
47
+ assert_equal("routing.enabled_failover false", @sock.gets.chomp)
48
+ assert_equal("END", @sock.gets.chomp)
49
+ end
50
+
51
+ def test_stat_secondary
52
+ @sock.write("stat secondary\r\n")
53
+ sleep 1
54
+ column, param = @sock.gets.chomp.split("\s")
55
+ assert_equal("routing.secondary1", column)
56
+ assert_equal(true, param.to_i > 0)
57
+ assert_equal("END", @sock.gets.chomp)
58
+ end
59
+
60
+ def test_shutdown_self_no
61
+ @sock.write("shutdown_self\r\n")
62
+ assert_equal("", @sock.gets.chomp)
63
+ assert_equal("=================================================================", @sock.gets.chomp)
64
+ assert_equal("CAUTION!!: ", @sock.gets.chomp)
65
+ assert_equal("\tThis command kill the instance!", @sock.gets.chomp)
66
+ assert_equal("\tThere is some possibility of occuring redundancy down!", @sock.gets.chomp)
67
+ assert_equal("=================================================================", @sock.gets.chomp)
68
+ assert_equal("", @sock.gets.chomp)
69
+ assert_equal("Are you sure to shutdown this instance?(yes/no)", @sock.gets.chomp)
70
+
71
+ @sock.write("no\r\n")
72
+ assert_nil(@sock.gets)
73
+ end
74
+
75
+ def test_get_key_info
76
+ @sock.write("set key1 0 0 4\r\nval1\r\n")
77
+ assert_equal("STORED", @sock.gets.chomp)
78
+
79
+ @sock.write("get_key_info key1\r\n")
80
+ assert_match(/^d = \d+ 0x\h+$/, @sock.gets.chomp)
81
+ assert_match(/^vn = \d+ 0x\h+$/, @sock.gets.chomp)
82
+ assert_match(/^nodes = \["localhost_1121[1|2]", "localhost_1121[1|2]"\]$/, @sock.gets.chomp)
83
+ assert_equal('END', @sock.gets.chomp)
84
+ end
85
+
86
+ def test_enabled_repetition_in_routing
87
+ @sock.write("enabled_repetition_in_routing?\r\n")
88
+ assert_equal("true", @sock.gets.chomp)
89
+ end
90
+
91
+ def test_switch_dns_caching
92
+ @sock.write("stat dns\r\n")
93
+ assert_equal("dns_caching false", @sock.gets.chomp)
94
+ assert_equal("END", @sock.gets.chomp)
95
+
96
+ @sock.write("switch_dns_caching on \r\n")
97
+ assert_equal('{"localhost_11212"=>"ENABLED", "localhost_11211"=>"ENABLED"}', @sock.gets.chomp)
98
+ @sock.write("stat dns\r\n")
99
+ assert_equal("dns_caching true", @sock.gets.chomp)
100
+ assert_equal("END", @sock.gets.chomp)
101
+
102
+ @sock.write("switch_dns_caching off \r\n")
103
+ assert_equal('{"localhost_11212"=>"DISABLED", "localhost_11211"=>"DISABLED"}', @sock.gets.chomp)
104
+ @sock.write("stat dns\r\n")
105
+ assert_equal("dns_caching false", @sock.gets.chomp)
106
+ assert_equal("END", @sock.gets.chomp)
107
+
108
+ @sock.write("switch_dns_caching off \r\n")
109
+ assert_equal('{"localhost_11212"=>"DISABLED", "localhost_11211"=>"DISABLED"}', @sock.gets.chomp)
110
+ @sock.write("stat dns\r\n")
111
+ assert_equal("dns_caching false", @sock.gets.chomp)
112
+ assert_equal("END", @sock.gets.chomp)
113
+ end
114
+
115
+ def test_nid_brank
116
+ @sock.write("stat sub\r\n")
117
+ assert_equal('routing.sub_nid {}', @sock.gets.chomp)
118
+ assert_equal('END', @sock.gets.chomp)
119
+ @sock.write("routingdump yaml\r\n")
120
+ dump = []
121
+ while select [@sock], nil, nil, 0.5
122
+ dump << @sock.gets.chomp!
123
+ end
124
+ assert_equal(true, dump.grep(/vm/).empty?)
125
+ end
126
+
127
+ def test_add_rttable_sub_nid
128
+ @sock.write("stat sub\r\n")
129
+ assert_equal('routing.sub_nid {}', @sock.gets.chomp)
130
+ assert_equal('END', @sock.gets.chomp)
131
+
132
+ @sock.write("add_rttable_sub_nid 127.0.0.0/24 localhost vm\r\n")
133
+ assert_equal('{"localhost_11212"=>"ADDED", "localhost_11211"=>"ADDED"}', @sock.gets.chomp)
134
+
135
+ @sock.write("stat sub\r\n")
136
+ assert_equal('routing.sub_nid {"127.0.0.0/24"=>{:regexp=>"localhost", :replace=>"vm"}}', @sock.gets.chomp)
137
+ assert_equal('END', @sock.gets.chomp)
138
+
139
+ @sock.write("routingdump yaml\r\n")
140
+ dump = []
141
+ while select [@sock], nil, nil, 0.5
142
+ dump << @sock.gets.chomp!
143
+ end
144
+ assert_equal(false, dump.grep(/vm/).empty?)
145
+ end
146
+
147
+ def test_delete_rttable_sub_nid
148
+ @sock.write("add_rttable_sub_nid 127.0.0.0/24 localhost vm\r\n")
149
+ assert_equal('{"localhost_11212"=>"ADDED", "localhost_11211"=>"ADDED"}', @sock.gets.chomp)
150
+
151
+ @sock.write("delete_rttable_sub_nid 111.22.33.44/24\r\n")
152
+ assert_equal('{"localhost_11212"=>"NOT_FOUND", "localhost_11211"=>"NOT_FOUND"}', @sock.gets.chomp)
153
+
154
+ @sock.write("delete_rttable_sub_nid 127.0.0.0/24\r\n")
155
+ assert_equal('{"localhost_11212"=>"DELETED", "localhost_11211"=>"DELETED"}', @sock.gets.chomp)
156
+
157
+ @sock.write("stat sub\r\n")
158
+ assert_equal('routing.sub_nid {}', @sock.gets.chomp)
159
+ assert_equal('END', @sock.gets.chomp)
160
+
161
+ @sock.write("routingdump yaml\r\n")
162
+ dump = []
163
+ while select [@sock], nil, nil, 0.5
164
+ dump << @sock.gets.chomp!
165
+ end
166
+ assert_equal(true, dump.grep(/vm/).empty?)
167
+ end
168
+
169
+ def test_clear_rttable_sub_nid
170
+ @sock.write("add_rttable_sub_nid 127.0.0.0/24 localhost vm\r\n")
171
+ assert_equal('{"localhost_11212"=>"ADDED", "localhost_11211"=>"ADDED"}', @sock.gets.chomp)
172
+
173
+ @sock.write("clear_rttable_sub_nid\r\n")
174
+ assert_equal('{"localhost_11212"=>"CLEARED", "localhost_11211"=>"CLEARED"}', @sock.gets.chomp)
175
+
176
+ @sock.write("stat sub\r\n")
177
+ assert_equal('routing.sub_nid {}', @sock.gets.chomp)
178
+ assert_equal('END', @sock.gets.chomp)
179
+
180
+ @sock.write("routingdump yaml\r\n")
181
+ dump = []
182
+ while select [@sock], nil, nil, 0.5
183
+ dump << @sock.gets.chomp!
184
+ end
185
+ assert_equal(true, dump.grep(/vm/).empty?)
186
+ end
187
+
188
+ def test_stat_latency
189
+ @sock.write("stat latency\r\n")
190
+ assert_equal("stats.hilatency_warn_time 5.0", @sock.gets.chomp)
191
+ assert_equal("stats.latency_log false", @sock.gets.chomp)
192
+ assert_equal('stats.latency_check_cmd ["get", "set", "delete"]', @sock.gets.chomp)
193
+ assert_equal("stats.latency_check_time_count false", @sock.gets.chomp)
194
+ end
195
+
196
+ def test_del_latency_avg_calc_cmd
197
+ @sock.write("del_latency_avg_calc_cmd set delete\r\n")
198
+ assert_equal('{"localhost_11212"=>"DELETED", "localhost_11211"=>"DELETED"}', @sock.gets.chomp)
199
+ @sock.write("stat latency_check_cmd\r\n")
200
+ assert_equal('stats.latency_check_cmd ["get"]', @sock.gets.chomp)
201
+ assert_equal('END', @sock.gets.chomp)
202
+ end
203
+
204
+ def test_add_latency_avg_calc_cmd
205
+ @sock.write("add_latency_avg_calc_cmd add\r\n")
206
+ assert_equal('{"localhost_11212"=>"SET", "localhost_11211"=>"SET"}', @sock.gets.chomp)
207
+ @sock.write("stat latency_check_cmd\r\n")
208
+ assert_equal('stats.latency_check_cmd ["get", "set", "delete", "add"]', @sock.gets.chomp)
209
+ assert_equal('END', @sock.gets.chomp)
210
+
211
+ @sock.write("add_latency_avg_calc_cmd get\r\n")
212
+ assert_equal('ALREADY SET [get] command', @sock.gets.chomp)
213
+ @sock.write("stat latency_check_cmd\r\n")
214
+ assert_equal('stats.latency_check_cmd ["get", "set", "delete", "add"]', @sock.gets.chomp)
215
+ assert_equal('END', @sock.gets.chomp)
216
+
217
+ @sock.write("add_latency_avg_calc_cmd balse\r\n")
218
+ assert_equal('NOT SUPPORT [balse] command', @sock.gets.chomp)
219
+ @sock.write("stat latency_check_cmd\r\n")
220
+ assert_equal('stats.latency_check_cmd ["get", "set", "delete", "add"]', @sock.gets.chomp)
221
+ assert_equal('END', @sock.gets.chomp)
222
+ end
223
+
224
+ def test_chg_latency_avg_calc_time_count
225
+ @sock.write("chg_latency_avg_calc_time_count 60\r\n")
226
+ assert_equal('{"localhost_11212"=>"CHANGED", "localhost_11211"=>"CHANGED"}', @sock.gets.chomp)
227
+ @sock.write("stat latency_check_time_count\r\n")
228
+ assert_equal('stats.latency_check_time_count 60', @sock.gets.chomp)
229
+ assert_equal('END', @sock.gets.chomp)
230
+
231
+ @sock.write("chg_latency_avg_calc_time_count nil\r\n")
232
+ assert_equal('{"localhost_11212"=>"CHANGED", "localhost_11211"=>"CHANGED"}', @sock.gets.chomp)
233
+ @sock.write("stat latency_check_time_count\r\n")
234
+ assert_equal('stats.latency_check_time_count false', @sock.gets.chomp)
235
+ assert_equal('END', @sock.gets.chomp)
236
+ end
237
+
238
+ def test_set_latency_avg_calc_rule
239
+ @sock.write("set_latency_avg_calc_rule off\r\n")
240
+ assert_equal('{"localhost_11212"=>"DEACTIVATED", "localhost_11211"=>"DEACTIVATED"}', @sock.gets.chomp)
241
+ @sock.write("stat latency\r\n")
242
+ assert_equal("stats.hilatency_warn_time 5.0", @sock.gets.chomp)
243
+ assert_equal("stats.latency_log false", @sock.gets.chomp)
244
+ assert_equal('stats.latency_check_cmd []', @sock.gets.chomp)
245
+ assert_equal("stats.latency_check_time_count false", @sock.gets.chomp)
246
+ assert_equal("END", @sock.gets.chomp)
247
+
248
+ @sock.write("set_latency_avg_calc_rule on 30 get set\r\n")
249
+ assert_equal('{"localhost_11212"=>"ACTIVATED", "localhost_11211"=>"ACTIVATED"}', @sock.gets.chomp)
250
+ @sock.write("stat latency\r\n")
251
+ assert_equal("stats.hilatency_warn_time 5.0", @sock.gets.chomp)
252
+ assert_equal("stats.latency_log true", @sock.gets.chomp)
253
+ assert_equal('stats.latency_check_cmd ["get", "set"]', @sock.gets.chomp)
254
+ assert_equal("stats.latency_check_time_count 30", @sock.gets.chomp)
255
+ assert_equal("END", @sock.gets.chomp)
256
+ end
257
+
258
+ def test_auto_recover_stat
259
+ @sock.write("stat recover\r\n")
260
+ assert_equal("stats.run_recover false", @sock.gets.chomp)
261
+ assert_equal("routing.auto_recover false", @sock.gets.chomp)
262
+ assert_equal("routing.auto_recover_status waiting", @sock.gets.chomp)
263
+ assert_equal("routing.auto_recover_time 1800", @sock.gets.chomp)
264
+ assert_equal("END", @sock.gets.chomp)
265
+ end
266
+
267
+ def test_set_auto_recover
268
+ @sock.write("set_auto_recover true\r\n")
269
+ assert_equal('{"localhost_11212"=>"STORED", "localhost_11211"=>"STORED"}', @sock.gets.chomp)
270
+
271
+ @sock.write("stat auto_recover\r\n")
272
+ assert_equal("routing.auto_recover true", @sock.gets.chomp)
273
+ assert_equal("routing.auto_recover_status waiting", @sock.gets.chomp)
274
+ assert_equal("routing.auto_recover_time 1800", @sock.gets.chomp)
275
+ assert_equal("END", @sock.gets.chomp)
276
+
277
+ @sock.write("set_auto_recover true 180\r\n")
278
+ assert_equal('{"localhost_11212"=>"STORED", "localhost_11211"=>"STORED"}', @sock.gets.chomp)
279
+
280
+ @sock.write("stat auto_recover\r\n")
281
+ assert_equal("routing.auto_recover true", @sock.gets.chomp)
282
+ assert_equal("routing.auto_recover_status waiting", @sock.gets.chomp)
283
+ assert_equal("routing.auto_recover_time 180", @sock.gets.chomp)
284
+ assert_equal("END", @sock.gets.chomp)
285
+
286
+ @sock.write("set_auto_recover false\n")
287
+ assert_equal('{"localhost_11212"=>"STORED", "localhost_11211"=>"STORED"}', @sock.gets.chomp)
288
+
289
+ @sock.write("stat auto_recover\r\n")
290
+ assert_equal("routing.auto_recover false", @sock.gets.chomp)
291
+ assert_equal("routing.auto_recover_status waiting", @sock.gets.chomp)
292
+ assert_equal("routing.auto_recover_time 180", @sock.gets.chomp)
293
+ assert_equal("END", @sock.gets.chomp)
294
+ end
295
+
296
+ def test_stat_trans_timeout
297
+ @sock.write("stat trans\r\n")
298
+ assert_equal("stats.routing_trans_timeout 10800", @sock.gets.chomp)
299
+ assert_equal("END", @sock.gets.chomp)
300
+ end
301
+
302
+ def test_set_routing_trans_timeout
303
+ @sock.write("set_routing_trans_timeout 1\r\n")
304
+ assert_equal('{"localhost_11212"=>"STORED", "localhost_11211"=>"STORED"}', @sock.gets.chomp)
305
+ @sock.write("stat trans\r\n")
306
+ assert_equal("stats.routing_trans_timeout 1.0", @sock.gets.chomp)
307
+ assert_equal("END", @sock.gets.chomp)
308
+ end
309
+
310
+ def test_stat_routing_event
311
+ @sock.write("stat routing.event\r\n")
312
+ assert_equal('routing.event []', @sock.gets.chomp)
313
+ assert_equal('routing.event_limit_line 1000', @sock.gets.chomp)
314
+ assert_equal('END', @sock.gets.chomp)
315
+ end
316
+
317
+ def test_add_routing_event
318
+ @sock.write("switch_failover on\r\n")
319
+ assert_equal('{"localhost_11212"=>"ENABLED", "localhost_11211"=>"ENABLED"}', @sock.gets.chomp)
320
+
321
+ stop_roma_node('localhost_11212')
322
+ sleep 5 # wait failover
323
+
324
+ @sock.write("stat routing.event$\r\n")
325
+ assert_match(/routing\.event \["[-T\d:\.]+ leave localhost_11212"\]/, @sock.gets.chomp)
326
+ assert_equal('END', @sock.gets.chomp)
327
+ end
328
+
329
+ def test_adm_tool_sendcmd
330
+ res = `#{bin_dir}/roma-adm`
331
+ assert_equal('Argument Error: roma-adm [adm-command] [port No.]', res.chomp)
332
+
333
+ res = `#{bin_dir}/roma-adm -h`
334
+ assert_match(/usage:roma-adm \[command\] \[port No.\]\n\s+-h, --help\s+Show this message/, res.chomp)
335
+
336
+ res = `#{bin_dir}/roma-adm whoami 11211`
337
+ assert_equal(".\r\nROMA", res.chomp)
338
+ end
339
+
340
+ def test_romad_option
341
+ res = `#{bin_dir}/romad -h`
342
+ assert_equal("usage:romad [options] address
343
+ -d, --daemon
344
+ -j, --join [address:port]
345
+ -p, --port [PORT]
346
+ --verbose
347
+ -n, --name [name]
348
+ --enabled_repeathost Allow redundancy to same host
349
+ --replication_in_host Allow redundancy to same host
350
+ --disabled_cmd_protect Command protection disable while starting
351
+ --config [file path of the config.rb]
352
+ -h, --help Show this message
353
+ -v, --version Show version", res.chomp)
354
+ end
355
+
356
+ def test_check_tc_flag
357
+ stop_roma
358
+ res = `#{bin_dir}/check_tc_flag -h`
359
+ assert_equal("usage:check_tc_flag --path [directory path]
360
+ -h, --help Show this message
361
+ --storage <dir_path> Specify the TC Storage directory
362
+ Ex.)/roma/ds/localhost_10001/roma
363
+ --library <dir_path> Specify the TC library directory
364
+ Ex.)/roma/libexec", res.chomp)
365
+
366
+ start_roma 'cpdbtest/config4cpdb_tc.rb'
367
+ stop_roma
368
+ res = `#{bin_dir}/check_tc_flag --storage ./localhost_11211/roma --library /usr/local/roma/libexec`
369
+ assert_match(/\.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
370
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
371
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
372
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
373
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
374
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
375
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
376
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
377
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)
378
+ \.\/localhost_11211\/roma\/\d\.tc : \(no flag\)/, res.chomp)
379
+ end
380
+
381
+ def test_waiting_node
382
+ log = File.read("./localhost_11211.log")
383
+ assert_equal(true, log.include?("I'm waiting for booting the localhost_11211 instance"))
384
+ end
385
+
386
+ end
@@ -3,6 +3,7 @@
3
3
  require 'socket'
4
4
 
5
5
  class ProtocolTest < Test::Unit::TestCase
6
+ self.test_order = :defined
6
7
  include RomaTestUtils
7
8
 
8
9
  def setup
@@ -17,33 +18,50 @@ class ProtocolTest < Test::Unit::TestCase
17
18
  puts "#{e} #{$@}"
18
19
  end
19
20
 
20
- def test_set_get_delete
21
+ def test_set_get
22
+ sleep 10
23
+
21
24
  # Set data
22
25
  @sock.write("set key 0 0 5\r\nvalue\r\n")
26
+ sleep 1
23
27
  assert_equal("STORED", @sock.gets.chomp)
24
28
 
25
29
  # Get data
26
30
  @sock.write("get key\r\n")
31
+ sleep 1
27
32
  assert_equal("VALUE key 0 5", @sock.gets.chomp)
28
33
  assert_equal("value", @sock.gets.chomp)
29
34
  assert_equal("END", @sock.gets.chomp)
30
35
 
31
36
  # Update data
32
37
  @sock.write("set key 0 0 9\r\nnew_value\r\n")
38
+ sleep 1
33
39
  assert_equal("STORED", @sock.gets.chomp)
34
40
 
35
41
  # Confirm updated data
36
42
  @sock.write("get key\r\n")
43
+ sleep 1
37
44
  assert_equal("VALUE key 0 9", @sock.gets.chomp)
38
45
  assert_equal("new_value", @sock.gets.chomp)
39
46
  assert_equal("END", @sock.gets.chomp)
47
+ end
48
+
49
+ def test_delete
50
+ sleep 1
51
+
52
+ # Set data
53
+ @sock.write("set key 0 0 5\r\nvalue\r\n")
54
+ sleep 1
55
+ assert_equal("STORED", @sock.gets.chomp)
40
56
 
41
57
  # Delete data
42
58
  @sock.write("delete key\r\n")
59
+ sleep 1
43
60
  assert_equal("DELETED", @sock.gets.chomp)
44
61
 
45
62
  # Confirm deleted data
46
63
  @sock.write("get key\r\n")
64
+ sleep 1
47
65
  assert_equal("END", @sock.gets.chomp)
48
66
  end
49
67
 
@@ -128,4 +146,51 @@ class ProtocolTest < Test::Unit::TestCase
128
146
  assert_equal("VALUE key 0 0", @sock.gets.chomp)
129
147
  assert_equal("", @sock.gets.chomp)
130
148
  end
149
+
150
+ def test_get_expt
151
+ # argument
152
+ @sock.write("get_expt\r\n")
153
+ assert_equal('CLIENT_ERROR Wrong number of arguments.', @sock.gets.chomp)
154
+ @sock.write("get_expt key1 true\r\n")
155
+ assert_equal('CLIENT_ERROR Wrong format of arguments.', @sock.gets.chomp)
156
+ @sock.write("get_expt key1 unix nil\r\n")
157
+ assert_equal('CLIENT_ERROR Wrong number of arguments.', @sock.gets.chomp)
158
+
159
+ # No data
160
+ @sock.write("get_expt key1\r\n")
161
+ assert_equal("END", @sock.gets.chomp)
162
+
163
+ # set 0
164
+ @sock.write("set key1 0 0 4\r\nval1\r\n")
165
+ assert_equal('STORED', @sock.gets.chomp )
166
+ @sock.write("get_expt key1\r\n")
167
+ t = Time.at(2147483647)
168
+ assert_equal(t.to_s, @sock.gets.chomp ) # 2038-01-19 03:14:07 +0000
169
+ assert_equal('END', @sock.gets.chomp )
170
+ @sock.write("get_expt key1 unix\r\n")
171
+ assert_equal("2147483647", @sock.gets.chomp )
172
+ assert_equal('END', @sock.gets.chomp )
173
+
174
+ # under 30days
175
+ now = Time.now.to_i
176
+ @sock.write("set_expt key1 600\r\n") # 10 min
177
+ assert_equal("STORED", @sock.gets.chomp )
178
+ @sock.write("get_expt key1\r\n")
179
+ assert_equal("#{Time.at(now+600)}", @sock.gets.chomp )
180
+ assert_equal("END", @sock.gets.chomp )
181
+ @sock.write("get_expt key1 unix\r\n")
182
+ assert_equal("#{now+600}", @sock.gets.chomp )
183
+ assert_equal("END", @sock.gets.chomp )
184
+
185
+ # over 30days
186
+ @sock.write("set_expt key1 #{t2 = Time.now.to_i+7776000}\r\n") # 90days
187
+ assert_equal("STORED", @sock.gets.chomp )
188
+ @sock.write("get_expt key1\r\n")
189
+ assert_equal("#{Time.at(t2)}", @sock.gets.chomp )
190
+ assert_equal("END", @sock.gets.chomp )
191
+ @sock.write("get_expt key1 unix\r\n")
192
+ assert_equal("#{t2}", @sock.gets.chomp )
193
+ assert_equal("END", @sock.gets.chomp )
194
+ end
195
+
131
196
  end