ls4 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+