moneta 1.2.1 → 1.3.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/.gitignore +2 -0
- data/.rubocop.yml +1 -1
- data/.travis.yml +10 -4
- data/CHANGES +9 -0
- data/Gemfile +7 -5
- data/README.md +9 -6
- data/feature_matrix.yaml +2 -1
- data/lib/moneta/adapters/client.rb +56 -19
- data/lib/moneta/adapters/couch.rb +5 -0
- data/lib/moneta/adapters/mongo/moped.rb +4 -1
- data/lib/moneta/builder.rb +2 -2
- data/lib/moneta/lock.rb +6 -1
- data/lib/moneta/pool.rb +12 -0
- data/lib/moneta/proxy.rb +1 -1
- data/lib/moneta/server.rb +215 -61
- data/lib/moneta/shared.rb +13 -7
- data/lib/moneta/transformer.rb +50 -8
- data/lib/moneta/transformer/config.rb +59 -40
- data/lib/moneta/version.rb +1 -1
- data/moneta.gemspec +2 -2
- data/script/benchmarks +6 -1
- data/script/contributors +1 -2
- data/script/start-couchdb +27 -0
- data/script/start-hbase +2 -2
- data/script/start-services +3 -3
- data/spec/features/store.rb +3 -3
- data/spec/features/transform_value.rb +27 -21
- data/spec/helper.rb +52 -53
- data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +1 -1
- data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +1 -1
- data/spec/moneta/adapters/client/adapter_client_spec.rb +6 -6
- data/spec/moneta/adapters/client/client_helper.rb +24 -0
- data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +8 -8
- data/spec/moneta/adapters/client/standard_client_unix_spec.rb +23 -7
- data/spec/moneta/adapters/couch/adapter_couch_spec.rb +1 -1
- data/spec/moneta/adapters/couch/standard_couch_spec.rb +2 -2
- data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +2 -2
- data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +1 -1
- data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +1 -1
- data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/file/standard_file_spec.rb +2 -2
- data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +1 -1
- data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +1 -1
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +2 -2
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +2 -2
- data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +1 -1
- data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +1 -1
- data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +1 -1
- data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +1 -1
- data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +2 -2
- data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +39 -2
- data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +2 -2
- data/spec/moneta/adapters/mongo/adapter_mongo_moped_spec.rb +4 -3
- data/spec/moneta/adapters/mongo/adapter_mongo_moped_with_default_expires_spec.rb +5 -3
- data/spec/moneta/adapters/mongo/adapter_mongo_official_spec.rb +4 -2
- data/spec/moneta/adapters/mongo/adapter_mongo_official_with_default_expires_spec.rb +5 -3
- data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +3 -2
- data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +5 -3
- data/spec/moneta/adapters/mongo/standard_mongo_moped_spec.rb +2 -2
- data/spec/moneta/adapters/mongo/standard_mongo_official_spec.rb +2 -2
- data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +2 -2
- data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +1 -1
- data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/redis/standard_redis_spec.rb +1 -1
- data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +1 -1
- data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +1 -1
- data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +1 -1
- data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +1 -1
- data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +1 -1
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +1 -1
- data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +1 -1
- data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +1 -1
- data/spec/moneta/builder_spec.rb +22 -0
- data/spec/moneta/proxies/expires/expires_file_spec.rb +1 -1
- data/spec/moneta/proxies/shared/shared_tcp_spec.rb +14 -4
- data/spec/moneta/proxies/shared/shared_unix_spec.rb +4 -4
- data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +3 -3
- data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +2 -2
- data/spec/moneta/proxies/transformer/transformer_json_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +33 -0
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_php_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +1 -1
- data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +2 -2
- data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -2
- data/spec/support/mongo_helper.rb +12 -0
- metadata +18 -12
- data/script/reconfigure-couchdb +0 -13
data/spec/helper.rb
CHANGED
@@ -10,9 +10,11 @@ require 'rantly'
|
|
10
10
|
require 'rantly/rspec_extensions'
|
11
11
|
# rantly/shrinks
|
12
12
|
require 'timecop'
|
13
|
+
require_relative 'support/mongo_helper'
|
13
14
|
|
14
15
|
class MonetaParallelFormatter < RSpec::Core::Formatters::BaseTextFormatter
|
15
16
|
def start(*args)
|
17
|
+
|
16
18
|
output.puts colorise_summary("STARTING #{ARGV.join(' ')}")
|
17
19
|
@stopped = false
|
18
20
|
@passed_count = 0
|
@@ -58,12 +60,12 @@ class MonetaSpecs
|
|
58
60
|
'integer' => :integer,
|
59
61
|
'float' => :float,
|
60
62
|
'boolean' => :boolean,
|
61
|
-
'string' => proc
|
62
|
-
'path' => proc
|
63
|
+
'string' => proc{ sized(range 5, 10){ string(:alnum) } },
|
64
|
+
'path' => proc{ array(range 2, 3){ sized(range 5, 10){ string(:alpha) } }.join('/') },
|
63
65
|
'binary' => [:string, :cntrl],
|
64
|
-
'object' => proc
|
65
|
-
'hash' => proc
|
66
|
-
}
|
66
|
+
'object' => proc{ choose Value.new(:objkey1), Value.new(:objkey2) },
|
67
|
+
'hash' => proc{ dict(2){ sized(range 5, 10){ [string(:alnum), string(:alnum)] } } }
|
68
|
+
}
|
67
69
|
|
68
70
|
VALUES = {
|
69
71
|
'nil' => [:literal, nil],
|
@@ -72,10 +74,10 @@ class MonetaSpecs
|
|
72
74
|
'boolean' => :boolean,
|
73
75
|
'string' => [:string, :alnum],
|
74
76
|
'binary' => [:string, :cntrl],
|
75
|
-
'object' => proc
|
76
|
-
'hash' => proc
|
77
|
-
'smallhash' => proc
|
78
|
-
}
|
77
|
+
'object' => proc{ choose Value.new(:objval1), Value.new(:objval2) },
|
78
|
+
'hash' => proc{ dict{ [string(:alnum), array(2){ choose(string(:alnum), integer, dict{ [string(:alnum), integer] }) }] } },
|
79
|
+
'smallhash' => proc{ dict(2){ sized(range 5, 10){ [string(:alnum), string(:alnum)] } } }
|
80
|
+
}
|
79
81
|
|
80
82
|
attr_reader :key, :value, :specs, :features
|
81
83
|
|
@@ -87,23 +89,23 @@ class MonetaSpecs
|
|
87
89
|
end
|
88
90
|
|
89
91
|
def new(options)
|
90
|
-
self.class.new({
|
92
|
+
self.class.new({specs: specs, key: key, value: value}.merge(options))
|
91
93
|
end
|
92
94
|
|
93
95
|
def with_keys(*keys)
|
94
|
-
new(key: key | keys.map(&:to_s))
|
96
|
+
new(key: self.key | keys.map(&:to_s))
|
95
97
|
end
|
96
98
|
|
97
99
|
def without_keys(*keys)
|
98
|
-
new(key: key - keys.map(&:to_s))
|
100
|
+
new(key: self.key - keys.map(&:to_s))
|
99
101
|
end
|
100
102
|
|
101
103
|
def with_values(*values)
|
102
|
-
new(value: value | values.map(&:to_s))
|
104
|
+
new(value: self.value | values.map(&:to_s))
|
103
105
|
end
|
104
106
|
|
105
107
|
def without_values(*values)
|
106
|
-
new(value: value - values.map(&:to_s))
|
108
|
+
new(value: self.value - values.map(&:to_s))
|
107
109
|
end
|
108
110
|
|
109
111
|
def without_keys_or_values(*types)
|
@@ -208,55 +210,53 @@ end
|
|
208
210
|
|
209
211
|
ADAPTER_SPECS = MonetaSpecs.new(
|
210
212
|
specs: [:null, :store, :returndifferent,
|
211
|
-
|
212
|
-
|
213
|
+
:increment, :concurrent_increment, :concurrent_create, :persist, :multiprocess,
|
214
|
+
:create, :features, :store_large, :not_each_key],
|
213
215
|
key: %w(string path),
|
214
|
-
value: %w(string path binary)
|
215
|
-
)
|
216
|
+
value: %w(string path binary))
|
216
217
|
STANDARD_SPECS = MonetaSpecs.new(
|
217
218
|
specs: [:null, :store, :returndifferent,
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
)
|
219
|
+
:marshallable_key, :marshallable_value, :transform_value, :increment,
|
220
|
+
:concurrent_increment, :concurrent_create, :persist, :multiprocess, :create,
|
221
|
+
:features, :store_large, :not_each_key])
|
222
222
|
TRANSFORMER_SPECS = MonetaSpecs.new(
|
223
223
|
specs: [:null, :store, :returndifferent,
|
224
|
-
|
225
|
-
|
226
|
-
)
|
224
|
+
:transform_value, :increment, :create, :features, :store_large,
|
225
|
+
:not_each_key])
|
227
226
|
|
228
227
|
module MonetaHelpers
|
229
228
|
module ClassMethods
|
230
|
-
|
231
|
-
|
229
|
+
|
230
|
+
def moneta_store store_name, options={}, &block
|
231
|
+
name = self.description
|
232
232
|
builder = proc do
|
233
233
|
if block
|
234
234
|
options = instance_exec(&block)
|
235
235
|
end
|
236
236
|
|
237
|
-
Moneta.new(store_name, options.merge(logger: {
|
237
|
+
Moneta.new(store_name, options.merge(logger: {file: File.join(tempdir, "#{name}.log")}))
|
238
238
|
end
|
239
239
|
|
240
240
|
include_context :setup_moneta_store, builder
|
241
241
|
end
|
242
242
|
|
243
|
-
def moneta_build
|
243
|
+
def moneta_build &block
|
244
244
|
include_context :setup_moneta_store, block
|
245
245
|
end
|
246
246
|
|
247
|
-
def moneta_loader
|
247
|
+
def moneta_loader &block
|
248
248
|
before do
|
249
249
|
@moneta_value_loader = block
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
253
|
-
def moneta_specs
|
254
|
-
let(:features)
|
253
|
+
def moneta_specs specs
|
254
|
+
let(:features){ specs.features }
|
255
255
|
let(:keys_meta) do
|
256
|
-
[:branch, *specs.key.map
|
256
|
+
[:branch, *specs.key.map{ |k| MonetaSpecs::KEYS[k] }.compact]
|
257
257
|
end
|
258
258
|
let(:values_meta) do
|
259
|
-
[:branch, *specs.value.map
|
259
|
+
[:branch, *specs.value.map{ |k| MonetaSpecs::VALUES[k] }.compact]
|
260
260
|
end
|
261
261
|
|
262
262
|
# Used by tests that rely on MySQL. These env vars can be used if you
|
@@ -270,6 +270,9 @@ module MonetaHelpers
|
|
270
270
|
let(:postgres_database1) { ENV['MONETA_POSTGRES_DATABSASE1'] || 'moneta1' }
|
271
271
|
let(:postgres_database2) { ENV['MONETA_POSTGRES_DATABSASE1'] || 'moneta2' }
|
272
272
|
|
273
|
+
let(:couch_login) { ENV['COUCH_LOGIN'] || 'admin' }
|
274
|
+
let(:couch_password) { ENV['COUCH_PASSWORD'] || 'password' }
|
275
|
+
|
273
276
|
before do
|
274
277
|
store = new_store
|
275
278
|
store.clear
|
@@ -299,7 +302,7 @@ module MonetaHelpers
|
|
299
302
|
end
|
300
303
|
|
301
304
|
def use_timecop
|
302
|
-
before
|
305
|
+
before{ @timecop = true }
|
303
306
|
end
|
304
307
|
end
|
305
308
|
|
@@ -316,7 +319,7 @@ module MonetaHelpers
|
|
316
319
|
@store ||= new_store
|
317
320
|
end
|
318
321
|
|
319
|
-
def load_value
|
322
|
+
def load_value value
|
320
323
|
if @moneta_value_loader
|
321
324
|
@moneta_value_loader.call value
|
322
325
|
else
|
@@ -324,14 +327,6 @@ module MonetaHelpers
|
|
324
327
|
end
|
325
328
|
end
|
326
329
|
|
327
|
-
def start_server(*args)
|
328
|
-
server = Moneta::Server.new(*args)
|
329
|
-
Thread.new { server.run }
|
330
|
-
sleep 0.1 until server.running?
|
331
|
-
rescue Exception => ex
|
332
|
-
puts "Failed to start server - #{ex.message}"
|
333
|
-
end
|
334
|
-
|
335
330
|
def moneta_property_of(keys: 0, values: 0)
|
336
331
|
keys_meta = self.keys_meta
|
337
332
|
values_meta = self.values_meta
|
@@ -342,9 +337,9 @@ module MonetaHelpers
|
|
342
337
|
value_values = values.times.map { call(values_meta) }
|
343
338
|
guard value_values.uniq.length == value_values.length
|
344
339
|
|
345
|
-
[[:keys, key_values], [:values, value_values]]
|
346
|
-
|
347
|
-
|
340
|
+
[[:keys, key_values], [:values, value_values]].
|
341
|
+
reject { |key, value| value.empty? }.
|
342
|
+
to_h
|
348
343
|
end
|
349
344
|
end
|
350
345
|
|
@@ -362,8 +357,8 @@ end
|
|
362
357
|
RSpec.configure do |config|
|
363
358
|
config.verbose_retry = true
|
364
359
|
config.color = true
|
365
|
-
#
|
366
|
-
#
|
360
|
+
#config.tty = true
|
361
|
+
#config.formatter = ENV['PARALLEL_TESTS'] ? MonetaParallelFormatter : :progress
|
367
362
|
config.silence_filter_announcements = true if ENV['PARALLEL_TESTS']
|
368
363
|
|
369
364
|
# Allow "should" syntax as well as "expect"
|
@@ -371,6 +366,7 @@ RSpec.configure do |config|
|
|
371
366
|
|
372
367
|
config.extend MonetaHelpers::ClassMethods
|
373
368
|
config.include MonetaHelpers::InstanceMethods
|
369
|
+
config.include MongoHelper, adapter: :Mongo
|
374
370
|
end
|
375
371
|
|
376
372
|
# FIXME: Get rid of this once raise_error expectations no longer generate
|
@@ -380,9 +376,9 @@ RSpec::Expectations.configuration.on_potential_false_positives = :nothing
|
|
380
376
|
# Disable jruby stdout pollution by memcached
|
381
377
|
if defined?(JRUBY_VERSION)
|
382
378
|
require 'java'
|
383
|
-
properties = java.lang.System.getProperties
|
384
|
-
properties.put('net.spy.log.LoggerImpl', 'net.spy.memcached.compat.log.SunLogger')
|
385
|
-
java.lang.System.setProperties(properties)
|
379
|
+
properties = java.lang.System.getProperties();
|
380
|
+
properties.put('net.spy.log.LoggerImpl', 'net.spy.memcached.compat.log.SunLogger');
|
381
|
+
java.lang.System.setProperties(properties);
|
386
382
|
java.util.logging.Logger.getLogger('').setLevel(java.util.logging.Level::OFF)
|
387
383
|
end
|
388
384
|
|
@@ -405,6 +401,7 @@ class Value
|
|
405
401
|
end
|
406
402
|
end
|
407
403
|
|
404
|
+
|
408
405
|
def marshal_error
|
409
406
|
# HACK: Marshalling structs in rubinius without class name throws
|
410
407
|
# NoMethodError (to_sym). TODO: Create an issue for rubinius!
|
@@ -415,12 +412,14 @@ def marshal_error
|
|
415
412
|
end
|
416
413
|
end
|
417
414
|
|
415
|
+
|
418
416
|
RSpec.shared_context :setup_moneta_store do |builder|
|
419
417
|
before do
|
420
418
|
@moneta_store_builder = builder
|
421
419
|
end
|
422
420
|
|
423
421
|
after do
|
422
|
+
RSpec::Mocks.space.proxy_for(@store).reset
|
424
423
|
if @store
|
425
424
|
@store.close.should == nil
|
426
425
|
@store = nil
|
@@ -450,4 +449,4 @@ RSpec.shared_examples :at_usec do |usec|
|
|
450
449
|
end
|
451
450
|
end
|
452
451
|
|
453
|
-
Dir['./spec/features/*.rb'].each
|
452
|
+
Dir['./spec/features/*.rb'].each{ |rb| require rb }
|
@@ -14,5 +14,5 @@ describe "standard_cassandra", retry: 3, adapter: :Cassandra do
|
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
|
-
moneta_specs STANDARD_SPECS.without_increment.without_create.with_native_expires
|
17
|
+
moneta_specs STANDARD_SPECS.without_increment.without_create.with_native_expires.with_each_key
|
18
18
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative './client_helper.rb'
|
2
|
+
|
3
|
+
describe 'adapter_client', adapter: :Client do
|
4
|
+
include_context :start_server, port: 9002, backend: ->{ Moneta::Adapters::Memory.new }
|
5
5
|
|
6
6
|
moneta_build do
|
7
|
-
Moneta::Adapters::Client.new
|
7
|
+
Moneta::Adapters::Client.new(port: 9002)
|
8
8
|
end
|
9
9
|
|
10
|
-
moneta_specs ADAPTER_SPECS
|
10
|
+
moneta_specs ADAPTER_SPECS.with_each_key
|
11
11
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec.shared_context :start_server do |**options|
|
2
|
+
before :context do
|
3
|
+
begin
|
4
|
+
options.each do |key, value|
|
5
|
+
options[key] = instance_exec(&value) if value.respond_to? :call
|
6
|
+
end
|
7
|
+
backend = options.delete(:backend)
|
8
|
+
@server = Moneta::Server.new(backend, options)
|
9
|
+
@thread = Thread.new { @server.run }
|
10
|
+
sleep 0.1 until @server.running?
|
11
|
+
rescue Exception => ex
|
12
|
+
puts "Failed to start server - #{ex.message}"
|
13
|
+
tries ||= 0
|
14
|
+
tries += 1
|
15
|
+
sleep Moneta::Server::TIMEOUT
|
16
|
+
tries < 3 ? retry : raise
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after :context do
|
21
|
+
@server.stop
|
22
|
+
@thread.join
|
23
|
+
end
|
24
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative './client_helper.rb'
|
2
|
+
|
3
|
+
describe "standard_client_tcp", adapter: :Client do
|
4
|
+
include_context :start_server, port: 9003, backend: ->{ Moneta::Adapters::Memory.new }
|
5
5
|
|
6
|
-
moneta_store :Client
|
7
|
-
moneta_specs STANDARD_SPECS
|
6
|
+
moneta_store :Client, port: 9003
|
7
|
+
moneta_specs STANDARD_SPECS.with_each_key
|
8
8
|
|
9
9
|
it 'supports multiple clients' do
|
10
10
|
store['shared_key'] = 'shared_val'
|
11
|
-
threads = (1..
|
11
|
+
threads = (1..32).map do |i|
|
12
12
|
Thread.new do
|
13
13
|
client = new_store
|
14
|
-
(1..
|
14
|
+
(1..31).each do |j|
|
15
15
|
client['shared_key'].should == 'shared_val'
|
16
16
|
client["key-\#{j}-\#{i}"] = "val-\#{j}-\#{i}"
|
17
17
|
client["key-\#{j}-\#{i}"].should == "val-\#{j}-\#{i}"
|
@@ -1,12 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require_relative './client_helper.rb'
|
2
|
+
|
3
|
+
describe "standard_client_unix", adapter: :Client do
|
4
|
+
include_context :start_server,
|
5
|
+
backend: ->{ Moneta::Adapters::Memory.new },
|
6
|
+
socket: ->{ File.join(tempdir, 'standard_client_unix') }
|
6
7
|
|
7
8
|
moneta_store :Client do
|
8
|
-
{socket: File.join(tempdir, 'standard_client_unix')}
|
9
|
+
{ socket: File.join(tempdir, 'standard_client_unix') }
|
9
10
|
end
|
10
11
|
|
11
|
-
moneta_specs STANDARD_SPECS
|
12
|
+
moneta_specs STANDARD_SPECS.with_each_key
|
13
|
+
|
14
|
+
it 'supports multiple clients' do
|
15
|
+
store['shared_key'] = 'shared_val'
|
16
|
+
threads = (1..32).map do |i|
|
17
|
+
Thread.new do
|
18
|
+
client = new_store
|
19
|
+
(1..31).each do |j|
|
20
|
+
client['shared_key'].should == 'shared_val'
|
21
|
+
client["key-\#{j}-\#{i}"] = "val-\#{j}-\#{i}"
|
22
|
+
client["key-\#{j}-\#{i}"].should == "val-\#{j}-\#{i}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
threads.map(&:join)
|
27
|
+
end
|
12
28
|
end
|
@@ -4,7 +4,7 @@ describe 'adapter_couch', adapter: :Couch do
|
|
4
4
|
include_context :faraday_adapter
|
5
5
|
|
6
6
|
moneta_build do
|
7
|
-
Moneta::Adapters::Couch.new(db: 'adapter_couch', adapter: faraday_adapter)
|
7
|
+
Moneta::Adapters::Couch.new(db: 'adapter_couch', adapter: faraday_adapter, login: couch_login, password: couch_password)
|
8
8
|
end
|
9
9
|
|
10
10
|
moneta_specs ADAPTER_SPECS.without_increment.simplevalues_only.without_path.with_each_key
|
@@ -4,12 +4,12 @@ describe "standard_couch", adapter: :Couch do
|
|
4
4
|
include_context :faraday_adapter
|
5
5
|
|
6
6
|
moneta_store :Couch do
|
7
|
-
{ db: 'standard_couch', adapter: faraday_adapter }
|
7
|
+
{ db: 'standard_couch', adapter: faraday_adapter, login: couch_login, password: couch_password }
|
8
8
|
end
|
9
9
|
|
10
10
|
moneta_loader do |value|
|
11
11
|
::Marshal.load(value.unpack('m').first)
|
12
12
|
end
|
13
13
|
|
14
|
-
moneta_specs STANDARD_SPECS.without_increment
|
14
|
+
moneta_specs STANDARD_SPECS.without_increment.with_each_key
|
15
15
|
end
|
@@ -8,12 +8,12 @@ describe "standard_couch_with_expires", adapter: :Couch do
|
|
8
8
|
include_context :faraday_adapter
|
9
9
|
|
10
10
|
moneta_store :Couch do
|
11
|
-
{ db: 'standard_couch_with_expires', adapter: faraday_adapter, expires: true }
|
11
|
+
{ db: 'standard_couch_with_expires', adapter: faraday_adapter, expires: true, login: couch_login, password: couch_password }
|
12
12
|
end
|
13
13
|
|
14
14
|
moneta_loader do |value|
|
15
15
|
::Marshal.load(value.unpack('m').first)
|
16
16
|
end
|
17
17
|
|
18
|
-
moneta_specs STANDARD_SPECS.without_increment.with_expires
|
18
|
+
moneta_specs STANDARD_SPECS.without_increment.with_expires.with_each_key
|
19
19
|
end
|
@@ -7,5 +7,5 @@ describe 'standard_daybreak_with_expires', adapter: :Daybreak do
|
|
7
7
|
{file: File.join(tempdir, "simple_daybreak_with_expires"), expires: true}
|
8
8
|
end
|
9
9
|
|
10
|
-
moneta_specs STANDARD_SPECS.without_multiprocess.with_expires
|
10
|
+
moneta_specs STANDARD_SPECS.without_multiprocess.with_expires.with_each_key
|
11
11
|
end
|