ls4 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +661 -0
  3. data/ChangeLog +9 -0
  4. data/NOTICE +8 -0
  5. data/README.rdoc +61 -0
  6. data/bin/ls4-cs +3 -0
  7. data/bin/ls4-ds +3 -0
  8. data/bin/ls4-gw +3 -0
  9. data/bin/ls4-standalone +3 -0
  10. data/bin/ls4cmd +3 -0
  11. data/bin/ls4ctl +3 -0
  12. data/bin/ls4rpc +3 -0
  13. data/bin/ls4stat +3 -0
  14. data/bin/ls4top +3 -0
  15. data/lib/ls4/command/cmd.rb +241 -0
  16. data/lib/ls4/command/cs.rb +190 -0
  17. data/lib/ls4/command/ctl.rb +278 -0
  18. data/lib/ls4/command/ds.rb +335 -0
  19. data/lib/ls4/command/gw.rb +256 -0
  20. data/lib/ls4/command/rpc.rb +172 -0
  21. data/lib/ls4/command/standalone.rb +318 -0
  22. data/lib/ls4/command/stat.rb +244 -0
  23. data/lib/ls4/command/top.rb +291 -0
  24. data/lib/ls4/default.rb +26 -0
  25. data/lib/ls4/lib/cclog.rb +220 -0
  26. data/lib/ls4/lib/ebus.rb +553 -0
  27. data/lib/ls4/lib/vbcode.rb +228 -0
  28. data/lib/ls4/logic/fault_detector.rb +212 -0
  29. data/lib/ls4/logic/membership.rb +253 -0
  30. data/lib/ls4/logic/node.rb +66 -0
  31. data/lib/ls4/logic/okey.rb +45 -0
  32. data/lib/ls4/logic/tsv_data.rb +81 -0
  33. data/lib/ls4/logic/weight.rb +166 -0
  34. data/lib/ls4/service/balance.rb +62 -0
  35. data/lib/ls4/service/base.rb +29 -0
  36. data/lib/ls4/service/bus.rb +37 -0
  37. data/lib/ls4/service/config.rb +63 -0
  38. data/lib/ls4/service/config_cs.rb +33 -0
  39. data/lib/ls4/service/config_ds.rb +56 -0
  40. data/lib/ls4/service/config_gw.rb +42 -0
  41. data/lib/ls4/service/data_client.rb +122 -0
  42. data/lib/ls4/service/data_server.rb +168 -0
  43. data/lib/ls4/service/data_server_url.rb +83 -0
  44. data/lib/ls4/service/gateway.rb +375 -0
  45. data/lib/ls4/service/gateway_ro.rb +91 -0
  46. data/lib/ls4/service/gw_http.rb +821 -0
  47. data/lib/ls4/service/heartbeat.rb +182 -0
  48. data/lib/ls4/service/log.rb +81 -0
  49. data/lib/ls4/service/master_select.rb +148 -0
  50. data/lib/ls4/service/mds.rb +292 -0
  51. data/lib/ls4/service/mds_cache.rb +294 -0
  52. data/lib/ls4/service/mds_cache_mem.rb +63 -0
  53. data/lib/ls4/service/mds_cache_memcached.rb +65 -0
  54. data/lib/ls4/service/mds_ha.rb +176 -0
  55. data/lib/ls4/service/mds_memcache.rb +209 -0
  56. data/lib/ls4/service/mds_tc.rb +508 -0
  57. data/lib/ls4/service/mds_tt.rb +472 -0
  58. data/lib/ls4/service/membership.rb +331 -0
  59. data/lib/ls4/service/process.rb +90 -0
  60. data/lib/ls4/service/rpc.rb +50 -0
  61. data/lib/ls4/service/rpc_cs.rb +101 -0
  62. data/lib/ls4/service/rpc_ds.rb +96 -0
  63. data/lib/ls4/service/rpc_gw.rb +255 -0
  64. data/lib/ls4/service/rts.rb +94 -0
  65. data/lib/ls4/service/rts_file.rb +76 -0
  66. data/lib/ls4/service/rts_memory.rb +55 -0
  67. data/lib/ls4/service/slave.rb +132 -0
  68. data/lib/ls4/service/stat.rb +91 -0
  69. data/lib/ls4/service/stat_cs.rb +25 -0
  70. data/lib/ls4/service/stat_ds.rb +40 -0
  71. data/lib/ls4/service/stat_gw.rb +25 -0
  72. data/lib/ls4/service/storage.rb +116 -0
  73. data/lib/ls4/service/storage_dir.rb +201 -0
  74. data/lib/ls4/service/sync.rb +206 -0
  75. data/lib/ls4/service/time_check.rb +80 -0
  76. data/lib/ls4/service/ulog.rb +159 -0
  77. data/lib/ls4/service/ulog_file.rb +398 -0
  78. data/lib/ls4/service/ulog_memory.rb +53 -0
  79. data/lib/ls4/service/weight.rb +134 -0
  80. data/lib/ls4/version.rb +5 -0
  81. data/test/01_add_get_remove.rt +84 -0
  82. data/test/02_read.rt +61 -0
  83. data/test/03_getd_readd.rt +69 -0
  84. data/test/04_version_time.rt +170 -0
  85. data/test/05_version_name.rt +161 -0
  86. data/test/06_http_get_set_remove_1.rt +119 -0
  87. data/test/07_http_get_set_remove_2.rt +116 -0
  88. data/test/08_read_only_time.rt +177 -0
  89. data/test/09_read_only_name.rt +173 -0
  90. data/test/10_http_get_set_remove_3.rt +73 -0
  91. data/test/11_mds_cache_memcached.rt +88 -0
  92. data/test/12_mds_cache_local_memory.rt +86 -0
  93. data/test/13_memcache_mds.rt +84 -0
  94. data/test/14_delete.rt +63 -0
  95. data/test/15_standalone.rt +71 -0
  96. data/test/chukan.rb +516 -0
  97. data/test/common.rb +250 -0
  98. data/test/load_test.rb +79 -0
  99. data/test/load_test_offload.rb +86 -0
  100. metadata +295 -0
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH << File.dirname(__FILE__)
3
+ require 'common'
4
+
5
+ LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
6
+ SIZE = (ARGV[1] || 10).to_i
7
+ NUM = (ARGV[2] || 50).to_i
8
+
9
+ mds = start_mds
10
+ cs = start_cs
11
+ ds0 = start_ds(0, 0)
12
+ ds1 = start_ds(1, 0)
13
+ ds2 = start_ds(2, 1)
14
+ ds3 = start_ds(3, 1)
15
+
16
+ cs.show_nodes
17
+ cs.show_version
18
+
19
+ gw = start_gw
20
+
21
+ pid = Process.pid
22
+ keyf = "#{pid}-key%d"
23
+ _data1 = "1"*SIZE
24
+ _data2 = "2"*SIZE
25
+
26
+ _data1[2,4] = "OVER"
27
+ _data1_0_8 = _data1[0,8]
28
+ _data1_3_20 = _data1[3,20]
29
+
30
+ _data2[2,4] = "OVER"
31
+ _data2_0_8 = _data2[0,8]
32
+ _data2_3_20 = _data2[3,20]
33
+
34
+ test "run normally" do
35
+ c = gw.client
36
+
37
+ LOOP.times {|o|
38
+ okeys1 = []
39
+ okeys2 = []
40
+
41
+ vname1 = "ver#{o}-1"
42
+ vname2 = "ver#{o}-2"
43
+ vname0 = "ver#{o}-0"
44
+
45
+ NUM.times do |i|
46
+ key = keyf % i
47
+ _attrs1 = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
48
+
49
+ test 'addv 1' do
50
+ c.call(:addv, vname1, key, _data1, _attrs1)
51
+ end
52
+ end
53
+
54
+ NUM.times do |i|
55
+ key = keyf % i
56
+ _attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
57
+
58
+ test 'addv 2' do
59
+ c.call(:addv, vname2, key, _data2, _attrs2)
60
+ end
61
+ end
62
+
63
+ NUM.times do |i|
64
+ key = keyf % i
65
+ _attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
66
+
67
+ test 'get head' do
68
+ data, attrs = c.call(:get, key)
69
+ test_equals _data2, data, 'get head _data2 == data'
70
+ test_equals _attrs2, attrs, 'get head _attrs2 == attrs'
71
+ end
72
+
73
+ test 'get_data head' do
74
+ data = c.call(:get_data, key)
75
+ test_equals _data2, data, 'get_data head _data2 == data'
76
+ end
77
+
78
+ test 'get_attrs head' do
79
+ attrs = c.call(:get_attrs, key)
80
+ test_equals _attrs2, attrs, 'get_attrs head _attrs2 == attrs'
81
+ end
82
+
83
+ test 'read head offset=0 size=8' do
84
+ data = c.call(:read, key, 0, 8)
85
+ test_equals _data2_0_8, data, 'read head _data2[0,8] == data'
86
+ end
87
+
88
+ test 'read head offset=3 size=20' do
89
+ data = c.call(:read, key, 3, 20)
90
+ test_equals _data2_3_20, data, 'read head _data2[3,20] == data'
91
+ end
92
+ end
93
+
94
+ NUM.times do |i|
95
+ key = keyf % i
96
+ _attrs1 = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
97
+
98
+ test 'getv 1' do
99
+ data, attrs = c.call(:getv, vname1, key)
100
+ test_equals _data1, data, 'getv 1 _data1 == data'
101
+ test_equals _attrs1, attrs, 'getv 1 _attrs1 == attrs'
102
+ end
103
+
104
+ test 'getv_data 1' do
105
+ data = c.call(:getv_data, vname1, key)
106
+ test_equals _data1, data, 'getv 1 _data1 == data'
107
+ end
108
+
109
+ test 'getv_attrs 1' do
110
+ attrs = c.call(:getv_attrs, vname1, key)
111
+ test_equals _attrs1, attrs, 'getv 1 _attrs1 == attrs'
112
+ end
113
+
114
+ test 'readv 1 offset=0 size=8' do
115
+ data = c.call(:readv, vname1, key, 0, 8)
116
+ test_equals _data1_0_8, data, 'readv 1 _data1[0,8] == data'
117
+ end
118
+
119
+ test 'readv 1 offset=3 size=20' do
120
+ data = c.call(:readv, vname1, key, 3, 20)
121
+ test_equals _data1_3_20, data, 'readv 1 _data1[3,20] == data'
122
+ end
123
+ end
124
+
125
+ NUM.times do |i|
126
+ key = keyf % i
127
+
128
+ test 'getv 0' do
129
+ data, attrs = c.call(:getv, vname0, key)
130
+ test_equals nil, data, 'getv 0 _data1 is not found'
131
+ test_equals nil, attrs, 'getv 0 _attrs1 is not founds'
132
+ end
133
+
134
+ test 'getv_data 0' do
135
+ data = c.call(:getv_data, vname0, key)
136
+ test_equals nil, data, 'getv 0 _data1 is not found'
137
+ end
138
+
139
+ test 'getv_attrs 0' do
140
+ attrs = c.call(:getv_attrs, vname0, key)
141
+ test_equals nil, attrs, 'getv 0 _attrs1 is not founds'
142
+ end
143
+
144
+ test 'readv 0 offset=0 size=8' do
145
+ data = c.call(:readv, vname0, key, 0, 8)
146
+ test_equals nil, data, 'readv 0 _data1[0,8] is not found'
147
+ end
148
+
149
+ test 'readv 0 offset=3 size=20' do
150
+ data = c.call(:readv, vname0, key, 3, 20)
151
+ test_equals nil, data, 'readv 0 _data1[3,20] is not found'
152
+ end
153
+ end
154
+ }
155
+ end
156
+
157
+ cs.show_items
158
+ cs.show_stat
159
+
160
+ term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
161
+
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH << File.dirname(__FILE__)
3
+ require 'common'
4
+
5
+ LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
6
+ SIZE = (ARGV[1] || 10).to_i
7
+ NUM = (ARGV[2] || 50).to_i
8
+
9
+ mds = start_mds
10
+ cs = start_cs
11
+ ds0 = start_ds(0, 0)
12
+ ds1 = start_ds(1, 0)
13
+ ds2 = start_ds(2, 1)
14
+ ds3 = start_ds(3, 1)
15
+
16
+ cs.show_nodes
17
+ cs.show_version
18
+
19
+ gw = start_gw
20
+
21
+ pid = Process.pid
22
+ keyf = "#{pid}-key%d"
23
+ _data = "@"*SIZE
24
+
25
+ test "run normally" do
26
+ c = gw.client
27
+
28
+ LOOP.times {|o|
29
+ NUM.times do |i|
30
+ key = keyf % i
31
+ _attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
32
+
33
+ test 'add_data POST /data' do
34
+ gw.http_client {|http|
35
+ req = Net::HTTP::Post.new("/data/#{key}")
36
+ req.set_form_data({:data=>_data})
37
+ res = http.request(req)
38
+ test_equals "200", res.code, "add_data 200 OK"
39
+ }
40
+ end
41
+
42
+ test 'update_attrs POST /attrs' do
43
+ gw.http_client {|http|
44
+ req = Net::HTTP::Post.new("/attrs/#{key}")
45
+ req.set_form_data({:attrs=>JSON.dump(_attrs)})
46
+ res = http.request(req)
47
+ test_equals "200", res.code, "update_attrs 202 OK"
48
+ }
49
+ end
50
+ end
51
+
52
+ NUM.times do |i|
53
+ key = keyf % i
54
+ _attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
55
+
56
+ test 'get_data /data' do
57
+ data = nil
58
+
59
+ gw.http_client {|http|
60
+ res = http.get("/data/#{key}")
61
+ test_equals "200", res.code, "get_data 200 OK"
62
+ data = res.body
63
+ }
64
+
65
+ test_equals _data, data, 'get_data _data == data'
66
+ end
67
+
68
+ test "get_attrs /attrs" do
69
+ attrs = nil
70
+
71
+ gw.http_client {|http|
72
+ res = http.get("/attrs/#{key}")
73
+ test_equals "200", res.code, "get_attrs 200 OK"
74
+ attrs = JSON.parse(res.body)
75
+ }
76
+
77
+ test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
78
+ end
79
+ end
80
+
81
+ NUM.times do |i|
82
+ key = keyf % i
83
+
84
+ test "delete /api" do
85
+ gw.http_client {|http|
86
+ req = Net::HTTP::Post.new('/api/delete')
87
+ req.set_form_data({:key=>key})
88
+ res = http.request(req)
89
+ test_equals "200", res.code, "delete 200 OK"
90
+ }
91
+ end
92
+ end
93
+
94
+ NUM.times do |i|
95
+ key = keyf % i
96
+
97
+ test 'deleted get_data /data' do
98
+ gw.http_client {|http|
99
+ res = http.get("/data/#{key}")
100
+ test_equals "404", res.code, 'get_data 404 Not Found'
101
+ p res.body
102
+ }
103
+ end
104
+
105
+ test 'deleted get_attrs /attrs' do
106
+ gw.http_client {|http|
107
+ res = http.get("/attrs/#{key}")
108
+ test_equals "404", res.code, 'get_attrs 404 Not Found'
109
+ }
110
+ end
111
+ end
112
+ }
113
+ end
114
+
115
+ cs.show_items
116
+ cs.show_stat
117
+
118
+ term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
119
+
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH << File.dirname(__FILE__)
3
+ require 'common'
4
+
5
+ LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
6
+ SIZE = (ARGV[1] || 10).to_i
7
+ NUM = (ARGV[2] || 50).to_i
8
+
9
+ mds = start_mds
10
+ cs = start_cs
11
+ ds0 = start_ds(0, 0)
12
+ ds1 = start_ds(1, 0)
13
+ ds2 = start_ds(2, 1)
14
+ ds3 = start_ds(3, 1)
15
+
16
+ cs.show_nodes
17
+ cs.show_version
18
+
19
+ gw = start_gw
20
+
21
+ pid = Process.pid
22
+ keyf = "#{pid}-key%d"
23
+ _data = "@"*SIZE
24
+
25
+ test "run normally" do
26
+ LOOP.times {|o|
27
+ NUM.times do |i|
28
+ key = keyf % i
29
+ _attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
30
+
31
+ test 'add_data PUT /data' do
32
+ gw.http_client {|http|
33
+ req = Net::HTTP::Put.new("/data/#{key}")
34
+ req.body = _data
35
+ res = http.request(req)
36
+ test_equals "202", res.code, "add_data 202 Accepted"
37
+ }
38
+ end
39
+
40
+ test 'update_attrs PUT /attrs' do
41
+ gw.http_client {|http|
42
+ req = Net::HTTP::Put.new("/attrs/#{key}")
43
+ req.body = JSON.dump(_attrs)
44
+ res = http.request(req)
45
+ test_equals "202", res.code, "update_attrs 202 Accepted"
46
+ }
47
+ end
48
+ end
49
+
50
+ NUM.times do |i|
51
+ key = keyf % i
52
+ _attrs = {"loop"=>o.to_s, "attr#{i}"=>i.to_s}
53
+
54
+ test 'get_data /api' do
55
+ data = nil
56
+
57
+ gw.http_client {|http|
58
+ res = http.get("/api/get_data?key=#{key}")
59
+ test_equals "200", res.code, "get_data 200 OK"
60
+ data = res.body
61
+ }
62
+
63
+ test_equals _data, data, 'get_data _data == data'
64
+ end
65
+
66
+ test "get_attrs /api" do
67
+ attrs = nil
68
+
69
+ gw.http_client {|http|
70
+ res = http.get("/api/get_attrs?key=#{key}")
71
+ test_equals "200", res.code, "get_attrs 200 OK"
72
+ attrs = JSON.parse(res.body)
73
+ }
74
+
75
+ test_equals _attrs, attrs, 'get_attrs _attrs == attrs'
76
+ end
77
+ end
78
+
79
+ NUM.times do |i|
80
+ key = keyf % i
81
+
82
+ test "remove /api" do
83
+ gw.http_client {|http|
84
+ req = Net::HTTP::Post.new('/api/remove')
85
+ req.set_form_data({:key=>key})
86
+ res = http.request(req)
87
+ test_equals "200", res.code, "remove 200 OK"
88
+ }
89
+ end
90
+ end
91
+
92
+ NUM.times do |i|
93
+ key = keyf % i
94
+
95
+ test 'removed get_data /api' do
96
+ gw.http_client {|http|
97
+ res = http.get("/api/get_data?key=#{key}")
98
+ test_equals "404", res.code, 'get_data 404 Not Found'
99
+ }
100
+ end
101
+
102
+ test 'removed get_attrs /api' do
103
+ gw.http_client {|http|
104
+ res = http.get("/api/get_attrs?key=#{key}")
105
+ test_equals "404", res.code, 'get_attrs 404 Not Found'
106
+ }
107
+ end
108
+ end
109
+ }
110
+ end
111
+
112
+ cs.show_items
113
+ cs.show_stat
114
+
115
+ term_all(ds0, ds1, ds2, ds3, gw, mds, cs)
116
+
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH << File.dirname(__FILE__)
3
+ require 'common'
4
+
5
+ LOOP = (ARGV[0] || ENV["LOOP"] || (ENV["HEAVY"] ? 20 : 3)).to_i
6
+ SIZE = (ARGV[1] || 10).to_i
7
+ NUM = (ARGV[2] || 50).to_i
8
+
9
+ mds = start_mds
10
+ cs = start_cs
11
+ ds0 = start_ds(0, 0)
12
+ ds1 = start_ds(1, 0)
13
+ ds2 = start_ds(2, 1)
14
+ ds3 = start_ds(3, 1)
15
+
16
+ cs.show_nodes
17
+ cs.show_version
18
+
19
+ gw = start_gw
20
+
21
+ rogw = []
22
+
23
+ pid = Process.pid
24
+ keyf = "#{pid}-key%d"
25
+ _data1 = "1"*SIZE
26
+ _data2 = "2"*SIZE
27
+
28
+ _data1[2,4] = "OVER"
29
+ _data1_0_8 = _data1[0,8]
30
+ _data1_3_20 = _data1[3,20]
31
+
32
+ _data2[2,4] = "OVER"
33
+ _data2_0_8 = _data2[0,8]
34
+ _data2_3_20 = _data2[3,20]
35
+
36
+ test "run normally" do
37
+ c = gw.client
38
+
39
+ gw0 = start_gw(rogw.size+1, "--read-only-time #{Time.now.utc.to_i}")
40
+ rogw << gw0
41
+
42
+ sleep 3
43
+
44
+ NUM.times do |i|
45
+ key = keyf % i
46
+ _attrs1 = {"loop"=>"0", "attr#{i}"=>i.to_s}
47
+
48
+ test 'add 1' do
49
+ c.call(:add, key, _data1, _attrs1)
50
+ end
51
+ end
52
+
53
+ sleep 2
54
+
55
+ gw1 = start_gw(rogw.size+1, "--read-only-time #{Time.now.utc.to_i}")
56
+ rogw << gw1
57
+
58
+ sleep 3
59
+
60
+ NUM.times do |i|
61
+ key = keyf % i
62
+ _attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
63
+
64
+ test 'add 2' do
65
+ c.call(:add, key, _data2, _attrs2)
66
+ end
67
+ end
68
+
69
+ sleep 2
70
+
71
+ gw2 = start_gw(rogw.size+1, "--read-only-time #{Time.now.utc.to_i}")
72
+ rogw << gw2
73
+
74
+ c2 = gw2.client
75
+
76
+ NUM.times do |i|
77
+ key = keyf % i
78
+ _attrs2 = {"loop"=>"2", "attr2#{i}"=>i.to_s}
79
+
80
+ test 'get 2' do
81
+ data, attrs = c2.call(:get, key)
82
+ test_equals _data2, data, 'get 2 _data2 == data'
83
+ test_equals _attrs2, attrs, 'get 2 _attrs2 == attrs'
84
+ end
85
+
86
+ test 'get_data 2' do
87
+ data = c2.call(:get_data, key)
88
+ test_equals _data2, data, 'get_data 2 _data2 == data'
89
+ end
90
+
91
+ test 'get_attrs 2' do
92
+ attrs = c2.call(:get_attrs, key)
93
+ test_equals _attrs2, attrs, 'get_attrs 2 _attrs2 == attrs'
94
+ end
95
+
96
+ test 'read 2 offset=0 size=8' do
97
+ data = c2.call(:read, key, 0, 8)
98
+ test_equals _data2_0_8, data, 'read 2 _data2[0,8] == data'
99
+ end
100
+
101
+ test 'read 2 offset=3 size=20' do
102
+ data = c2.call(:read, key, 3, 20)
103
+ test_equals _data2_3_20, data, 'read 2 _data2[3,20] == data'
104
+ end
105
+ end
106
+
107
+ c1 = gw1.client
108
+
109
+ NUM.times do |i|
110
+ key = keyf % i
111
+ _attrs1 = {"loop"=>"0", "attr#{i}"=>i.to_s}
112
+
113
+ test 'get 1' do
114
+ data, attrs = c1.call(:get, key)
115
+ test_equals _data1, data, 'get 1 _data1 == data'
116
+ test_equals _attrs1, attrs, 'get 1 _attrs1 == attrs'
117
+ end
118
+
119
+ test 'get_data 1' do
120
+ data = c1.call(:get_data, key)
121
+ test_equals _data1, data, 'get 1 _data1 == data'
122
+ end
123
+
124
+ test 'get_attrs 1' do
125
+ attrs = c1.call(:get_attrs, key)
126
+ test_equals _attrs1, attrs, 'get 1 _attrs1 == attrs'
127
+ end
128
+
129
+ test 'read 1 offset=0 size=8' do
130
+ data = c1.call(:read, key, 0, 8)
131
+ test_equals _data1_0_8, data, 'read 1 _data1[0,8] == data'
132
+ end
133
+
134
+ test 'read 1 offset=3 size=20' do
135
+ data = c1.call(:read, key, 3, 20)
136
+ test_equals _data1_3_20, data, 'read 1 _data1[3,20] == data'
137
+ end
138
+ end
139
+
140
+ c0 = gw0.client
141
+
142
+ NUM.times do |i|
143
+ key = keyf % i
144
+
145
+ test 'get 0' do
146
+ data, attrs = c0.call(:get, key)
147
+ test_equals nil, data, 'get 0 _data1 is not found'
148
+ test_equals nil, attrs, 'get 0 _attrs1 is not founds'
149
+ end
150
+
151
+ test 'get_data 0' do
152
+ data = c0.call(:get_data, key)
153
+ test_equals nil, data, 'get 0 _data1 is not found'
154
+ end
155
+
156
+ test 'get_attrs 0' do
157
+ attrs = c0.call(:get_attrs, key)
158
+ test_equals nil, attrs, 'get 0 _attrs1 is not founds'
159
+ end
160
+
161
+ test 'read 0 offset=0 size=8' do
162
+ data = c0.call(:read, key, 0, 8)
163
+ test_equals nil, data, 'read 0 _data1[0,8] is not found'
164
+ end
165
+
166
+ test 'read 0 offset=3 size=20' do
167
+ data = c0.call(:read, key, 3, 20)
168
+ test_equals nil, data, 'read 0 _data1[3,20] is not found'
169
+ end
170
+ end
171
+ end
172
+
173
+ cs.show_items
174
+ cs.show_stat
175
+
176
+ term_all(ds0, ds1, ds2, ds3, gw, mds, cs, *rogw)
177
+