moneta 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +1 -1
  4. data/.travis.yml +10 -4
  5. data/CHANGES +9 -0
  6. data/Gemfile +7 -5
  7. data/README.md +9 -6
  8. data/feature_matrix.yaml +2 -1
  9. data/lib/moneta/adapters/client.rb +56 -19
  10. data/lib/moneta/adapters/couch.rb +5 -0
  11. data/lib/moneta/adapters/mongo/moped.rb +4 -1
  12. data/lib/moneta/builder.rb +2 -2
  13. data/lib/moneta/lock.rb +6 -1
  14. data/lib/moneta/pool.rb +12 -0
  15. data/lib/moneta/proxy.rb +1 -1
  16. data/lib/moneta/server.rb +215 -61
  17. data/lib/moneta/shared.rb +13 -7
  18. data/lib/moneta/transformer.rb +50 -8
  19. data/lib/moneta/transformer/config.rb +59 -40
  20. data/lib/moneta/version.rb +1 -1
  21. data/moneta.gemspec +2 -2
  22. data/script/benchmarks +6 -1
  23. data/script/contributors +1 -2
  24. data/script/start-couchdb +27 -0
  25. data/script/start-hbase +2 -2
  26. data/script/start-services +3 -3
  27. data/spec/features/store.rb +3 -3
  28. data/spec/features/transform_value.rb +27 -21
  29. data/spec/helper.rb +52 -53
  30. data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +1 -1
  31. data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +1 -1
  32. data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +1 -1
  33. data/spec/moneta/adapters/client/adapter_client_spec.rb +6 -6
  34. data/spec/moneta/adapters/client/client_helper.rb +24 -0
  35. data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +8 -8
  36. data/spec/moneta/adapters/client/standard_client_unix_spec.rb +23 -7
  37. data/spec/moneta/adapters/couch/adapter_couch_spec.rb +1 -1
  38. data/spec/moneta/adapters/couch/standard_couch_spec.rb +2 -2
  39. data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +2 -2
  40. data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +1 -1
  41. data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +1 -1
  42. data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +1 -1
  43. data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +1 -1
  44. data/spec/moneta/adapters/file/standard_file_spec.rb +2 -2
  45. data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +1 -1
  46. data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +1 -1
  47. data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +1 -1
  48. data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +1 -1
  49. data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +2 -2
  50. data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +2 -2
  51. data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +1 -1
  52. data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +1 -1
  53. data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +1 -1
  54. data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +1 -1
  55. data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +1 -1
  56. data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +1 -1
  57. data/spec/moneta/adapters/memory/standard_memory_spec.rb +1 -1
  58. data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +1 -1
  59. data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +1 -1
  60. data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +1 -1
  61. data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +1 -1
  62. data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +2 -2
  63. data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +39 -2
  64. data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +2 -2
  65. data/spec/moneta/adapters/mongo/adapter_mongo_moped_spec.rb +4 -3
  66. data/spec/moneta/adapters/mongo/adapter_mongo_moped_with_default_expires_spec.rb +5 -3
  67. data/spec/moneta/adapters/mongo/adapter_mongo_official_spec.rb +4 -2
  68. data/spec/moneta/adapters/mongo/adapter_mongo_official_with_default_expires_spec.rb +5 -3
  69. data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +3 -2
  70. data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +5 -3
  71. data/spec/moneta/adapters/mongo/standard_mongo_moped_spec.rb +2 -2
  72. data/spec/moneta/adapters/mongo/standard_mongo_official_spec.rb +2 -2
  73. data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +2 -2
  74. data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +1 -1
  75. data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +1 -1
  76. data/spec/moneta/adapters/redis/standard_redis_spec.rb +1 -1
  77. data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +1 -1
  78. data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +1 -1
  79. data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +1 -1
  80. data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +1 -1
  81. data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +1 -1
  82. data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +1 -1
  83. data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +1 -1
  84. data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +1 -1
  85. data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +1 -1
  86. data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +1 -1
  87. data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +1 -1
  88. data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +1 -1
  89. data/spec/moneta/builder_spec.rb +22 -0
  90. data/spec/moneta/proxies/expires/expires_file_spec.rb +1 -1
  91. data/spec/moneta/proxies/shared/shared_tcp_spec.rb +14 -4
  92. data/spec/moneta/proxies/shared/shared_unix_spec.rb +4 -4
  93. data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +1 -1
  94. data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +3 -3
  95. data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +2 -2
  96. data/spec/moneta/proxies/transformer/transformer_json_spec.rb +1 -1
  97. data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +1 -1
  98. data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +1 -1
  99. data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +1 -1
  100. data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +1 -1
  101. data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +1 -1
  102. data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +1 -1
  103. data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +33 -0
  104. data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +1 -1
  105. data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +1 -1
  106. data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +1 -1
  107. data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +1 -1
  108. data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +1 -1
  109. data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +1 -1
  110. data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +1 -1
  111. data/spec/moneta/proxies/transformer/transformer_php_spec.rb +1 -1
  112. data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +1 -1
  113. data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +2 -2
  114. data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -2
  115. data/spec/support/mongo_helper.rb +12 -0
  116. metadata +18 -12
  117. 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 { sized(range(5, 10)) { string(:alnum) } },
