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.
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