mongo_test_server 0.0.2 → 0.0.3
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.
- 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
|
-
...
|