62
- 'path' => proc { array(range(2, 3)) { sized(range(5, 10)) { string(:alpha) } }.join('/') },
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 { choose Value.new(:objkey1), Value.new(:objkey2) },
65
- 'hash' => proc { dict(2) { sized(range(5, 10)) { [string(:alnum), string(:alnum)] } } }
66
- }.freeze
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 { choose Value.new(:objval1), Value.new(:objval2) },
76
- 'hash' => proc { dict { [string(:alnum), array(2) { choose(string(:alnum), integer, dict { [string(:alnum), integer] }) }] } },
77
- 'smallhash' => proc { dict(2) { sized(range(5, 10)) { [string(:alnum), string(:alnum)] } } }
78
- }.freeze
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({ specs: specs, key: key, value: value }.merge(options))
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
- :increment, :concurrent_increment, :concurrent_create, :persist, :multiprocess,
212
- :create, :features, :store_large, :not_each_key],
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
- :marshallable_key, :marshallable_value, :transform_value, :increment,
219
- :concurrent_increment, :concurrent_create, :persist, :multiprocess, :create,
220
- :features, :store_large, :not_each_key]
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
- :transform_value, :increment, :create, :features, :store_large,
225
- :not_each_key]
226
- )
224
+ :transform_value, :increment, :create, :features, :store_large,
225
+ :not_each_key])
227
226
 
228
227
  module MonetaHelpers
229
228
  module ClassMethods
230
- def moneta_store(store_name, options = {}, &block)
231
- name = description
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: { file: File.join(tempdir, "#{name}.log") }))
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(&block)
243
+ def moneta_build &block
244
244
  include_context :setup_moneta_store, block
245
245
  end
246
246
 
247
- def moneta_loader(&block)
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(specs)
254
- let(:features) { specs.features }
253
+ def moneta_specs specs
254
+ let(:features){ specs.features }
255
255
  let(:keys_meta) do
256
- [:branch, *specs.key.map { |k| MonetaSpecs::KEYS[k] }.compact]
256
+ [:branch, *specs.key.map{ |k| MonetaSpecs::KEYS[k] }.compact]
257
257
  end
258
258
  let(:values_meta) do
259
- [:branch, *specs.value.map { |k| MonetaSpecs::VALUES[k] }.compact]
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 { @timecop = true }
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(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
- .reject { |_key, value| value.empty? }
347
- .to_h
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
- # config.tty = true
366
- # config.formatter = ENV['PARALLEL_TESTS'] ? MonetaParallelFormatter : :progress
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 { |rb| require rb }
452
+ Dir['./spec/features/*.rb'].each{ |rb| require rb }
@@ -14,5 +14,5 @@ describe "standard_activerecord", adapter: :ActiveRecord do
14
14
  ::Marshal.load(value.unpack('m').first)
15
15
  end
16
16
 
17
- moneta_specs STANDARD_SPECS
17
+ moneta_specs STANDARD_SPECS.with_each_key
18
18
  end
@@ -20,5 +20,5 @@ describe "standard_activerecord_with_expires", adapter: :ActiveRecord do
20
20
  ::Marshal.load(value.unpack('m').first)
21
21
  end
22
22
 
23
- moneta_specs STANDARD_SPECS.with_expires
23
+ moneta_specs STANDARD_SPECS.with_expires.with_each_key
24
24
  end
@@ -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
- describe 'adapter_client', isolate: true, adapter: :Client do
2
- before :all do
3
- start_server(Moneta::Adapters::Memory.new)
4
- end
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
- describe "standard_client_tcp", isolate: true, adapter: :Client do
2
- before :all do
3
- start_server(Moneta::Adapters::Memory.new)
4
- end
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..100).map do |i|
11
+ threads = (1..32).map do |i|
12
12
  Thread.new do
13
13
  client = new_store
14
- (1..100).each do |j|
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
- describe "standard_client_unix", isolate: true, adapter: :Client do
2
- before :all do
3
- start_server Moneta::Adapters::Memory.new,
4
- socket: File.join(tempdir, 'standard_client_unix')
5
- end
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
@@ -3,5 +3,5 @@ describe 'standard_daybreak', adapter: :Daybreak do
3
3
  {file: File.join(tempdir, "simple_daybreak")}
4
4
  end
5
5
 
6
- moneta_specs STANDARD_SPECS.without_multiprocess
6
+ moneta_specs STANDARD_SPECS.without_multiprocess.with_each_key
7
7
  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