mongo_test_server 0.0.5 → 0.0.6

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.
@@ -0,0 +1,38 @@
1
+ # coding: UTF-8
2
+
3
+ module MongoTestServer
4
+
5
+ class RamDiskStorage
6
+
7
+ class << self
8
+ def supported?
9
+ `which hdiutil`!=''
10
+ end
11
+ end
12
+
13
+ def initialize(name)
14
+ @name = "#{name}-mongo-ram-disk"
15
+ @path = "/Volumes/#{@name}"
16
+ end
17
+
18
+ def create
19
+ @ram_disk_device ||= lambda {
20
+ device = `hdiutil attach -nomount ram://1000000`.chomp
21
+ `diskutil erasevolume HFS+ #{@name} #{device}`
22
+ device
23
+ }.call
24
+ path
25
+ end
26
+
27
+ def path
28
+ @path
29
+ end
30
+
31
+ def delete
32
+ `umount #{path} 2> /dev/null`
33
+ `hdiutil detach #{@ram_disk_device} 2> /dev/null`
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,30 @@
1
+ # coding: UTF-8
2
+
3
+ module MongoTestServer
4
+
5
+ class TmpStorage
6
+
7
+ require 'tmpdir'
8
+ require 'fileutils'
9
+
10
+ def initialize(name)
11
+ @name = "#{name}-mongo-tmp"
12
+ @tmp_dir = "#{Dir.tmpdir}/#{@name}"
13
+ end
14
+
15
+ def create
16
+ FileUtils.mkdir_p @tmp_dir
17
+ path
18
+ end
19
+
20
+ def path
21
+ @tmp_dir
22
+ end
23
+
24
+ def delete
25
+ FileUtils.rm_rf @tmp_dir
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -1,3 +1,3 @@
1
1
  module MongoTestServer
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -9,6 +9,8 @@ require 'erb'
9
9
  require 'yaml'
10
10
  require 'tempfile'
11
11
  require "mongo_test_server/version"
12
+ require "mongo_test_server/tmp_storage"
13
+ require "mongo_test_server/ram_disk_storage"
12
14
 
13
15
  if defined?(Rails)
14
16
  require 'mongo_test_server/railtie'
@@ -62,43 +64,32 @@ module MongoTestServer
62
64
  @mongo_instance_id = "#{Time.now.to_i}_#{Random.new.rand(100000..900000)}"
63
65
  @oplog_size = 200
64
66
  @configured = true
65
- self.started = false
66
67
  end
67
68
 
68
69
  def use_ram_disk=(bool)
69
- if bool && (`which hdiutil`!='')
70
- @use_ram_disk = true
71
- else
72
- $stderr.puts "MongoTestServer: can't use a ram disk on this system"
73
- @use_ram_disk = false
74
- end
70
+ @use_ram_disk = bool && RamDiskStorage.supported?
75
71
  end
76
72
 
77
73
  def use_ram_disk?
78
74
  @use_ram_disk
79
75
  end
80
76
 
81
- def ram_disk_name
82
- @ram_disk_name ||= "mongodb-ram-#{self.name}"
83
- end
84
-
85
- def setup_ram_disk
86
- @ram_disk_device = `hdiutil attach -nomount ram://1000000`.chomp
87
- `diskutil erasevolume HFS+ #{ram_disk_name} #{@ram_disk_device}`
88
- ram_disk_mount
89
- end
90
-
91
- def ram_disk_mount
92
- "/Volumes/#{ram_disk_name}"
77
+ def storage
78
+ @storage ||= if use_ram_disk?
79
+ $stderr.puts "MongoTestServer: using ram disk storage"
80
+ RamDiskStorage.new(@name)
81
+ else
82
+ $stderr.puts "MongoTestServer: using tmp disk storage"
83
+ TmpStorage.new(@name)
84
+ end
93
85
  end
94
86
 
95
- def teardown_ram_disk
96
- `umount #{ram_disk_mount} 2> /dev/null`
97
- `hdiutil detach #{@ram_disk_device} 2> /dev/null`
87
+ def mongo_storage
88
+ storage.path
98
89
  end
99
90
 
100
91
  def mongo_log
101
- "#{mongo_dir}/mongo_log"
92
+ "#{storage.path}/mongo_log"
102
93
  end
103
94
 
104
95
  def port
@@ -113,61 +104,45 @@ module MongoTestServer
113
104
  @name ||= "#{Random.new.rand(100000..900000)}"
114
105
  end
115
106
 
116
- def mongo_dir
117
- @mongo_dir ||= lambda {
118
- if self.use_ram_disk?
119
- $stderr.puts "MongoTestServer: using ramdisk"
120
- setup_ram_disk
121
- else
122
- "/tmp/#{self.name}_mongo_testserver_#{@mongo_instance_id}"
123
- end
124
- }.call
125
- end
126
-
127
- def remove_mongo_dir
128
- if self.use_ram_disk?
129
- teardown_ram_disk
130
- else
131
- FileUtils.rm_rf self.mongo_dir
132
- end
107
+ def mongo_cmd_line
108
+ "#{self.path} --port #{self.port} --profile 2 --dbpath #{self.mongo_storage} --syncdelay 0 --nojournal --noauth --nohttpinterface --nssize 1 --oplogSize #{@oplog_size} --smallfiles --logpath #{self.mongo_log}"
133
109
  end
134
110
 
