derelict_m 0.6.2a
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.
- checksums.yaml +7 -0
- data/.cane +2 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +18 -0
- data/.travis.yml +16 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +99 -0
- data/Rakefile +22 -0
- data/derelict.gemspec +63 -0
- data/lib/derelict.rb +74 -0
- data/lib/derelict/box.rb +29 -0
- data/lib/derelict/box/manager.rb +111 -0
- data/lib/derelict/box/not_found.rb +16 -0
- data/lib/derelict/connection.rb +84 -0
- data/lib/derelict/connection/invalid.rb +14 -0
- data/lib/derelict/connection/not_found.rb +13 -0
- data/lib/derelict/exception.rb +6 -0
- data/lib/derelict/exception/optional_reason.rb +32 -0
- data/lib/derelict/executer.rb +237 -0
- data/lib/derelict/instance.rb +147 -0
- data/lib/derelict/instance/command_failed.rb +30 -0
- data/lib/derelict/instance/invalid.rb +14 -0
- data/lib/derelict/instance/missing_binary.rb +13 -0
- data/lib/derelict/instance/non_directory.rb +13 -0
- data/lib/derelict/instance/not_found.rb +13 -0
- data/lib/derelict/parser.rb +27 -0
- data/lib/derelict/parser/box_list.rb +53 -0
- data/lib/derelict/parser/box_list/invalid_format.rb +16 -0
- data/lib/derelict/parser/plugin_list.rb +63 -0
- data/lib/derelict/parser/plugin_list/invalid_format.rb +16 -0
- data/lib/derelict/parser/plugin_list/needs_reinstall.rb +22 -0
- data/lib/derelict/parser/status.rb +90 -0
- data/lib/derelict/parser/status/invalid_format.rb +16 -0
- data/lib/derelict/parser/version.rb +28 -0
- data/lib/derelict/parser/version/invalid_format.rb +16 -0
- data/lib/derelict/plugin.rb +29 -0
- data/lib/derelict/plugin/manager.rb +107 -0
- data/lib/derelict/plugin/not_found.rb +14 -0
- data/lib/derelict/utils.rb +11 -0
- data/lib/derelict/utils/logger.rb +59 -0
- data/lib/derelict/utils/logger/array_outputter.rb +43 -0
- data/lib/derelict/utils/logger/invalid_type.rb +15 -0
- data/lib/derelict/utils/logger/raw_formatter.rb +12 -0
- data/lib/derelict/version.rb +3 -0
- data/lib/derelict/virtual_machine.rb +190 -0
- data/lib/derelict/virtual_machine/invalid.rb +14 -0
- data/lib/derelict/virtual_machine/not_found.rb +18 -0
- data/spec/coverage_helper.rb +19 -0
- data/spec/derelict/box/manager_spec.rb +171 -0
- data/spec/derelict/box/not_found_spec.rb +13 -0
- data/spec/derelict/box_spec.rb +37 -0
- data/spec/derelict/connection/invalid_spec.rb +16 -0
- data/spec/derelict/connection/not_found_spec.rb +13 -0
- data/spec/derelict/connection_spec.rb +107 -0
- data/spec/derelict/exception/optional_reason_spec.rb +41 -0
- data/spec/derelict/exception_spec.rb +11 -0
- data/spec/derelict/executer_spec.rb +129 -0
- data/spec/derelict/instance/command_failed_spec.rb +40 -0
- data/spec/derelict/instance/invalid_spec.rb +16 -0
- data/spec/derelict/instance/missing_binary_spec.rb +13 -0
- data/spec/derelict/instance/non_directory_spec.rb +13 -0
- data/spec/derelict/instance/not_found_spec.rb +13 -0
- data/spec/derelict/instance_spec.rb +258 -0
- data/spec/derelict/parser/box_list/invalid_format_spec.rb +16 -0
- data/spec/derelict/parser/box_list_spec.rb +64 -0
- data/spec/derelict/parser/plugin_list/invalid_format_spec.rb +16 -0
- data/spec/derelict/parser/plugin_list/needs_reinstall_spec.rb +13 -0
- data/spec/derelict/parser/plugin_list_spec.rb +82 -0
- data/spec/derelict/parser/status/invalid_format_spec.rb +16 -0
- data/spec/derelict/parser/status_spec.rb +214 -0
- data/spec/derelict/parser/version/invalid_format_spec.rb +16 -0
- data/spec/derelict/parser/version_spec.rb +42 -0
- data/spec/derelict/parser_spec.rb +24 -0
- data/spec/derelict/plugin/manager_spec.rb +208 -0
- data/spec/derelict/plugin/not_found_spec.rb +13 -0
- data/spec/derelict/plugin_spec.rb +37 -0
- data/spec/derelict/utils/logger/array_outputter_spec.rb +40 -0
- data/spec/derelict/utils/logger/invalid_type_spec.rb +13 -0
- data/spec/derelict/utils/logger/raw_formatter_spec.rb +17 -0
- data/spec/derelict/utils/logger_spec.rb +35 -0
- data/spec/derelict/virtual_machine/invalid_spec.rb +16 -0
- data/spec/derelict/virtual_machine/not_found_spec.rb +34 -0
- data/spec/derelict/virtual_machine_spec.rb +356 -0
- data/spec/derelict_spec.rb +50 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/support/log_context.rb +36 -0
- metadata +332 -0
@@ -0,0 +1,356 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Derelict::VirtualMachine do
|
4
|
+
let(:connection) { double("connection", :description => "test") }
|
5
|
+
let(:name) { double("name", :inspect => "testvm") }
|
6
|
+
|
7
|
+
let(:vm) { Derelict::VirtualMachine.new connection, name }
|
8
|
+
subject { vm }
|
9
|
+
|
10
|
+
describe "#initialize" do
|
11
|
+
it "should succeed" do
|
12
|
+
expect { subject }.to_not raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
include_context "logged messages"
|
16
|
+
let(:expected_logs) {[
|
17
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
18
|
+
]}
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#validate!" do
|
22
|
+
before { expect(vm).to receive(:exists?).and_return(exists?) }
|
23
|
+
subject { vm.validate! }
|
24
|
+
|
25
|
+
context "when exists? is false" do
|
26
|
+
let(:exists?) { false }
|
27
|
+
it "should raise NotFound" do
|
28
|
+
expect { subject }.to raise_error Derelict::VirtualMachine::NotFound
|
29
|
+
end
|
30
|
+
|
31
|
+
include_context "logged messages"
|
32
|
+
let(:expected_logs) {[
|
33
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
34
|
+
"DEBUG virtualmachine: Starting validation for Derelict::VirtualMachine 'testvm' from test\n",
|
35
|
+
]}
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when exists? is true" do
|
39
|
+
let(:exists?) { true }
|
40
|
+
it "shouldn't raise any errors" do
|
41
|
+
expect { subject }.to_not raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should be chainable" do
|
45
|
+
expect(subject).to be subject
|
46
|
+
end
|
47
|
+
|
48
|
+
include_context "logged messages"
|
49
|
+
let(:expected_logs) {[
|
50
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
51
|
+
"DEBUG virtualmachine: Starting validation for Derelict::VirtualMachine 'testvm' from test\n",
|
52
|
+
" INFO virtualmachine: Successfully validated Derelict::VirtualMachine 'testvm' from test\n",
|
53
|
+
]}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#exists?" do
|
58
|
+
let(:status) { double("status", :exists? => exists?) }
|
59
|
+
let(:exists?) { double("exists") }
|
60
|
+
|
61
|
+
before { expect(vm).to receive(:status).and_return(status) }
|
62
|
+
subject { vm.exists? }
|
63
|
+
|
64
|
+
it "should delegate to the status parser" do
|
65
|
+
expect(subject).to be exists?
|
66
|
+
end
|
67
|
+
|
68
|
+
include_context "logged messages"
|
69
|
+
let(:expected_logs) {[
|
70
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
71
|
+
]}
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#state" do
|
75
|
+
let(:status) { double("status", :state => state) }
|
76
|
+
let(:state) { double("state") }
|
77
|
+
|
78
|
+
before { expect(vm).to receive(:status).and_return(status) }
|
79
|
+
subject { vm.state }
|
80
|
+
|
81
|
+
it "should delegate to the status parser" do
|
82
|
+
expect(subject).to be state
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#running?" do
|
87
|
+
before { expect(vm).to receive(:state).and_return(state) }
|
88
|
+
subject { vm.running? }
|
89
|
+
|
90
|
+
context "when state is :running" do
|
91
|
+
let(:state) { :running }
|
92
|
+
it { should be true }
|
93
|
+
end
|
94
|
+
|
95
|
+
context "when state is :foo" do
|
96
|
+
let(:state) { :foo }
|
97
|
+
it { should be false }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#up!" do
|
102
|
+
let(:options) { Hash.new }
|
103
|
+
let(:result) { double("result") }
|
104
|
+
subject { vm.up! options }
|
105
|
+
|
106
|
+
context "with too few arguments" do
|
107
|
+
before do
|
108
|
+
expect(connection).to receive(:execute!).with(:up, name)
|
109
|
+
end
|
110
|
+
|
111
|
+
subject { vm.up! }
|
112
|
+
|
113
|
+
it "should not raise ArgumentError" do
|
114
|
+
expect { subject }.to_not raise_error
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "with too many arguments" do
|
119
|
+
subject { vm.up! options, :extra }
|
120
|
+
|
121
|
+
it "should raise ArgumentError" do
|
122
|
+
expect { subject }.to raise_error ArgumentError
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "with correct number of arguments" do
|
127
|
+
let(:args) { [:up, name] }
|
128
|
+
|
129
|
+
context "with external logging disabled" do
|
130
|
+
before do
|
131
|
+
expect(connection).to receive(:execute!).with(*args).and_return result
|
132
|
+
end
|
133
|
+
|
134
|
+
include_context "logged messages"
|
135
|
+
let(:expected_logs) {[
|
136
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
137
|
+
" INFO virtualmachine: Bringing up Derelict::VirtualMachine 'testvm' from test\n",
|
138
|
+
]}
|
139
|
+
|
140
|
+
context "with different provider" do
|
141
|
+
let(:options) { {:provider => "foobar"} }
|
142
|
+
let(:args) { [:up, name, "--provider", "foobar"] }
|
143
|
+
|
144
|
+
it { should be result }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context "with external logging enabled" do
|
149
|
+
before do
|
150
|
+
expect(connection).to receive(:execute!).with(*args).and_yield("foo", nil).and_return result
|
151
|
+
end
|
152
|
+
|
153
|
+
let(:options) { {:log => true} }
|
154
|
+
|
155
|
+
include_context "logged messages"
|
156
|
+
let(:expected_logs) {[
|
157
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
158
|
+
" INFO virtualmachine: Bringing up Derelict::VirtualMachine 'testvm' from test\n",
|
159
|
+
" INFO external: foo\n",
|
160
|
+
]}
|
161
|
+
|
162
|
+
context "with color enabled" do
|
163
|
+
let(:options) { {:log => true, :color => true} }
|
164
|
+
let(:args) { [:up, name, '--color'] }
|
165
|
+
it { should be result }
|
166
|
+
end
|
167
|
+
|
168
|
+
context "in chars mode" do
|
169
|
+
let(:options) { {:log => true, :log_mode => :chars} }
|
170
|
+
let(:args) { [:up, name, {:mode => :chars}] }
|
171
|
+
it { should be result }
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
describe "#halt!" do
|
178
|
+
let(:options) { Hash.new }
|
179
|
+
let(:result) { double("result") }
|
180
|
+
subject { vm.halt! options }
|
181
|
+
|
182
|
+
let(:args) { [:halt, name] }
|
183
|
+
before do
|
184
|
+
expect(connection).to receive(:execute!).with(*args).and_yield("foo", nil).and_return result
|
185
|
+
end
|
186
|
+
|
187
|
+
context "with external logging disabled" do
|
188
|
+
include_context "logged messages"
|
189
|
+
let(:expected_logs) {[
|
190
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
191
|
+
" INFO virtualmachine: Halting Derelict::VirtualMachine 'testvm' from test\n",
|
192
|
+
]}
|
193
|
+
end
|
194
|
+
|
195
|
+
context "with external logging enabled" do
|
196
|
+
let(:options) { {:log => true} }
|
197
|
+
|
198
|
+
include_context "logged messages"
|
199
|
+
let(:expected_logs) {[
|
200
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
201
|
+
" INFO virtualmachine: Halting Derelict::VirtualMachine 'testvm' from test\n",
|
202
|
+
" INFO external: foo\n",
|
203
|
+
]}
|
204
|
+
|
205
|
+
context "with color enabled" do
|
206
|
+
let(:options) { {:log => true, :color => true} }
|
207
|
+
let(:args) { [:halt, name, '--color'] }
|
208
|
+
it { should be result }
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
describe "#destroy!" do
|
214
|
+
let(:options) { Hash.new }
|
215
|
+
let(:result) { double("result") }
|
216
|
+
subject { vm.destroy! options }
|
217
|
+
|
218
|
+
let(:args) { [:destroy, name, '--force'] }
|
219
|
+
before do
|
220
|
+
expect(connection).to receive(:execute!).with(*args).and_yield("foo", nil).and_return result
|
221
|
+
end
|
222
|
+
|
223
|
+
context "with external logging disabled" do
|
224
|
+
include_context "logged messages"
|
225
|
+
let(:expected_logs) {[
|
226
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
227
|
+
" INFO virtualmachine: Destroying Derelict::VirtualMachine 'testvm' from test\n",
|
228
|
+
]}
|
229
|
+
end
|
230
|
+
|
231
|
+
context "with external logging enabled" do
|
232
|
+
let(:options) { {:log => true} }
|
233
|
+
|
234
|
+
include_context "logged messages"
|
235
|
+
let(:expected_logs) {[
|
236
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
237
|
+
" INFO virtualmachine: Destroying Derelict::VirtualMachine 'testvm' from test\n",
|
238
|
+
" INFO external: foo\n",
|
239
|
+
]}
|
240
|
+
|
241
|
+
context "with color enabled" do
|
242
|
+
let(:options) { {:log => true, :color => true} }
|
243
|
+
let(:args) { [:destroy, name, '--force', '--color'] }
|
244
|
+
it { should be result }
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
describe "#reload!" do
|
250
|
+
let(:options) { Hash.new }
|
251
|
+
let(:result) { double("result") }
|
252
|
+
subject { vm.reload! options }
|
253
|
+
|
254
|
+
before do
|
255
|
+
expect(connection).to receive(:execute!).with(:reload, name).and_yield("foo", nil).and_return result
|
256
|
+
end
|
257
|
+
|
258
|
+
context "with external logging disabled" do
|
259
|
+
include_context "logged messages"
|
260
|
+
let(:expected_logs) {[
|
261
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
262
|
+
" INFO virtualmachine: Reloading Derelict::VirtualMachine 'testvm' from test\n",
|
263
|
+
]}
|
264
|
+
end
|
265
|
+
|
266
|
+
context "with external logging enabled" do
|
267
|
+
let(:options) { {:log => true} }
|
268
|
+
|
269
|
+
include_context "logged messages"
|
270
|
+
let(:expected_logs) {[
|
271
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
272
|
+
" INFO virtualmachine: Reloading Derelict::VirtualMachine 'testvm' from test\n",
|
273
|
+
" INFO external: foo\n",
|
274
|
+
]}
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
describe "#suspend!" do
|
279
|
+
let(:options) { Hash.new }
|
280
|
+
let(:result) { double("result") }
|
281
|
+
subject { vm.suspend! options }
|
282
|
+
|
283
|
+
before do
|
284
|
+
expect(connection).to receive(:execute!).with(:suspend, name).and_yield("foo", nil).and_return result
|
285
|
+
end
|
286
|
+
|
287
|
+
context "with external logging disabled" do
|
288
|
+
include_context "logged messages"
|
289
|
+
let(:expected_logs) {[
|
290
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
291
|
+
" INFO virtualmachine: Suspending Derelict::VirtualMachine 'testvm' from test\n",
|
292
|
+
]}
|
293
|
+
end
|
294
|
+
|
295
|
+
context "with external logging enabled" do
|
296
|
+
let(:options) { {:log => true} }
|
297
|
+
|
298
|
+
include_context "logged messages"
|
299
|
+
let(:expected_logs) {[
|
300
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
301
|
+
" INFO virtualmachine: Suspending Derelict::VirtualMachine 'testvm' from test\n",
|
302
|
+
" INFO external: foo\n",
|
303
|
+
]}
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
describe "#resume!" do
|
308
|
+
let(:options) { Hash.new }
|
309
|
+
let(:result) { double("result") }
|
310
|
+
subject { vm.resume! options }
|
311
|
+
|
312
|
+
before do
|
313
|
+
expect(connection).to receive(:execute!).with(:resume, name).and_yield("foo", nil).and_return result
|
314
|
+
end
|
315
|
+
|
316
|
+
context "with external logging disabled" do
|
317
|
+
include_context "logged messages"
|
318
|
+
let(:expected_logs) {[
|
319
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
320
|
+
" INFO virtualmachine: Resuming Derelict::VirtualMachine 'testvm' from test\n",
|
321
|
+
]}
|
322
|
+
end
|
323
|
+
|
324
|
+
context "with external logging enabled" do
|
325
|
+
let(:options) { {:log => true} }
|
326
|
+
|
327
|
+
include_context "logged messages"
|
328
|
+
let(:expected_logs) {[
|
329
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
330
|
+
" INFO virtualmachine: Resuming Derelict::VirtualMachine 'testvm' from test\n",
|
331
|
+
" INFO external: foo\n",
|
332
|
+
]}
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
describe "#status" do
|
337
|
+
let(:result) { double("result", :stdout => stdout) }
|
338
|
+
let(:stdout) { double("stdout") }
|
339
|
+
subject { vm.status }
|
340
|
+
|
341
|
+
before do
|
342
|
+
expect(connection).to receive(:execute!).with(:status).and_return(result)
|
343
|
+
expect(Derelict::Parser::Status).to receive(:new).with(stdout).and_return(:return_value)
|
344
|
+
end
|
345
|
+
|
346
|
+
it "should parse status data from the connection" do
|
347
|
+
expect(subject).to be :return_value
|
348
|
+
end
|
349
|
+
|
350
|
+
include_context "logged messages"
|
351
|
+
let(:expected_logs) {[
|
352
|
+
"DEBUG virtualmachine: Successfully initialized Derelict::VirtualMachine 'testvm' from test\n",
|
353
|
+
" INFO virtualmachine: Retrieving Vagrant status for Derelict::VirtualMachine 'testvm' from test\n",
|
354
|
+
]}
|
355
|
+
end
|
356
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Derelict do
|
4
|
+
describe "#instance" do
|
5
|
+
let(:instance) { double("instance") }
|
6
|
+
before {
|
7
|
+
expect(Derelict::Instance).to receive(:new).and_return(instance)
|
8
|
+
expect(instance).to receive(:validate!).and_return(instance)
|
9
|
+
}
|
10
|
+
|
11
|
+
subject { Derelict.instance }
|
12
|
+
it { should be instance }
|
13
|
+
|
14
|
+
include_context "logged messages"
|
15
|
+
let(:expected_logs) {[
|
16
|
+
" INFO derelict: Creating and validating new instance for '/Applications/Vagrant'\n"
|
17
|
+
]}
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#debug!" do
|
21
|
+
let(:enabled) { double("enabled") }
|
22
|
+
let(:level) { double("level") }
|
23
|
+
let(:logger) { Derelict.logger }
|
24
|
+
let(:stderr) { Log4r::Outputter.stderr }
|
25
|
+
|
26
|
+
subject { Derelict.debug! :enabled => enabled, :level => level }
|
27
|
+
|
28
|
+
context "when enabling debug mode" do
|
29
|
+
before do
|
30
|
+
expect(logger).to receive(:level=).with(level).and_return(nil)
|
31
|
+
expect(logger).to receive(:outputters).and_return(Array.new)
|
32
|
+
expect(logger).to receive(:add).with(stderr).and_return(logger)
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:enabled) { true }
|
36
|
+
it { should be Derelict }
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when disabling debug mode" do
|
40
|
+
before do
|
41
|
+
expect(logger).to receive(:level=).with(Log4r::OFF).and_return(nil)
|
42
|
+
expect(logger).to receive(:remove).with("stderr").and_return(logger)
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:real_level) { Log4r::OFF }
|
46
|
+
let(:enabled) { false }
|
47
|
+
it { should be Derelict }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "coverage_helper"
|
2
|
+
require "derelict"
|
3
|
+
require File.join(File.dirname(__FILE__), "support", "log_context")
|
4
|
+
|
5
|
+
derelict_logger = Derelict.logger
|
6
|
+
external_logger = Derelict.logger :type => :external
|
7
|
+
array_outputter = Derelict::Utils::Logger::ArrayOutputter.new "rspec"
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.before :each do
|
11
|
+
# Start each spec with an empty ArrayOutputter
|
12
|
+
array_outputter.flush
|
13
|
+
|
14
|
+
# Remove any outputters set on other loggers
|
15
|
+
Log4r::Logger.each {|fullname, logger| logger.outputters = [] }
|
16
|
+
|
17
|
+
# Add the ArrayOutputter to the base Derelict logger
|
18
|
+
derelict_logger.outputters = [array_outputter]
|
19
|
+
external_logger.outputters = [array_outputter]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Forbid .should syntax
|
23
|
+
config.expect_with :rspec do |c|
|
24
|
+
c.syntax = :expect
|
25
|
+
end
|
26
|
+
|
27
|
+
# Run specs in random order to surface order dependencies. If you find an
|
28
|
+
# order dependency and want to debug it, you can fix the order by providing
|
29
|
+
# the seed, which is printed after each run.
|
30
|
+
# --seed 1234
|
31
|
+
config.order = "random"
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
# Provides set-up and examples to assert logged messages
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
#
|
7
|
+
# * Ensure that the "subject" from the parent context will perform
|
8
|
+
# the action which is expected to produce the log messages
|
9
|
+
# * Provide a "let(:expected_logs)" block, defining which logs are
|
10
|
+
# expected to result from the action performed in the "before"
|
11
|
+
# block (otherwise, it defaults to expecting no log messages)
|
12
|
+
shared_context "logged messages" do
|
13
|
+
let(:outputter) { Log4r::Outputter["rspec"] }
|
14
|
+
let(:messages) { outputter.messages }
|
15
|
+
|
16
|
+
# Override this let block when including this shared context
|
17
|
+
let(:expected_logs) { [] }
|
18
|
+
|
19
|
+
# Add an additional context for readability in the output
|
20
|
+
describe "logged messages" do
|
21
|
+
before do
|
22
|
+
begin
|
23
|
+
subject
|
24
|
+
rescue Exception
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be an Array" do
|
29
|
+
expect(messages).to be_an Array
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should contain the expected log messages" do
|
33
|
+
expect(messages).to eq expected_logs
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|