riak-client 2.5.0 → 2.6.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.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/RELNOTES.md +3 -0
- data/lib/riak/bucket.rb +1 -1
- data/lib/riak/client.rb +14 -7
- data/lib/riak/client/beefcake/messages.rb +13 -0
- data/lib/riak/multi.rb +101 -0
- data/lib/riak/multiexist.rb +14 -0
- data/lib/riak/multiget.rb +7 -107
- data/lib/riak/version.rb +1 -1
- metadata +12 -234
- data/.document +0 -5
- data/.gitignore +0 -44
- data/.rspec +0 -2
- data/Gemfile +0 -17
- data/Guardfile +0 -20
- data/Rakefile +0 -124
- data/riak-client.gemspec +0 -71
- data/spec/failover/failover.rb +0 -59
- data/spec/fixtures/bitcask.txt +0 -25
- data/spec/fixtures/cat.jpg +0 -0
- data/spec/fixtures/multipart-basic-conflict.txt +0 -15
- data/spec/fixtures/multipart-blank.txt +0 -7
- data/spec/fixtures/multipart-mapreduce.txt +0 -10
- data/spec/fixtures/multipart-with-body.txt +0 -16
- data/spec/fixtures/multipart-with-marked-tombstones.txt +0 -17
- data/spec/fixtures/multipart-with-unmarked-tombstone.txt +0 -16
- data/spec/fixtures/server.cert.crt +0 -15
- data/spec/fixtures/server.cert.key +0 -15
- data/spec/fixtures/test.pem +0 -1
- data/spec/fixtures/yz_schema_template.xml +0 -18
- data/spec/integration/riak/bucket_types_spec.rb +0 -308
- data/spec/integration/riak/conflict_resolution_spec.rb +0 -96
- data/spec/integration/riak/counters_spec.rb +0 -36
- data/spec/integration/riak/crdt/configuration_spec.rb +0 -38
- data/spec/integration/riak/crdt_search_spec.rb +0 -176
- data/spec/integration/riak/crdt_spec.rb +0 -332
- data/spec/integration/riak/crdt_validation/map_spec.rb +0 -63
- data/spec/integration/riak/crdt_validation/set_spec.rb +0 -122
- data/spec/integration/riak/encodings/crdt_spec.rb +0 -122
- data/spec/integration/riak/encodings/kv_spec.rb +0 -87
- data/spec/integration/riak/encodings/yz_spec.rb +0 -142
- data/spec/integration/riak/preflist_spec.rb +0 -43
- data/spec/integration/riak/properties_spec.rb +0 -69
- data/spec/integration/riak/protobuffs/interrupted_request_spec.rb +0 -33
- data/spec/integration/riak/protobuffs/timeouts_spec.rb +0 -178
- data/spec/integration/riak/protobuffs_backends_spec.rb +0 -40
- data/spec/integration/riak/search_spec.rb +0 -104
- data/spec/integration/riak/secondary_index_spec.rb +0 -72
- data/spec/integration/riak/security_spec.rb +0 -105
- data/spec/integration/riak/threading_spec.rb +0 -154
- data/spec/integration/riak/time_series_spec.rb +0 -212
- data/spec/integration/yokozuna/index_spec.rb +0 -61
- data/spec/integration/yokozuna/queries_spec.rb +0 -115
- data/spec/integration/yokozuna/schema_spec.rb +0 -49
- data/spec/riak/beefcake_protobuffs_backend/bucket_properties_operator_spec.rb +0 -247
- data/spec/riak/beefcake_protobuffs_backend/crdt_operator_spec.rb +0 -244
- data/spec/riak/beefcake_protobuffs_backend/object_methods_spec.rb +0 -53
- data/spec/riak/beefcake_protobuffs_backend/protocol_spec.rb +0 -189
- data/spec/riak/beefcake_protobuffs_backend/ts_cell_codec_spec.rb +0 -124
- data/spec/riak/beefcake_protobuffs_backend_spec.rb +0 -162
- data/spec/riak/bucket_properties_spec.rb +0 -135
- data/spec/riak/bucket_spec.rb +0 -275
- data/spec/riak/bucket_type_spec.rb +0 -50
- data/spec/riak/bucket_typed/bucket_spec.rb +0 -78
- data/spec/riak/client_spec.rb +0 -304
- data/spec/riak/core_ext/to_param_spec.rb +0 -15
- data/spec/riak/counter_spec.rb +0 -122
- data/spec/riak/crdt/counter_spec.rb +0 -55
- data/spec/riak/crdt/hyper_log_log_spec.rb +0 -56
- data/spec/riak/crdt/inner_counter_spec.rb +0 -21
- data/spec/riak/crdt/inner_flag_spec.rb +0 -39
- data/spec/riak/crdt/inner_map_spec.rb +0 -47
- data/spec/riak/crdt/inner_register_spec.rb +0 -40
- data/spec/riak/crdt/inner_set_spec.rb +0 -33
- data/spec/riak/crdt/map_spec.rb +0 -78
- data/spec/riak/crdt/set_spec.rb +0 -61
- data/spec/riak/crdt/shared_examples.rb +0 -88
- data/spec/riak/crdt/typed_collection_spec.rb +0 -225
- data/spec/riak/escape_spec.rb +0 -72
- data/spec/riak/feature_detection_spec.rb +0 -77
- data/spec/riak/index_collection_spec.rb +0 -53
- data/spec/riak/instrumentation_spec.rb +0 -124
- data/spec/riak/link_spec.rb +0 -85
- data/spec/riak/list_buckets_spec.rb +0 -41
- data/spec/riak/map_reduce/filter_builder_spec.rb +0 -32
- data/spec/riak/map_reduce/phase_spec.rb +0 -142
- data/spec/riak/map_reduce_spec.rb +0 -434
- data/spec/riak/multiget_spec.rb +0 -81
- data/spec/riak/node_spec.rb +0 -26
- data/spec/riak/robject_spec.rb +0 -542
- data/spec/riak/search/index_spec.rb +0 -72
- data/spec/riak/search/query_spec.rb +0 -88
- data/spec/riak/search/result_collection_spec.rb +0 -89
- data/spec/riak/search/result_document_spec.rb +0 -106
- data/spec/riak/search/schema_spec.rb +0 -63
- data/spec/riak/search_spec.rb +0 -107
- data/spec/riak/secondary_index_spec.rb +0 -225
- data/spec/riak/serializers_spec.rb +0 -121
- data/spec/riak/stamp_spec.rb +0 -54
- data/spec/riak/time_series/deletion_spec.rb +0 -33
- data/spec/riak/time_series/listing_spec.rb +0 -51
- data/spec/riak/time_series/submission_spec.rb +0 -35
- data/spec/riak/util/gzip_spec.rb +0 -49
- data/spec/riak/walk_spec_spec.rb +0 -203
- data/spec/spec_helper.rb +0 -67
- data/spec/support/certs/README.md +0 -13
- data/spec/support/certs/ca.crt +0 -21
- data/spec/support/certs/client.crl +0 -13
- data/spec/support/certs/client.crt +0 -94
- data/spec/support/certs/client.csr +0 -18
- data/spec/support/certs/client.key +0 -27
- data/spec/support/certs/empty_ca.crt +0 -21
- data/spec/support/certs/server.crl +0 -13
- data/spec/support/certs/server.crt +0 -94
- data/spec/support/certs/server.key +0 -27
- data/spec/support/crdt_search_config.rb +0 -112
- data/spec/support/crdt_search_fixtures.rb +0 -42
- data/spec/support/integration_setup.rb +0 -10
- data/spec/support/search_config.rb +0 -83
- data/spec/support/search_corpus_setup.rb +0 -39
- data/spec/support/test_client.rb +0 -52
- data/spec/support/test_client.yml.example +0 -10
- data/spec/support/unified_backend_examples.rb +0 -402
- data/spec/support/version_filter.rb +0 -12
- data/spec/support/wait_until.rb +0 -20
@@ -1,244 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
Riak::Client::BeefcakeProtobuffsBackend.configured?
|
3
|
-
|
4
|
-
describe Riak::Client::BeefcakeProtobuffsBackend::CrdtOperator do
|
5
|
-
|
6
|
-
let(:backend_class){ Riak::Client::BeefcakeProtobuffsBackend }
|
7
|
-
let(:backend){ double 'beefcake protobuffs backend' }
|
8
|
-
subject { described_class.new backend }
|
9
|
-
|
10
|
-
|
11
|
-
describe 'operating on a counter' do
|
12
|
-
let(:increment){ 5 }
|
13
|
-
let(:operation) do
|
14
|
-
Riak::Crdt::Operation::Update.new.tap do |op|
|
15
|
-
op.type = :counter
|
16
|
-
op.value = increment
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'serializes a counter operation into protobuffs' do
|
21
|
-
result = subject.serialize operation
|
22
|
-
|
23
|
-
expect(result).to be_a backend_class::DtOp
|
24
|
-
expect(result.counter_op).to be_a backend_class::CounterOp
|
25
|
-
expect(result.counter_op.increment).to eq increment
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'serializes multiple counter operations into protobuffs' do
|
29
|
-
result = subject.serialize [operation, operation]
|
30
|
-
|
31
|
-
expect{result.encode}.to_not raise_error
|
32
|
-
|
33
|
-
expect(result).to be_a backend_class::DtOp
|
34
|
-
expect(result.counter_op).to be_a backend_class::CounterOp
|
35
|
-
expect(result.counter_op.increment).to eq (increment * 2)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'operating on a set' do
|
40
|
-
let(:added_element){ 'added_element' }
|
41
|
-
let(:removed_element){ 'removed_element' }
|
42
|
-
let(:operation) do
|
43
|
-
Riak::Crdt::Operation::Update.new.tap do |op|
|
44
|
-
op.type = :set
|
45
|
-
op.value = {
|
46
|
-
add: [added_element],
|
47
|
-
remove: [removed_element]
|
48
|
-
}
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'serializes a set operation into protobuffs' do
|
53
|
-
result = subject.serialize operation
|
54
|
-
|
55
|
-
expect{result.encode}.to_not raise_error
|
56
|
-
|
57
|
-
expect(result).to be_a backend_class::DtOp
|
58
|
-
expect(result.set_op).to be_a backend_class::SetOp
|
59
|
-
expect(result.set_op.adds).to eq [added_element]
|
60
|
-
expect(result.set_op.removes).to eq [removed_element]
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe 'operating on a hyper_log_log' do
|
65
|
-
let(:added_element){ 'added_element' }
|
66
|
-
let(:operation) do
|
67
|
-
Riak::Crdt::Operation::Update.new.tap do |op|
|
68
|
-
op.type = :hll
|
69
|
-
op.value = {
|
70
|
-
add: [added_element]
|
71
|
-
}
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'serializes a hyper_log_log operation into protobuffs' do
|
76
|
-
result = subject.serialize operation
|
77
|
-
|
78
|
-
expect{result.encode}.to_not raise_error
|
79
|
-
|
80
|
-
expect(result).to be_a backend_class::DtOp
|
81
|
-
expect(result.hll_op).to be_a backend_class::HllOp
|
82
|
-
expect(result.hll_op.adds).to eq [added_element]
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe 'operating on a map' do
|
87
|
-
it 'serializes inner counter operations' do
|
88
|
-
counter_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
89
|
-
op.name = 'inner_counter'
|
90
|
-
op.type = :counter
|
91
|
-
op.value = 12345
|
92
|
-
end
|
93
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
94
|
-
op.type = :map
|
95
|
-
op.value = counter_op
|
96
|
-
end
|
97
|
-
|
98
|
-
result = subject.serialize map_op
|
99
|
-
|
100
|
-
expect{result.encode}.to_not raise_error
|
101
|
-
|
102
|
-
expect(result).to be_a backend_class::DtOp
|
103
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
104
|
-
map_update = result.map_op.updates.first
|
105
|
-
expect(map_update).to be_a backend_class::MapUpdate
|
106
|
-
expect(map_update.counter_op).to be_a backend_class::CounterOp
|
107
|
-
expect(map_update.counter_op.increment).to eq 12345
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'serializes inner flag operations' do
|
111
|
-
flag_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
112
|
-
op.name = 'inner_flag'
|
113
|
-
op.type = :flag
|
114
|
-
op.value = true
|
115
|
-
end
|
116
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
117
|
-
op.type = :map
|
118
|
-
op.value = flag_op
|
119
|
-
end
|
120
|
-
|
121
|
-
result = subject.serialize map_op
|
122
|
-
|
123
|
-
expect{result.encode}.to_not raise_error
|
124
|
-
|
125
|
-
expect(result).to be_a backend_class::DtOp
|
126
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
127
|
-
map_update = result.map_op.updates.first
|
128
|
-
expect(map_update).to be_a backend_class::MapUpdate
|
129
|
-
expect(map_update.flag_op).to eq backend_class::MapUpdate::FlagOp::ENABLE
|
130
|
-
|
131
|
-
flag_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
132
|
-
op.name = 'inner_flag'
|
133
|
-
op.type = :flag
|
134
|
-
op.value = false
|
135
|
-
end
|
136
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
137
|
-
op.type = :map
|
138
|
-
op.value = flag_op
|
139
|
-
end
|
140
|
-
|
141
|
-
result = subject.serialize map_op
|
142
|
-
|
143
|
-
expect{result.encode}.to_not raise_error
|
144
|
-
|
145
|
-
expect(result).to be_a backend_class::DtOp
|
146
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
147
|
-
map_update = result.map_op.updates.first
|
148
|
-
expect(map_update).to be_a backend_class::MapUpdate
|
149
|
-
expect(map_update.flag_op).to eq backend_class::MapUpdate::FlagOp::DISABLE
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'serializes inner register operations' do
|
153
|
-
register_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
154
|
-
op.name = 'inner_register'
|
155
|
-
op.type = :register
|
156
|
-
op.value = 'hello'
|
157
|
-
end
|
158
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
159
|
-
op.type = :map
|
160
|
-
op.value = register_op
|
161
|
-
end
|
162
|
-
|
163
|
-
result = subject.serialize map_op
|
164
|
-
|
165
|
-
expect{result.encode}.to_not raise_error
|
166
|
-
|
167
|
-
expect(result).to be_a backend_class::DtOp
|
168
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
169
|
-
map_update = result.map_op.updates.first
|
170
|
-
expect(map_update).to be_a backend_class::MapUpdate
|
171
|
-
expect(map_update.register_op).to eq 'hello'
|
172
|
-
|
173
|
-
delete_op = Riak::Crdt::Operation::Delete.new.tap do |op|
|
174
|
-
op.name = 'inner_register'
|
175
|
-
op.type = :register
|
176
|
-
end
|
177
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
178
|
-
op.type = :map
|
179
|
-
op.value = delete_op
|
180
|
-
end
|
181
|
-
|
182
|
-
result = subject.serialize map_op
|
183
|
-
|
184
|
-
expect{ result.encode }.to_not raise_error
|
185
|
-
|
186
|
-
expect(result).to be_a backend_class::DtOp
|
187
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
188
|
-
map_delete = result.map_op.removes.first
|
189
|
-
expect(map_delete).to be_a backend_class::MapField
|
190
|
-
expect(map_delete.name).to eq 'inner_register'
|
191
|
-
expect(map_delete.type).to eq backend_class::MapField::MapFieldType::REGISTER
|
192
|
-
end
|
193
|
-
|
194
|
-
it 'serializes inner set operations' do
|
195
|
-
set_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
196
|
-
op.name = 'inner_set'
|
197
|
-
op.type = :set
|
198
|
-
op.value = {add: 'added_member'}
|
199
|
-
end
|
200
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
201
|
-
op.type = :map
|
202
|
-
op.value = set_op
|
203
|
-
end
|
204
|
-
|
205
|
-
result = subject.serialize map_op
|
206
|
-
|
207
|
-
expect{result.encode}.to_not raise_error
|
208
|
-
|
209
|
-
expect(result).to be_a backend_class::DtOp
|
210
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
211
|
-
map_update = result.map_op.updates.first
|
212
|
-
expect(map_update).to be_a backend_class::MapUpdate
|
213
|
-
expect(map_update.set_op.adds).to eq 'added_member'
|
214
|
-
end
|
215
|
-
|
216
|
-
it 'serializes inner map operations' do
|
217
|
-
register_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
218
|
-
op.name = 'inner_inner_register'
|
219
|
-
op.type = :register
|
220
|
-
op.value = 'inner_register_value'
|
221
|
-
end
|
222
|
-
inner_map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
223
|
-
op.name = 'inner_map'
|
224
|
-
op.type = :map
|
225
|
-
op.value = register_op
|
226
|
-
end
|
227
|
-
map_op = Riak::Crdt::Operation::Update.new.tap do |op|
|
228
|
-
op.type = :map
|
229
|
-
op.value = inner_map_op
|
230
|
-
end
|
231
|
-
|
232
|
-
result = subject.serialize map_op
|
233
|
-
|
234
|
-
expect{result.encode}.to_not raise_error
|
235
|
-
|
236
|
-
expect(result).to be_a backend_class::DtOp
|
237
|
-
expect(result.map_op).to be_a backend_class::MapOp
|
238
|
-
map_update = result.map_op.updates.first
|
239
|
-
expect(map_update).to be_a backend_class::MapUpdate
|
240
|
-
expect(map_update.map_op).to be_a backend_class::MapOp
|
241
|
-
expect(map_update.map_op.updates.first.register_op).to eq 'inner_register_value'
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'riak/client/beefcake/object_methods'
|
3
|
-
require 'riak/client/beefcake/messages'
|
4
|
-
|
5
|
-
describe Riak::Client::BeefcakeProtobuffsBackend::ObjectMethods do
|
6
|
-
before :each do
|
7
|
-
@client = Riak::Client.new
|
8
|
-
@backend = Riak::Client::BeefcakeProtobuffsBackend.new(@client, @client.node)
|
9
|
-
@bucket = Riak::Bucket.new(@client, "bucket")
|
10
|
-
@object = Riak::RObject.new(@bucket, "bar")
|
11
|
-
@content = double(
|
12
|
-
:value => '',
|
13
|
-
:vtag => nil,
|
14
|
-
:content_type => nil,
|
15
|
-
:content_encoding => nil,
|
16
|
-
:links => nil,
|
17
|
-
:usermeta => nil,
|
18
|
-
:last_mod => nil,
|
19
|
-
:last_mod_usecs => nil,
|
20
|
-
:indexes => nil,
|
21
|
-
:charset => nil
|
22
|
-
)
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "loading object data from the response" do
|
26
|
-
it "loads the key" do
|
27
|
-
pbuf = double(:vclock => nil, :content => [@content], :value => nil, :key => 'akey')
|
28
|
-
o = @backend.load_object(pbuf, @object)
|
29
|
-
expect(o).to eq(@object)
|
30
|
-
expect(o.key).to eq(pbuf.key)
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "last_modified" do
|
34
|
-
before :each do
|
35
|
-
allow(@content).to receive(:last_mod) { 1271442363 }
|
36
|
-
end
|
37
|
-
|
38
|
-
it "is set to time of last_mod with microseconds from last_mod_usecs" do
|
39
|
-
allow(@content).to receive(:last_mod_usecs) { 105696 }
|
40
|
-
pbuf = double(:vclock => nil, :content => [@content], :value => nil, :key => 'akey')
|
41
|
-
o = @backend.load_object(pbuf, @object)
|
42
|
-
expect(o.last_modified).to eq(Time.at(1271442363, 105696))
|
43
|
-
end
|
44
|
-
|
45
|
-
it "is set to time of last_mod without microseconds if last_mod_usecs is missing" do
|
46
|
-
pbuf = double(:vclock => nil, :content => [@content], :value => nil, :key => 'akey')
|
47
|
-
o = @backend.load_object(pbuf, @object)
|
48
|
-
expect(o.last_modified).to eq(Time.at(1271442363, 0))
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
@@ -1,189 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'riak/client/beefcake/protocol'
|
3
|
-
|
4
|
-
describe Riak::Client::BeefcakeProtobuffsBackend::Protocol do
|
5
|
-
let(:socket){ double 'Socket' }
|
6
|
-
subject{ described_class.new socket }
|
7
|
-
let(:codes){ Riak::Client::BeefcakeMessageCodes }
|
8
|
-
|
9
|
-
let(:yz_req){ Riak::Client::BeefcakeProtobuffsBackend::
|
10
|
-
RpbYokozunaSchemaGetReq.new name: 'schema' }
|
11
|
-
let(:ctr_resp){ Riak::Client::BeefcakeProtobuffsBackend::
|
12
|
-
RpbCounterGetResp.new value: rand(2**10) }
|
13
|
-
let(:error_resp){ Riak::Client::BeefcakeProtobuffsBackend::
|
14
|
-
RpbErrorResp.new errcode: rand(2**10), errmsg: 'message' }
|
15
|
-
|
16
|
-
describe 'writing messages' do
|
17
|
-
# I really wanted to call this "send" but Ruby already has that method
|
18
|
-
|
19
|
-
it 'writes messages without a body' do
|
20
|
-
name = :PingReq
|
21
|
-
|
22
|
-
expect(socket).to receive(:write) { |payload|
|
23
|
-
length, code = payload.unpack 'NC'
|
24
|
-
expect(length).to eq 1
|
25
|
-
expect(code).to eq codes.index name
|
26
|
-
}.ordered
|
27
|
-
expect(socket).to receive(:flush).ordered
|
28
|
-
|
29
|
-
subject.write name
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'writes messages with Beefcake::Message instances as bodies' do
|
33
|
-
message = yz_req
|
34
|
-
name = :YokozunaSchemaGetReq
|
35
|
-
|
36
|
-
expect(socket).to receive(:write) { |payload|
|
37
|
-
header = payload[0..4]
|
38
|
-
body = payload[5..-1]
|
39
|
-
length, code = header.unpack 'NC'
|
40
|
-
expect(code).to eq codes.index name
|
41
|
-
expect(length).to eq(body.length + 1)
|
42
|
-
expect(body).to eq message.encode.to_s
|
43
|
-
}.ordered
|
44
|
-
expect(socket).to receive(:flush).ordered
|
45
|
-
|
46
|
-
subject.write name, message
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'raises an error and writes nothing when passed the wrong thing' do
|
50
|
-
expect{ subject.write :YokozunaSchemaGetReq, Object.new }.
|
51
|
-
to raise_error
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe 'receiving messages' do
|
56
|
-
it 'receives messages without a body and returns an array of code-symbol and nil' do
|
57
|
-
name = :PingResp
|
58
|
-
header = [1, codes.index(name)].pack 'NC'
|
59
|
-
expect(socket).to receive(:read).
|
60
|
-
ordered.
|
61
|
-
with(5).
|
62
|
-
and_return(header)
|
63
|
-
|
64
|
-
code, payload = subject.receive
|
65
|
-
|
66
|
-
expect(code).to eq name
|
67
|
-
expect(payload).to eq nil
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'receives messages and returns an array of code-symbol and string' do
|
71
|
-
message = ctr_resp
|
72
|
-
message_str = message.encode.to_s
|
73
|
-
message_len = message_str.length
|
74
|
-
name = :CounterGetResp
|
75
|
-
header = [message_len + 1, codes.index(name)].pack 'NC'
|
76
|
-
|
77
|
-
expect(socket).to receive(:read).
|
78
|
-
ordered.
|
79
|
-
with(5).
|
80
|
-
and_return(header)
|
81
|
-
expect(socket).to receive(:read).
|
82
|
-
ordered.
|
83
|
-
with(message_len).
|
84
|
-
and_return(message_str)
|
85
|
-
|
86
|
-
code, payload = subject.receive
|
87
|
-
|
88
|
-
expect(code).to eq name
|
89
|
-
expect(payload).to eq message_str
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe 'expecting messages' do
|
94
|
-
describe 'expected message received' do
|
95
|
-
it 'accepts expected messages without a body and returns true' do
|
96
|
-
name = :PingResp
|
97
|
-
header = [1, codes.index(name)].pack 'NC'
|
98
|
-
|
99
|
-
expect(socket).to receive(:read).
|
100
|
-
with(5).
|
101
|
-
and_return(header)
|
102
|
-
|
103
|
-
payload = subject.expect name
|
104
|
-
|
105
|
-
expect(payload).to eq true
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'accepts expected messages and returns a Beefcake::Message instance' do
|
109
|
-
message = ctr_resp
|
110
|
-
message_str = message.encode.to_s
|
111
|
-
message_len = message_str.length
|
112
|
-
name = :CounterGetResp
|
113
|
-
header = [message_len + 1, codes.index(name)].pack 'NC'
|
114
|
-
|
115
|
-
expect(socket).to receive(:read).
|
116
|
-
ordered.
|
117
|
-
with(5).
|
118
|
-
and_return(header)
|
119
|
-
expect(socket).to receive(:read).
|
120
|
-
ordered.
|
121
|
-
with(message_len).
|
122
|
-
and_return(message_str)
|
123
|
-
|
124
|
-
payload = subject.expect name, message.class
|
125
|
-
|
126
|
-
expect(payload).to eq message
|
127
|
-
expect(payload.value).to eq message.value
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'accepts messages with an empty body when required to' do
|
131
|
-
name = :PutResp
|
132
|
-
header = [1, codes.index(name)].pack 'NC'
|
133
|
-
decoder_class = double 'RpbPutResp'
|
134
|
-
|
135
|
-
expect(socket).to receive(:read).
|
136
|
-
with(5).
|
137
|
-
and_return(header)
|
138
|
-
|
139
|
-
payload = subject.expect name, decoder_class, empty_body_acceptable: true
|
140
|
-
|
141
|
-
expect(payload).to eq :empty
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
describe 'unexpected message received' do
|
146
|
-
it 'raises a ProtobuffsUnexpectedResponse error' do
|
147
|
-
message = ctr_resp
|
148
|
-
message_str = message.encode.to_s
|
149
|
-
message_len = message_str.length
|
150
|
-
name = :CounterGetResp
|
151
|
-
header = [message_len + 1, codes.index(name)].pack 'NC'
|
152
|
-
|
153
|
-
expect(socket).to receive(:read).
|
154
|
-
ordered.
|
155
|
-
with(5).
|
156
|
-
and_return(header)
|
157
|
-
expect(socket).to receive(:read).
|
158
|
-
ordered.
|
159
|
-
with(message_len).
|
160
|
-
and_return(message_str)
|
161
|
-
|
162
|
-
expect{ subject.expect :PingResp }.
|
163
|
-
to raise_error Riak::ProtobuffsUnexpectedResponse
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
describe 'ErrorResp received' do
|
168
|
-
it 'raises a ProtobuffsErrorResponse error' do
|
169
|
-
message = error_resp
|
170
|
-
message_str = message.encode.to_s
|
171
|
-
message_len = message_str.length
|
172
|
-
name = :ErrorResp
|
173
|
-
header = [message_len + 1, codes.index(name)].pack 'NC'
|
174
|
-
|
175
|
-
expect(socket).to receive(:read).
|
176
|
-
ordered.
|
177
|
-
with(5).
|
178
|
-
and_return(header)
|
179
|
-
expect(socket).to receive(:read).
|
180
|
-
ordered.
|
181
|
-
with(message_len).
|
182
|
-
and_return(message_str)
|
183
|
-
|
184
|
-
expect{ subject.expect :PingResp }.
|
185
|
-
to raise_error Riak::ProtobuffsErrorResponse
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|