spec/spec_helper.rb in etcd-0.0.6 vs spec/spec_helper.rb in etcd-0.2.0.alpha
- old
+ new
@@ -1,14 +1,94 @@
# encoding: utf-8
-require 'simplecov'
-
-SimpleCov.start do
- add_filter "/.bundle/"
- add_filter "/spec/"
-end
-
$:.unshift(File.expand_path("../lib", __FILE__))
$:.unshift(File.expand_path("../spec", __FILE__))
+require 'coco'
+require 'uuid'
require 'etcd'
-require 'functional_spec_helpers'
+
+module Etcd
+ module SpecHelper
+
+ @@pids = []
+
+ def self.etcd_binary
+ if File.exists? './etcd/etcd'
+ './etcd/etcd'
+ elsif !! ENV['ETCD_BIN']
+ ENV['ETCD_BIN']
+ else
+ raise 'etcd binary not found., you need to set ETCD_BIN'
+ end
+ end
+
+ def self.start_etcd_servers
+ @@tmpdir = Dir.mktmpdir
+ pid = spawn_etcd_server(@@tmpdir+'/leader')
+ @@pids = Array(pid)
+ leader = '127.0.0.1:7001'
+ 4.times do |n|
+ client_port = 4002 + n
+ server_port = 7002 + n
+ pid = spawn_etcd_server(@@tmpdir+client_port.to_s, client_port, server_port, leader)
+ @@pids << pid
+ end
+ end
+
+ def self.stop_etcd_servers
+ @@pids.each do |pid|
+ Process.kill("TERM", pid)
+ end
+ FileUtils.remove_entry_secure(@@tmpdir, true)
+ end
+
+ def self.spawn_etcd_server(dir, client_port=4001, server_port=7001, leader = nil)
+ args = " -addr 127.0.0.1:#{client_port} -peer-addr 127.0.0.1:#{server_port} -data-dir #{dir} -name node_#{client_port}"
+ command = if leader.nil?
+ etcd_binary + args
+ else
+ etcd_binary + args + " -peers #{leader}"
+ end
+ pid = spawn(command, out: '/dev/null')
+ Process.detach(pid)
+ sleep 1
+ pid
+ end
+
+ def uuid
+ @uuid ||= UUID.new
+ end
+
+ def random_key(n=1)
+ key=''
+ n.times do
+ key << '/'+ uuid.generate
+ end
+ key
+ end
+
+ def etcd_servers
+ (1..5).map{|n| "http://127.0.0.1:700#{n}"}
+ end
+
+ def other_client
+ Etcd.client
+ end
+
+ def read_only_client
+ Etcd.client(:allow_redirect=>false, :port=> 4004)
+ end
+ end
+end
+
+RSpec.configure do |c|
+
+ c.include Etcd::SpecHelper
+ c.before(:suite) do
+ Etcd::SpecHelper.start_etcd_servers
+ end
+ c.after(:suite) do
+ Etcd::SpecHelper.stop_etcd_servers
+ end
+end
+