dynport_tools 0.2.15 → 0.2.16
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/dynport_tools.gemspec +2 -1
- data/lib/dynport_tools/embedded_redis.rb +30 -14
- data/lib/dynport_tools.rb +1 -1
- data/spec/dynport_tools/embedded_redis_spec.rb +136 -0
- data/spec/dynport_tools/redis_q_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -25
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.16
|
data/dynport_tools.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dynport_tools}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.16"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tobias Schwab"]
|
@@ -46,6 +46,7 @@ Gem::Specification.new do |s|
|
|
46
46
|
"spec/dynport_tools/ascii_table_spec.rb",
|
47
47
|
"spec/dynport_tools/deep_merger_spec.rb",
|
48
48
|
"spec/dynport_tools/differ_spec.rb",
|
49
|
+
"spec/dynport_tools/embedded_redis_spec.rb",
|
49
50
|
"spec/dynport_tools/eta_spec.rb",
|
50
51
|
"spec/dynport_tools/have_attributes_spec.rb",
|
51
52
|
"spec/dynport_tools/jenkins_spec.rb",
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require "redis"
|
2
2
|
require "singleton"
|
3
3
|
require "logger"
|
4
|
+
require "fileutils"
|
4
5
|
|
5
6
|
class EmbeddedRedis
|
6
7
|
include Singleton
|
7
8
|
|
8
|
-
attr_accessor :started, :base_path
|
9
|
+
attr_accessor :started, :base_path, :killed
|
9
10
|
attr_writer :logger
|
10
11
|
|
11
12
|
def initialize(options = {})
|
@@ -22,27 +23,34 @@ class EmbeddedRedis
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def pid
|
25
|
-
|
26
|
+
if File.exists?(pid_path)
|
27
|
+
pid = File.read(pid_path).strip
|
28
|
+
pid.length > 0 ? pid : nil
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
def running?
|
29
|
-
!!(pid &&
|
33
|
+
!!(pid && IO.popen("ps -p #{pid} | grep redis-server").count > 0)
|
30
34
|
end
|
31
35
|
|
32
36
|
def start
|
33
37
|
if !running?
|
34
|
-
|
35
|
-
system(%(echo "#{config}" | redis-server -))
|
36
|
-
sleep 0.1
|
37
|
-
self.started = true
|
38
|
-
log "started redis with pid #{pid}"
|
39
|
-
at_exit do
|
40
|
-
kill
|
41
|
-
end
|
42
|
-
connection
|
38
|
+
do_start!
|
43
39
|
else
|
44
40
|
log "already running with pid #{pid}"
|
45
41
|
end
|
42
|
+
connection
|
43
|
+
end
|
44
|
+
|
45
|
+
def do_start!
|
46
|
+
[socket_path, pid_path].each { |path| FileUtils.mkdir_p(File.dirname(path)) }
|
47
|
+
system(%(echo "#{config}" | redis-server -))
|
48
|
+
sleep 0.1
|
49
|
+
self.started = true
|
50
|
+
log "started redis with pid #{pid}"
|
51
|
+
at_exit do
|
52
|
+
kill
|
53
|
+
end
|
46
54
|
end
|
47
55
|
|
48
56
|
def started?
|
@@ -50,7 +58,9 @@ class EmbeddedRedis
|
|
50
58
|
end
|
51
59
|
|
52
60
|
def connection
|
53
|
-
|
61
|
+
if !started?
|
62
|
+
start
|
63
|
+
end
|
54
64
|
@connection ||= Redis.new(:path => socket_path)
|
55
65
|
end
|
56
66
|
|
@@ -62,11 +72,17 @@ class EmbeddedRedis
|
|
62
72
|
@logger ||= Logger.new($stdout)
|
63
73
|
end
|
64
74
|
|
75
|
+
def killed?
|
76
|
+
!!killed
|
77
|
+
end
|
78
|
+
|
65
79
|
def kill
|
66
80
|
log "killing redis"
|
67
|
-
if pid
|
81
|
+
if !killed? && pid
|
82
|
+
log "killing #{pid}"
|
68
83
|
system(%(kill #{pid}))
|
69
84
|
FileUtils.rm_f(socket_path)
|
85
|
+
self.killed = true
|
70
86
|
end
|
71
87
|
end
|
72
88
|
|
data/lib/dynport_tools.rb
CHANGED
@@ -8,4 +8,4 @@ require "cgi"
|
|
8
8
|
require "term/ansicolor"
|
9
9
|
require "diff/lcs"
|
10
10
|
|
11
|
-
%w(deep_merger differ jenkins redis_dumper xml_file have_attributes redis_q eta ascii_table).map { |m| require "dynport_tools/#{m}" }
|
11
|
+
%w(deep_merger differ jenkins redis_dumper xml_file have_attributes redis_q eta ascii_table embedded_redis).map { |m| require "dynport_tools/#{m}" }
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EmbeddedRedis do
|
4
|
+
let(:er) { EmbeddedRedis.instance }
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
er.logger = Logger.new("/dev/null")
|
8
|
+
er.stub(:system)
|
9
|
+
er.stub!(:sleep)
|
10
|
+
er.stub!(:kill)
|
11
|
+
FileUtils.stub!(:mkdir_p)
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:each) do
|
15
|
+
EmbeddedRedis.instance.instance_variable_set("@connection", nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#pid" do
|
19
|
+
it "returns nil when file not found" do
|
20
|
+
pid_path = root.join("tmp/some_weird_pid_path.pid")
|
21
|
+
er.stub!(:pid_path).and_return pid_path
|
22
|
+
er.pid.should be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns nil when blank" do
|
26
|
+
pid_path = root.join("tmp/redis_test.pid")
|
27
|
+
File.open(pid_path, "w") { |f| f.puts " " }
|
28
|
+
er.stub!(:pid_path).and_return pid_path
|
29
|
+
er.pid.should be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns the correct pid when present" do
|
33
|
+
pid_path = root.join("tmp/redis_test.pid")
|
34
|
+
File.open(pid_path, "w") { |f| f.puts "123" }
|
35
|
+
er.stub!(:pid_path).and_return pid_path
|
36
|
+
er.pid.should == "123"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#running?" do
|
41
|
+
it "returns false when pid is nil" do
|
42
|
+
er.should_receive(:pid).and_return nil
|
43
|
+
er.running?.should be_false
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns false when not in pid list" do
|
47
|
+
er.stub!(:pid).and_return "1212"
|
48
|
+
IO.should_receive(:popen).with("ps -p 1212 | grep redis-server").and_return([])
|
49
|
+
er.running?.should be_false
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns true lines > 0" do
|
53
|
+
er.stub!(:pid).and_return "1212"
|
54
|
+
IO.stub(:popen).with("ps -p 1212 | grep redis-server").and_return(["line"])
|
55
|
+
er.running?.should be_true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#start" do
|
60
|
+
before(:each) do
|
61
|
+
er.stub!(:do_start!)
|
62
|
+
er.stub!(:connection).and_return double("connection")
|
63
|
+
end
|
64
|
+
|
65
|
+
it "calls do_start when running? is false" do
|
66
|
+
er.should_receive(:running?).and_return false
|
67
|
+
er.should_receive(:do_start!).and_return true
|
68
|
+
er.start
|
69
|
+
end
|
70
|
+
|
71
|
+
it "does not call do_start! of running" do
|
72
|
+
er.should_receive(:running?).and_return true
|
73
|
+
er.should_not_receive(:do_start!).and_return true
|
74
|
+
er.start
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "do_start" do
|
79
|
+
it "sets started to true" do
|
80
|
+
er.do_start!
|
81
|
+
er.started.should be_true
|
82
|
+
end
|
83
|
+
|
84
|
+
it "creates dir of pid and socket paths" do
|
85
|
+
er.stub(:base_path).and_return "/custom_base"
|
86
|
+
FileUtils.should_receive(:mkdir_p).with("/custom_base/pids")
|
87
|
+
FileUtils.should_receive(:mkdir_p).with("/custom_base/sockets")
|
88
|
+
er.do_start!
|
89
|
+
end
|
90
|
+
|
91
|
+
it "starts redis" do
|
92
|
+
er.stub(:config).and_return "some config"
|
93
|
+
er.should_receive(:system).with(/echo "some config" \| redis-server -/)
|
94
|
+
er.do_start!
|
95
|
+
end
|
96
|
+
|
97
|
+
it "registers an on_exit hook" do
|
98
|
+
er.should_receive(:at_exit)
|
99
|
+
er.do_start!
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#started?" do
|
104
|
+
it "returns true when started is true" do
|
105
|
+
er.started = true
|
106
|
+
er.started?.should == true
|
107
|
+
end
|
108
|
+
|
109
|
+
it "returns false when started is nil" do
|
110
|
+
er.started = nil
|
111
|
+
er.started?.should == false
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "#connection" do
|
116
|
+
it "calls start when not started" do
|
117
|
+
er.should_receive(:started?).and_return false
|
118
|
+
er.should_receive(:start)
|
119
|
+
er.connection
|
120
|
+
end
|
121
|
+
|
122
|
+
it "does not call start when already started" do
|
123
|
+
er.should_receive(:started?).and_return true
|
124
|
+
er.should_not_receive(:start)
|
125
|
+
er.connection
|
126
|
+
end
|
127
|
+
|
128
|
+
it "creates a new redis connection" do
|
129
|
+
er.instance_variable_set("@connection", nil)
|
130
|
+
er.stub(:socket_path).and_return("/some/socket/path")
|
131
|
+
er.stub(:started?).and_return true
|
132
|
+
redis = er.connection
|
133
|
+
redis.should be_kind_of(Redis)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe DynportTools::RedisQ do
|
4
4
|
let(:key) { "test/redis_queue" }
|
5
|
-
let(:redis) {
|
5
|
+
let(:redis) { EmbeddedRedis.instance.connection }
|
6
6
|
let(:queue) do
|
7
7
|
q = DynportTools::RedisQ.new(key)
|
8
8
|
q.redis = redis
|
data/spec/spec_helper.rb
CHANGED
@@ -21,31 +21,8 @@ RSpec.configure do |config|
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
EmbeddedRedis.instance.logger = Logger.new("/dev/null")
|
25
|
+
|
24
26
|
def root
|
25
27
|
Pathname.new(File.expand_path("../../", __FILE__))
|
26
|
-
end
|
27
|
-
|
28
|
-
def redis_pidfile
|
29
|
-
root.join("tmp/redis.pid")
|
30
|
-
end
|
31
|
-
|
32
|
-
def redis_socket
|
33
|
-
root.join("tmp/redis.socket")
|
34
|
-
end
|
35
|
-
|
36
|
-
redis_config = [
|
37
|
-
"port 0",
|
38
|
-
"unixsocket #{redis_socket}",
|
39
|
-
"pidfile #{redis_pidfile}",
|
40
|
-
"daemonize yes"
|
41
|
-
].join("\n")
|
42
|
-
|
43
|
-
FileUtils.mkdir_p(File.dirname(redis_pidfile))
|
44
|
-
|
45
|
-
system("echo '#{redis_config}' | redis-server -")
|
46
|
-
|
47
|
-
at_exit do
|
48
|
-
pid = File.read(redis_pidfile).strip
|
49
|
-
system("kill #{pid}")
|
50
|
-
FileUtils.rm_f(redis_socket)
|
51
28
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynport_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 55
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 16
|
10
|
+
version: 0.2.16
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Schwab
|
@@ -261,6 +261,7 @@ files:
|
|
261
261
|
- spec/dynport_tools/ascii_table_spec.rb
|
262
262
|
- spec/dynport_tools/deep_merger_spec.rb
|
263
263
|
- spec/dynport_tools/differ_spec.rb
|
264
|
+
- spec/dynport_tools/embedded_redis_spec.rb
|
264
265
|
- spec/dynport_tools/eta_spec.rb
|
265
266
|
- spec/dynport_tools/have_attributes_spec.rb
|
266
267
|
- spec/dynport_tools/jenkins_spec.rb
|