From bc27fb4fe9e186ec8c1472fb1a1694da324a8cf5 Mon Sep 17 00:00:00 2001 From: Alastair Pharo Date: Fri, 6 Sep 2019 00:31:44 +1000 Subject: [PATCH] Specs: allow Server/Client specs to run concurrently --- spec/helper.rb | 13 ---------- .../adapters/client/adapter_client_spec.rb | 12 ++++------ spec/moneta/adapters/client/client_helper.rb | 24 +++++++++++++++++++ .../client/standard_client_tcp_spec.rb | 12 ++++------ .../client/standard_client_unix_spec.rb | 15 +++++------- spec/moneta/proxies/shared/shared_tcp_spec.rb | 4 ++-- .../moneta/proxies/shared/shared_unix_spec.rb | 8 +++---- 7 files changed, 44 insertions(+), 44 deletions(-) create mode 100644 spec/moneta/adapters/client/client_helper.rb diff --git a/spec/helper.rb b/spec/helper.rb index 51c52944..8d8c9883 100644 --- a/spec/helper.rb +++ b/spec/helper.rb @@ -323,19 +323,6 @@ def load_value value end end - def start_server(*args) - server = Moneta::Server.new(*args) - Thread.new { server.run } - sleep 0.1 until server.running? - server - rescue Exception => ex - puts "Failed to start server - #{ex.message}" - tries ||= 0 - tries += 1 - sleep Moneta::Server::TIMEOUT - tries < 3 ? retry : raise - end - def moneta_property_of(keys: 0, values: 0) keys_meta = self.keys_meta values_meta = self.values_meta diff --git a/spec/moneta/adapters/client/adapter_client_spec.rb b/spec/moneta/adapters/client/adapter_client_spec.rb index 26ad37b9..364e688c 100644 --- a/spec/moneta/adapters/client/adapter_client_spec.rb +++ b/spec/moneta/adapters/client/adapter_client_spec.rb @@ -1,14 +1,10 @@ -describe 'adapter_client', isolate: true, adapter: :Client do - before :all do - @server = start_server(Moneta::Adapters::Memory.new) - end +require_relative './client_helper.rb' - after :all do - @server.stop - end +describe 'adapter_client', adapter: :Client do + include_context :start_server, port: 9002, backend: ->{ Moneta::Adapters::Memory.new } moneta_build do - Moneta::Adapters::Client.new + Moneta::Adapters::Client.new(port: 9002) end moneta_specs ADAPTER_SPECS.with_each_key diff --git a/spec/moneta/adapters/client/client_helper.rb b/spec/moneta/adapters/client/client_helper.rb new file mode 100644 index 00000000..6ff2a5a8 --- /dev/null +++ b/spec/moneta/adapters/client/client_helper.rb @@ -0,0 +1,24 @@ +RSpec.shared_context :start_server do |**options| + before :context do + begin + options.each do |key, value| + options[key] = instance_exec(&value) if value.respond_to? :call + end + backend = options.delete(:backend) + @server = Moneta::Server.new(backend, options) + @thread = Thread.new { @server.run } + sleep 0.1 until @server.running? + rescue Exception => ex + puts "Failed to start server - #{ex.message}" + tries ||= 0 + tries += 1 + sleep Moneta::Server::TIMEOUT + tries < 3 ? retry : raise + end + end + + after :context do + @server.stop + @thread.join + end +end diff --git a/spec/moneta/adapters/client/standard_client_tcp_spec.rb b/spec/moneta/adapters/client/standard_client_tcp_spec.rb index 2a4208d8..62b1afcd 100644 --- a/spec/moneta/adapters/client/standard_client_tcp_spec.rb +++ b/spec/moneta/adapters/client/standard_client_tcp_spec.rb @@ -1,13 +1,9 @@ -describe "standard_client_tcp", isolate: true, adapter: :Client do - before :all do - @server = start_server(Moneta::Adapters::Memory.new) - end +require_relative './client_helper.rb' - after :all do - @server.stop - end +describe "standard_client_tcp", adapter: :Client do + include_context :start_server, port: 9003, backend: ->{ Moneta::Adapters::Memory.new } - moneta_store :Client + moneta_store :Client, port: 9003 moneta_specs STANDARD_SPECS it 'supports multiple clients' do diff --git a/spec/moneta/adapters/client/standard_client_unix_spec.rb b/spec/moneta/adapters/client/standard_client_unix_spec.rb index 3e81cb9f..0a43d489 100644 --- a/spec/moneta/adapters/client/standard_client_unix_spec.rb +++ b/spec/moneta/adapters/client/standard_client_unix_spec.rb @@ -1,15 +1,12 @@ -describe "standard_client_unix", isolate: true, adapter: :Client do - before :all do - @server = start_server Moneta::Adapters::Memory.new, - socket: File.join(tempdir, 'standard_client_unix') - end +require_relative './client_helper.rb' - after :all do - @server.stop - end +describe "standard_client_unix", adapter: :Client do + include_context :start_server, + backend: ->{ Moneta::Adapters::Memory.new }, + socket: ->{ File.join(tempdir, 'standard_client_unix') } moneta_store :Client do - {socket: File.join(tempdir, 'standard_client_unix')} + { socket: File.join(tempdir, 'standard_client_unix') } end moneta_specs STANDARD_SPECS diff --git a/spec/moneta/proxies/shared/shared_tcp_spec.rb b/spec/moneta/proxies/shared/shared_tcp_spec.rb index 33aaa57f..7d653f3c 100644 --- a/spec/moneta/proxies/shared/shared_tcp_spec.rb +++ b/spec/moneta/proxies/shared/shared_tcp_spec.rb @@ -1,4 +1,4 @@ -describe "shared_tcp", isolate: true, proxy: :Shared do +describe "shared_tcp", proxy: :Shared do moneta_build do tempdir = self.tempdir Moneta.build do @@ -26,7 +26,7 @@ it 'has the underlying adapter' do store.load('dummy') - expect(store.adapter.adapter).to be_a Moneta::Adapters::PStore + expect(store.adapter.adapter).to be_a Moneta::Adapters::GDBM end end diff --git a/spec/moneta/proxies/shared/shared_unix_spec.rb b/spec/moneta/proxies/shared/shared_unix_spec.rb index 62ae6f6b..bd257aef 100644 --- a/spec/moneta/proxies/shared/shared_unix_spec.rb +++ b/spec/moneta/proxies/shared/shared_unix_spec.rb @@ -1,15 +1,15 @@ -describe "shared_unix", isolate: true, proxy: :Shared do +describe "shared_unix", proxy: :Shared do moneta_build do tempdir = self.tempdir Moneta.build do use(:Shared, socket: File.join(tempdir, 'shared_unix.socket')) do - adapter :PStore, file: File.join(tempdir, 'shared_unix') + adapter :GDBM, file: File.join(tempdir, 'shared_unix') end end end shared_examples :shared_unix do - moneta_specs ADAPTER_SPECS + moneta_specs ADAPTER_SPECS.with_each_key it 'shares values' do store['shared_key'] = 'shared_value' @@ -25,7 +25,7 @@ it "has the underlying adapter" do store.load('dummy') - expect(store.adapter.adapter).to be_a Moneta::Adapters::PStore + expect(store.adapter.adapter).to be_a Moneta::Adapters::GDBM end end