135
- def mongo_cmd_line
136
- "#{self.path} --port #{self.port} --dbpath #{self.mongo_dir} --noprealloc --nojournal --noauth --nohttpinterface --nssize 1 --oplogSize #{@oplog_size} --smallfiles --logpath #{self.mongo_log}"
111
+ def before_start
112
+ storage.create
137
113
  end
138
114
 
139
- def prepare
140
- remove_mongo_dir
141
- FileUtils.mkdir_p self.mongo_dir
115
+ def after_stop
116
+ storage.delete
142
117
  end
143
118
 
144
119
  def running?
145
- pids = `ps ax | grep mongod | grep #{self.port} | grep #{self.mongo_dir} | grep -v grep | awk '{print \$1}'`.chomp
120
+ pids = `ps ax | grep mongod | grep #{self.port} | grep #{self.mongo_storage} | grep -v grep | awk '{print \$1}'`.chomp
146
121
  !pids.empty?
147
122
  end
148
123
 
149
124
  def started?
150
- File.directory?(self.mongo_dir) && File.exists?("#{self.mongo_dir}/started")
125
+ File.directory?(self.mongo_storage) && File.exists?("#{self.mongo_storage}/started")
151
126
  end
152
127
 
153
128
  def killed?
154
- !File.directory?(self.mongo_dir) || File.exists?("#{self.mongo_dir}/killed")
129
+ !File.directory?(self.mongo_storage) || File.exists?("#{self.mongo_storage}/killed")
155
130
  end
156
131
 
157
132
  def started=(running)
158
- if File.directory?(self.mongo_dir)
159
- running ? FileUtils.touch("#{self.mongo_dir}/started") : FileUtils.rm_f("#{self.mongo_dir}/started")
133
+ if File.directory?(self.mongo_storage)
134
+ running ? FileUtils.touch("#{self.mongo_storage}/started") : FileUtils.rm_f("#{self.mongo_storage}/started")
160
135
  end
161
136
  end
162
137
 
163
138
  def killed=(killing)
164
- if File.directory?(self.mongo_dir)
165
- killing ? FileUtils.touch("#{self.mongo_dir}/killed") : FileUtils.rm_f("#{self.mongo_dir}/killed")
139
+ if File.directory?(self.mongo_storage)
140
+ killing ? FileUtils.touch("#{self.mongo_storage}/killed") : FileUtils.rm_f("#{self.mongo_storage}/killed")
166
141
  end
167
142
  end
168
143
 
169
144
  def error?
170
- File.exists?("#{self.mongo_dir}/error")
145
+ File.exists?("#{self.mongo_storage}/error")
171
146
  end
172
147
 
173
148
  def configured?
@@ -176,7 +151,7 @@ module MongoTestServer
176
151
 
177
152
  def start
178
153
  unless started?
179
- prepare
154
+ before_start
180
155
  if RUBY_PLATFORM=='java'
181
156
  @mongo_process_or_thread = Thread.new { run(mongo_cmd_line) }
182
157
  else
@@ -200,7 +175,7 @@ module MongoTestServer
200
175
  <#{self.class.name}> Result is: #{IO.binread(self.mongo_log) rescue "No mongo log on disk"}
201
176
  <#{self.class.name}> Error is: #{File.read(error_filepath) rescue "No error file on disk"}
202
177
  ERROR
203
- File.open("#{self.mongo_dir}/error", 'w') do |f|
178
+ File.open("#{self.mongo_storage}/error", 'w') do |f|
204
179
  f << error_message
205
180
  end
206
181
  self.killed=true
@@ -249,7 +224,7 @@ module MongoTestServer
249
224
  end
250
225
 
251
226
  def pids
252
- pids = `ps ax | grep mongod | grep #{self.port} | grep #{self.mongo_dir} | grep -v grep | awk '{print \$1}'`.chomp
227
+ pids = `ps ax | grep mongod | grep #{self.port} | grep #{self.mongo_storage} | grep -v grep | awk '{print \$1}'`.chomp
253
228
  pids.split("\n").map {|p| (p.nil? || p=='') ? nil : p.to_i }
254
229
  end
255
230
 
@@ -258,7 +233,7 @@ module MongoTestServer
258
233
  self.killed = true
259
234
  self.started = false
260
235
  mongo_pids.each { |ppid| `kill -9 #{ppid} 2> /dev/null` }
261
- remove_mongo_dir
236
+ after_stop
262
237
  self
263
238
  end
264
239
 
@@ -86,9 +86,9 @@ describe MongoTestServer::Mongod do
86
86
 
87
87
  it "should cleanup after itself" do
88
88
  subject.started?.should be_true
89
- File.directory?(subject.mongo_dir).should be_true
89
+ File.directory?(subject.mongo_storage).should be_true
90
90
  subject.stop
91
- File.exists?(subject.mongo_dir).should be_false
91
+ File.exists?(subject.mongo_storage).should be_false
92
92
  end
93
93
 
94
94
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_test_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -91,6 +91,8 @@ files:
91
91
  - lib/mongo_test_server.rb
92
92
  - lib/mongo_test_server/engine.rb
93
93
  - lib/mongo_test_server/railtie.rb
94
+ - lib/mongo_test_server/ram_disk_storage.rb
95
+ - lib/mongo_test_server/tmp_storage.rb
94
96
  - lib/mongo_test_server/version.rb
95
97
  - mongo_test_server.gemspec
96
98
  - spec/mongo_test_server/mongo_test_server_spec.rb