moneta 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|