mongo_test_server 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mongo_test_server/version.rb +1 -1
- data/lib/mongo_test_server.rb +58 -22
- data/mongo_test_server.gemspec +2 -1
- data/spec/spec_helper.rb +1 -1
- metadata +61 -19
data/lib/mongo_test_server.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# coding: UTF-8
|
2
|
-
|
2
|
+
#begin
|
3
|
+
# require 'mongo'
|
4
|
+
#rescue LoadError => e
|
5
|
+
# require 'moped'
|
6
|
+
#end
|
3
7
|
require 'fileutils'
|
4
8
|
require 'erb'
|
5
9
|
require 'yaml'
|
@@ -7,9 +11,9 @@ require 'tempfile'
|
|
7
11
|
require "mongo_test_server/version"
|
8
12
|
|
9
13
|
module MongoTestServer
|
10
|
-
|
14
|
+
|
11
15
|
class Mongod
|
12
|
-
|
16
|
+
|
13
17
|
class << self
|
14
18
|
|
15
19
|
def configure(options={}, &block)
|
@@ -22,7 +26,7 @@ module MongoTestServer
|
|
22
26
|
def server
|
23
27
|
@mongo_test_server ||= new
|
24
28
|
end
|
25
|
-
|
29
|
+
|
26
30
|
def start_server
|
27
31
|
unless @mongo_test_server.nil?
|
28
32
|
@mongo_test_server.start
|
@@ -30,20 +34,20 @@ module MongoTestServer
|
|
30
34
|
puts "MongoTestServer not configured properly!"
|
31
35
|
end
|
32
36
|
end
|
33
|
-
|
37
|
+
|
34
38
|
def stop_server
|
35
39
|
unless @mongo_test_server.nil?
|
36
40
|
@mongo_test_server.stop
|
37
41
|
end
|
38
42
|
end
|
39
|
-
|
43
|
+
|
40
44
|
end
|
41
45
|
|
42
46
|
attr_writer :port
|
43
47
|
attr_writer :path
|
44
48
|
attr_writer :name
|
45
49
|
attr_reader :mongo_instance_id
|
46
|
-
|
50
|
+
|
47
51
|
def initialize(port=nil, name=nil, path=nil)
|
48
52
|
self.port = port
|
49
53
|
self.path = path
|
@@ -78,7 +82,7 @@ module MongoTestServer
|
|
78
82
|
def mongo_cmd_line
|
79
83
|
"#{self.path} --port #{self.port} --dbpath #{self.mongo_dir} --noprealloc --nojournal --noauth --nohttpinterface --nssize 1 --oplogSize #{@oplog_size} --smallfiles --logpath #{self.mongo_log}"
|
80
84
|
end
|
81
|
-
|
85
|
+
|
82
86
|
def prepare
|
83
87
|
FileUtils.rm_rf self.mongo_dir
|
84
88
|
FileUtils.mkdir_p self.mongo_dir
|
@@ -88,7 +92,7 @@ module MongoTestServer
|
|
88
92
|
pids = `ps ax | grep mongod | grep #{self.port} | grep #{self.mongo_dir} | grep -v grep | awk '{print \$1}'`.chomp
|
89
93
|
!pids.empty?
|
90
94
|
end
|
91
|
-
|
95
|
+
|
92
96
|
def started?
|
93
97
|
File.directory?(self.mongo_dir) && File.exists?("#{self.mongo_dir}/started")
|
94
98
|
end
|
@@ -112,11 +116,11 @@ module MongoTestServer
|
|
112
116
|
def error?
|
113
117
|
File.exists?("#{self.mongo_dir}/error")
|
114
118
|
end
|
115
|
-
|
119
|
+
|
116
120
|
def configured?
|
117
121
|
@configured
|
118
122
|
end
|
119
|
-
|
123
|
+
|
120
124
|
def start
|
121
125
|
unless started?
|
122
126
|
prepare
|
@@ -140,8 +144,8 @@ module MongoTestServer
|
|
140
144
|
unless killed? || $?.success?
|
141
145
|
error_message = <<-ERROR
|
142
146
|
<#{self.class.name}> Error executing command: #{command}
|
143
|
-
<#{self.class.name}> Result is: #{IO.binread(self.mongo_log)}
|
144
|
-
<#{self.class.name}> Error is: #{File.read(error_filepath)}
|
147
|
+
<#{self.class.name}> Result is: #{IO.binread(self.mongo_log) rescue "No mongo log on disk"}
|
148
|
+
<#{self.class.name}> Error is: #{File.read(error_filepath) rescue "No error file on disk"}
|
145
149
|
ERROR
|
146
150
|
File.open("#{self.mongo_dir}/error", 'w') do |f|
|
147
151
|
f << error_message
|
@@ -150,13 +154,24 @@ module MongoTestServer
|
|
150
154
|
end
|
151
155
|
result
|
152
156
|
end
|
153
|
-
|
157
|
+
|
158
|
+
def test_connection!
|
159
|
+
if defined?(Mongo)
|
160
|
+
c = Mongo::Connection.new("localhost", self.port)
|
161
|
+
c.close
|
162
|
+
elsif defined?(Moped)
|
163
|
+
session = Moped::Session.new(["localhost:#{self.port}"])
|
164
|
+
session.disconnect
|
165
|
+
else
|
166
|
+
raise Exeption.new "No mongo driver loaded! Only the official mongo driver and the moped driver are supported"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
154
170
|
def wait_until_ready
|
155
171
|
retries = 10
|
156
172
|
begin
|
157
173
|
self.started = true
|
158
|
-
|
159
|
-
c.close
|
174
|
+
test_connection!
|
160
175
|
rescue Exception => e
|
161
176
|
if retries>0 && !killed? && !error?
|
162
177
|
retries -= 1
|
@@ -167,20 +182,24 @@ module MongoTestServer
|
|
167
182
|
error_lines = []
|
168
183
|
error_lines << "<#{self.class.name}> cmd was: #{mongo_cmd_line}"
|
169
184
|
error_lines << "<#{self.class.name}> ERROR: Failed to connect to mongo database: #{e.message}"
|
170
|
-
|
171
|
-
|
185
|
+
begin
|
186
|
+
IO.binread(self.mongo_log).split("\n").each do |line|
|
187
|
+
error_lines << "<#{self.class.name}> #{line}"
|
188
|
+
end
|
189
|
+
rescue Exception => e
|
190
|
+
error_lines << "No mongo log on disk at #{self.mongo_log}"
|
172
191
|
end
|
173
192
|
stop
|
174
193
|
raise Exception.new error_lines.join("\n")
|
175
194
|
end
|
176
195
|
end
|
177
196
|
end
|
178
|
-
|
197
|
+
|
179
198
|
def pids
|
180
199
|
pids = `ps ax | grep mongod | grep #{self.port} | grep #{self.mongo_dir} | grep -v grep | awk '{print \$1}'`.chomp
|
181
200
|
pids.split("\n").map {|p| (p.nil? || p=='') ? nil : p.to_i }
|
182
201
|
end
|
183
|
-
|
202
|
+
|
184
203
|
def stop
|
185
204
|
mongo_pids = pids
|
186
205
|
self.killed = true
|
@@ -193,7 +212,11 @@ module MongoTestServer
|
|
193
212
|
def mongoid_options(options={})
|
194
213
|
options = {host: "localhost", port: self.port, database: "#{self.name}_test_db", use_utc: false, use_activesupport_time_zone: true}.merge(options)
|
195
214
|
end
|
196
|
-
|
215
|
+
|
216
|
+
def mongoid3_options(options={})
|
217
|
+
options = {hosts: ["localhost:#{self.port}"], database: "#{self.name}_test_db", use_utc: false, use_activesupport_time_zone: true}.merge(options)
|
218
|
+
end
|
219
|
+
|
197
220
|
def mongoid_yml(options={})
|
198
221
|
options = mongoid_options(options)
|
199
222
|
mongo_conf_yaml = <<EOY
|
@@ -204,6 +227,19 @@ use_utc: #{options[:use_utc]}
|
|
204
227
|
use_activesupport_time_zone: #{options[:use_activesupport_time_zone]}
|
205
228
|
EOY
|
206
229
|
end
|
207
|
-
|
230
|
+
|
231
|
+
def mongoid3_yml(options={})
|
232
|
+
options = mongoid3_options(options)
|
233
|
+
mongo_conf_yaml = <<EOY
|
234
|
+
sessions:
|
235
|
+
default:
|
236
|
+
hosts:
|
237
|
+
- #{options[:hosts].first}
|
238
|
+
database : #{options[:database]}
|
239
|
+
use_utc: #{options[:use_utc]}
|
240
|
+
use_activesupport_time_zone: #{options[:use_activesupport_time_zone]}
|
241
|
+
EOY
|
242
|
+
end
|
243
|
+
|
208
244
|
end
|
209
245
|
end
|
data/mongo_test_server.gemspec
CHANGED
@@ -15,7 +15,8 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = MongoTestServer::VERSION
|
17
17
|
|
18
|
-
gem.
|
18
|
+
gem.add_development_dependency('mongo', '>=1.6.0')
|
19
|
+
gem.add_development_dependency('moped', '>=1.3.0')
|
19
20
|
unless RUBY_PLATFORM == 'java'
|
20
21
|
gem.add_development_dependency('bson_ext', '>=1.3.0')
|
21
22
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,39 +1,82 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_test_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- John Axel Eriksson
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongo
|
16
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
17
18
|
requirements:
|
18
19
|
- - ! '>='
|
19
20
|
- !ruby/object:Gem::Version
|
20
21
|
version: 1.6.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
25
|
none: false
|
22
|
-
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.6.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: moped
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.3.0
|
38
|
+
type: :development
|
23
39
|
prerelease: false
|
24
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.3.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bson_ext
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.3.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.0
|
25
62
|
- !ruby/object:Gem::Dependency
|
26
63
|
name: rspec
|
27
|
-
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
28
66
|
requirements:
|
29
67
|
- - ! '>='
|
30
68
|
- !ruby/object:Gem::Version
|
31
69
|
version: 2.6.0
|
32
|
-
none: false
|
33
|
-
requirement: *2074
|
34
|
-
prerelease: false
|
35
70
|
type: :development
|
36
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.6.0
|
78
|
+
description: Standalone mongo test server for use with rspec or other unit testing
|
79
|
+
framework
|
37
80
|
email:
|
38
81
|
- john@insane.se
|
39
82
|
executables: []
|
@@ -53,29 +96,28 @@ files:
|
|
53
96
|
- test.rb
|
54
97
|
homepage: ''
|
55
98
|
licenses: []
|
56
|
-
post_install_message:
|
99
|
+
post_install_message:
|
57
100
|
rdoc_options: []
|
58
101
|
require_paths:
|
59
102
|
- lib
|
60
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
61
105
|
requirements:
|
62
106
|
- - ! '>='
|
63
107
|
- !ruby/object:Gem::Version
|
64
108
|
version: '0'
|
65
|
-
none: false
|
66
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
67
111
|
requirements:
|
68
112
|
- - ! '>='
|
69
113
|
- !ruby/object:Gem::Version
|
70
114
|
version: '0'
|
71
|
-
none: false
|
72
115
|
requirements: []
|
73
|
-
rubyforge_project:
|
74
|
-
rubygems_version: 1.8.
|
75
|
-
signing_key:
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.23
|
118
|
+
signing_key:
|
76
119
|
specification_version: 3
|
77
120
|
summary: Standalone mongo test server for use with rspec or other unit testing framework
|
78
121
|
test_files:
|
79
122
|
- spec/mongo_test_server/mongo_test_server_spec.rb
|
80
123
|
- spec/spec_helper.rb
|
81
|
-
...
|