vmc 0.4.0.beta.33 → 0.4.0.beta.34
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,408 @@
|
|
1
|
+
require "cfoundry"
|
2
|
+
require "vmc"
|
3
|
+
|
4
|
+
require "vmc/spec_helpers/eventlog"
|
5
|
+
require "vmc/spec_helpers/patches"
|
6
|
+
|
7
|
+
|
8
|
+
TARGET = ENV["VMC_TEST_TARGET"] || "http://localhost:8181"
|
9
|
+
USER = ENV["VMC_TEST_USER"] || "sre@vmware.com"
|
10
|
+
PASSWORD = ENV["VMC_TEST_PASSWORD"] || "test"
|
11
|
+
|
12
|
+
module VMCHelpers
|
13
|
+
def random_str
|
14
|
+
format("%x", rand(1000000))
|
15
|
+
end
|
16
|
+
|
17
|
+
def client
|
18
|
+
VMC::CLI.client
|
19
|
+
end
|
20
|
+
|
21
|
+
# invoke a block while logged out
|
22
|
+
def without_auth
|
23
|
+
proxy = client.proxy
|
24
|
+
client.logout
|
25
|
+
client.proxy = nil
|
26
|
+
yield
|
27
|
+
ensure
|
28
|
+
client.login(USER, PASSWORD)
|
29
|
+
client.proxy = proxy
|
30
|
+
end
|
31
|
+
|
32
|
+
# same as Ruby 1.9's Array#sample
|
33
|
+
def sample(ary)
|
34
|
+
ary[rand(ary.size)]
|
35
|
+
end
|
36
|
+
|
37
|
+
# cache frameworks for app generation
|
38
|
+
def frameworks
|
39
|
+
@@frameworks ||= client.frameworks(0)
|
40
|
+
end
|
41
|
+
|
42
|
+
# cache runtimes for app generation
|
43
|
+
def runtimes
|
44
|
+
@@runtimes ||= client.runtimes(0)
|
45
|
+
end
|
46
|
+
|
47
|
+
def with_random_app(space = client.current_space)
|
48
|
+
with_random_apps(space, 1) do |apps|
|
49
|
+
yield apps.first
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# create 2-5 random apps, call the block, and then delete them
|
54
|
+
def with_random_apps(space = client.current_space, num = rand(3) + 2)
|
55
|
+
apps = []
|
56
|
+
|
57
|
+
num.times do |n|
|
58
|
+
app = client.app
|
59
|
+
app.name = "app-#{n + 1}-#{random_str}"
|
60
|
+
app.space = space
|
61
|
+
app.instances = rand(2)
|
62
|
+
|
63
|
+
app.framework = sample(frameworks)
|
64
|
+
app.runtime = sample(runtimes)
|
65
|
+
app.memory = sample([64, 128, 256, 512])
|
66
|
+
app.create!
|
67
|
+
|
68
|
+
apps << app
|
69
|
+
end
|
70
|
+
|
71
|
+
yield apps
|
72
|
+
ensure
|
73
|
+
apps.each(&:delete!)
|
74
|
+
end
|
75
|
+
|
76
|
+
def with_new_space(org = client.current_organization)
|
77
|
+
space = client.space
|
78
|
+
space.name = "space-#{random_str}"
|
79
|
+
space.organization = org
|
80
|
+
space.create!
|
81
|
+
|
82
|
+
yield space
|
83
|
+
ensure
|
84
|
+
space.delete!
|
85
|
+
end
|
86
|
+
|
87
|
+
def running(command, inputs = {}, given = {})
|
88
|
+
VMC::CLI.new.exit_status 0
|
89
|
+
|
90
|
+
before_in = $stdin
|
91
|
+
before_out = $stdout
|
92
|
+
before_err = $stderr
|
93
|
+
before_event = $vmc_event
|
94
|
+
|
95
|
+
tty = FakeTTY.new
|
96
|
+
|
97
|
+
$vmc_event = EventLog.new(tty)
|
98
|
+
|
99
|
+
$stdin = tty
|
100
|
+
$stdout = StringIO.new
|
101
|
+
$stderr = StringIO.new
|
102
|
+
|
103
|
+
main = Thread.current
|
104
|
+
|
105
|
+
thd = Thread.new do
|
106
|
+
begin
|
107
|
+
VMC::CLI.new.invoke(command, inputs, given)
|
108
|
+
rescue SystemExit => e
|
109
|
+
unless e.status == 0
|
110
|
+
raise <<EOF
|
111
|
+
execution failed with status #{e.status}!
|
112
|
+
|
113
|
+
stdout:
|
114
|
+
#{$stdout.string.inspect}
|
115
|
+
|
116
|
+
stderr:
|
117
|
+
#{$stderr.string}
|
118
|
+
EOF
|
119
|
+
end
|
120
|
+
rescue => e
|
121
|
+
$vmc_event.raised(e)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
begin
|
126
|
+
$vmc_event.process = thd
|
127
|
+
|
128
|
+
yield $vmc_event
|
129
|
+
|
130
|
+
$vmc_event.should complete
|
131
|
+
ensure
|
132
|
+
thd.kill
|
133
|
+
end
|
134
|
+
ensure
|
135
|
+
$stdin = before_in
|
136
|
+
$stdout = before_out
|
137
|
+
$stderr = before_err
|
138
|
+
$vmc_event = before_event
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
module VMCMatchers
|
143
|
+
class Contain
|
144
|
+
def initialize(content)
|
145
|
+
@content = content
|
146
|
+
end
|
147
|
+
|
148
|
+
def matches?(actual)
|
149
|
+
@actual = actual
|
150
|
+
true
|
151
|
+
end
|
152
|
+
|
153
|
+
def failure_message
|
154
|
+
"expected '#@content' to be in the output"
|
155
|
+
end
|
156
|
+
|
157
|
+
def negative_failure_message
|
158
|
+
"expected '#@content' to NOT be in the output"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def contain(content)
|
163
|
+
Contain.new(content)
|
164
|
+
end
|
165
|
+
|
166
|
+
class Ask
|
167
|
+
def initialize(message)
|
168
|
+
@message = message
|
169
|
+
end
|
170
|
+
|
171
|
+
def matches?(log)
|
172
|
+
ev = log.wait_for_event(EventLog::Asked)
|
173
|
+
|
174
|
+
@actual = ev.message
|
175
|
+
@actual == @message
|
176
|
+
end
|
177
|
+
|
178
|
+
def failure_message
|
179
|
+
"expected to be asked '#@message', got '#@actual'"
|
180
|
+
end
|
181
|
+
|
182
|
+
def negative_failure_message
|
183
|
+
"expected to NOT be asked for #@message"
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def ask(message)
|
188
|
+
Ask.new(message)
|
189
|
+
end
|
190
|
+
|
191
|
+
class HaveInput
|
192
|
+
def initialize(name, value = nil)
|
193
|
+
@name = name
|
194
|
+
@expected = value
|
195
|
+
end
|
196
|
+
|
197
|
+
def matches?(log)
|
198
|
+
@actual = log.wait_for_event(EventLog::GotInput).value
|
199
|
+
@actual == @expected
|
200
|
+
end
|
201
|
+
|
202
|
+
def failure_message
|
203
|
+
"expected to have input '#@name' as '#@expected', but got '#@actual'"
|
204
|
+
end
|
205
|
+
|
206
|
+
def negative_failure_message
|
207
|
+
"expected not to have input '#@name', but had it as '#@actual'"
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def have_input(name, value = nil)
|
212
|
+
HaveInput.new(name, value)
|
213
|
+
end
|
214
|
+
|
215
|
+
class Output
|
216
|
+
def initialize(line)
|
217
|
+
@expected = line
|
218
|
+
end
|
219
|
+
|
220
|
+
def matches?(log)
|
221
|
+
@actual = log.wait_for_event(EventLog::Printed).line
|
222
|
+
@actual == @expected
|
223
|
+
end
|
224
|
+
|
225
|
+
def failure_message
|
226
|
+
"expected '#@expected' to be in the output, but got '#@actual'"
|
227
|
+
end
|
228
|
+
|
229
|
+
def negative_failure_message
|
230
|
+
"expected '#@expected' NOT to be in the output, but it was"
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def output(line)
|
235
|
+
Output.new(line)
|
236
|
+
end
|
237
|
+
|
238
|
+
class Complete
|
239
|
+
def matches?(log)
|
240
|
+
@log = log
|
241
|
+
|
242
|
+
log.process.join(1)
|
243
|
+
|
244
|
+
log.process.status == false
|
245
|
+
end
|
246
|
+
|
247
|
+
def failure_message
|
248
|
+
pending = @log.pending_events
|
249
|
+
|
250
|
+
if @exception
|
251
|
+
"process existed with an exception: #@exception"
|
252
|
+
elsif !pending.empty?
|
253
|
+
"expected process to complete, but it's pending events #{pending}"
|
254
|
+
else
|
255
|
+
"process is blocked; status: #{@log.process.status}"
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def negative_failure_message
|
260
|
+
"expected process to still be running, but it's completed"
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
def complete
|
265
|
+
Complete.new
|
266
|
+
end
|
267
|
+
|
268
|
+
|
269
|
+
class FailWith
|
270
|
+
def initialize(exception, predicate = nil)
|
271
|
+
@expected = exception
|
272
|
+
@predicate = predicate
|
273
|
+
end
|
274
|
+
|
275
|
+
def matches?(log)
|
276
|
+
@actual = log.wait_for_event(EventLog::Raised).exception
|
277
|
+
|
278
|
+
return false unless @actual.is_a?(@expected)
|
279
|
+
|
280
|
+
@predicate.call(@actual) if @predicate
|
281
|
+
|
282
|
+
true
|
283
|
+
end
|
284
|
+
|
285
|
+
def failure_message
|
286
|
+
"expected #@expected to be raised, but got #{@actual.class}: '#@actual'"
|
287
|
+
end
|
288
|
+
|
289
|
+
def negative_failure_message
|
290
|
+
"expected #@expected to NOT be raised, but it was"
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
def fail_with(exception, &blk)
|
295
|
+
FailWith.new(exception, blk)
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
class ProgressExpectation
|
300
|
+
def matches?(log)
|
301
|
+
@actual = log.wait_for_event(EventLog::Progress)
|
302
|
+
@actual == @expected
|
303
|
+
end
|
304
|
+
|
305
|
+
def failure_message
|
306
|
+
"expected to #{@expected.report}, but #{@actual.report_past} instead"
|
307
|
+
end
|
308
|
+
|
309
|
+
def negative_failure_message
|
310
|
+
"expected not to #{@expected.report}"
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
class Successfully < ProgressExpectation
|
315
|
+
def initialize(message)
|
316
|
+
@expected = EventLog::Did.new(message)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
class Skip < ProgressExpectation
|
321
|
+
def initialize(message)
|
322
|
+
@expected = EventLog::Skipped.new(message)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
class FailTo < ProgressExpectation
|
327
|
+
def initialize(message)
|
328
|
+
@expected = EventLog::FailedTo.new(message)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
class GiveUp < ProgressExpectation
|
333
|
+
def initialize(message)
|
334
|
+
@expected = EventLog::GaveUp.new(message)
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def successfully(message)
|
339
|
+
Successfully.new(message)
|
340
|
+
end
|
341
|
+
|
342
|
+
def skip(message)
|
343
|
+
Skip.new(message)
|
344
|
+
end
|
345
|
+
|
346
|
+
def fail_to(message)
|
347
|
+
FailTo.new(message)
|
348
|
+
end
|
349
|
+
|
350
|
+
def give_up(message)
|
351
|
+
GiveUp.new(message)
|
352
|
+
end
|
353
|
+
|
354
|
+
|
355
|
+
def asks(what)
|
356
|
+
$vmc_event.should ask(what)
|
357
|
+
end
|
358
|
+
|
359
|
+
def given(what)
|
360
|
+
$vmc_event.provide("#{what}\n")
|
361
|
+
end
|
362
|
+
|
363
|
+
def has_input(name, value = nil)
|
364
|
+
$vmc_event.should have_input(name, value)
|
365
|
+
end
|
366
|
+
|
367
|
+
def raises(exception, &blk)
|
368
|
+
$vmc_event.should fail_with(exception, &blk)
|
369
|
+
end
|
370
|
+
|
371
|
+
def finish
|
372
|
+
$vmc_event.should complete
|
373
|
+
end
|
374
|
+
|
375
|
+
def outputs(what)
|
376
|
+
$vmc_event.should output(what)
|
377
|
+
end
|
378
|
+
|
379
|
+
def does(what)
|
380
|
+
$vmc_event.should successfully(what)
|
381
|
+
end
|
382
|
+
|
383
|
+
def skips(what)
|
384
|
+
$vmc_event.should skip(what)
|
385
|
+
end
|
386
|
+
|
387
|
+
def fails_to(what)
|
388
|
+
$vmc_event.should fail_to(what)
|
389
|
+
end
|
390
|
+
|
391
|
+
def gives_up(what)
|
392
|
+
$vmc_event.should give_up(what)
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
RSpec.configure do |c|
|
397
|
+
c.include VMCHelpers
|
398
|
+
c.include VMCMatchers
|
399
|
+
|
400
|
+
c.before(:all) do
|
401
|
+
VMC::CLI.client = CFoundry::Client.new(TARGET)
|
402
|
+
|
403
|
+
client.login(:username => USER, :password => PASSWORD)
|
404
|
+
client.current_organization = client.organizations.first
|
405
|
+
client.current_space = client.current_organization.spaces.first
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
File without changes
|
File without changes
|
data/vmc-ng/lib/vmc/version.rb
CHANGED
data/vmc-ng/spec/helpers.rb
CHANGED
@@ -1,414 +1,7 @@
|
|
1
|
+
require "vmc/spec_helpers"
|
1
2
|
require "simplecov"
|
2
3
|
|
3
4
|
SimpleCov.start do
|
4
5
|
root File.expand_path("../../", __FILE__)
|
5
6
|
add_filter "spec/"
|
6
7
|
end
|
7
|
-
|
8
|
-
require "cfoundry"
|
9
|
-
require "vmc"
|
10
|
-
|
11
|
-
require File.expand_path("../eventlog", __FILE__)
|
12
|
-
require File.expand_path("../patches", __FILE__)
|
13
|
-
|
14
|
-
|
15
|
-
TARGET = ENV["VMC_TEST_TARGET"] || "http://localhost:8181"
|
16
|
-
USER = ENV["VMC_TEST_USER"] || "sre@vmware.com"
|
17
|
-
PASSWORD = ENV["VMC_TEST_PASSWORD"] || "test"
|
18
|
-
|
19
|
-
module VMCHelpers
|
20
|
-
def random_str
|
21
|
-
format("%x", rand(1000000))
|
22
|
-
end
|
23
|
-
|
24
|
-
def client
|
25
|
-
VMC::CLI.client
|
26
|
-
end
|
27
|
-
|
28
|
-
# invoke a block while logged out
|
29
|
-
def without_auth
|
30
|
-
proxy = client.proxy
|
31
|
-
client.logout
|
32
|
-
client.proxy = nil
|
33
|
-
yield
|
34
|
-
ensure
|
35
|
-
client.login(USER, PASSWORD)
|
36
|
-
client.proxy = proxy
|
37
|
-
end
|
38
|
-
|
39
|
-
# same as Ruby 1.9's Array#sample
|
40
|
-
def sample(ary)
|
41
|
-
ary[rand(ary.size)]
|
42
|
-
end
|
43
|
-
|
44
|
-
# cache frameworks for app generation
|
45
|
-
def frameworks
|
46
|
-
@@frameworks ||= client.frameworks(0)
|
47
|
-
end
|
48
|
-
|
49
|
-
# cache runtimes for app generation
|
50
|
-
def runtimes
|
51
|
-
@@runtimes ||= client.runtimes(0)
|
52
|
-
end
|
53
|
-
|
54
|
-
def with_random_app(space = client.current_space)
|
55
|
-
with_random_apps(space, 1) do |apps|
|
56
|
-
yield apps.first
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# create 2-5 random apps, call the block, and then delete them
|
61
|
-
def with_random_apps(space = client.current_space, num = rand(3) + 2)
|
62
|
-
apps = []
|
63
|
-
|
64
|
-
num.times do |n|
|
65
|
-
app = client.app
|
66
|
-
app.name = "app-#{n + 1}-#{random_str}"
|
67
|
-
app.space = space
|
68
|
-
app.instances = rand(2)
|
69
|
-
|
70
|
-
app.framework = sample(frameworks)
|
71
|
-
app.runtime = sample(runtimes)
|
72
|
-
app.memory = sample([64, 128, 256, 512])
|
73
|
-
app.create!
|
74
|
-
|
75
|
-
apps << app
|
76
|
-
end
|
77
|
-
|
78
|
-
yield apps
|
79
|
-
ensure
|
80
|
-
apps.each(&:delete!)
|
81
|
-
end
|
82
|
-
|
83
|
-
def with_new_space(org = client.current_organization)
|
84
|
-
space = client.space
|
85
|
-
space.name = "space-#{random_str}"
|
86
|
-
space.organization = org
|
87
|
-
space.create!
|
88
|
-
|
89
|
-
yield space
|
90
|
-
ensure
|
91
|
-
space.delete!
|
92
|
-
end
|
93
|
-
|
94
|
-
def running(command, inputs = {}, given = {})
|
95
|
-
VMC::CLI.new.exit_status 0
|
96
|
-
|
97
|
-
before_in = $stdin
|
98
|
-
before_out = $stdout
|
99
|
-
before_err = $stderr
|
100
|
-
before_event = $vmc_event
|
101
|
-
|
102
|
-
tty = FakeTTY.new
|
103
|
-
|
104
|
-
$vmc_event = EventLog.new(tty)
|
105
|
-
|
106
|
-
$stdin = tty
|
107
|
-
$stdout = StringIO.new
|
108
|
-
$stderr = StringIO.new
|
109
|
-
|
110
|
-
main = Thread.current
|
111
|
-
|
112
|
-
thd = Thread.new do
|
113
|
-
begin
|
114
|
-
VMC::CLI.new.invoke(command, inputs, given)
|
115
|
-
rescue SystemExit => e
|
116
|
-
unless e.status == 0
|
117
|
-
raise <<EOF
|
118
|
-
execution failed with status #{e.status}!
|
119
|
-
|
120
|
-
stdout:
|
121
|
-
#{$stdout.string.inspect}
|
122
|
-
|
123
|
-
stderr:
|
124
|
-
#{$stderr.string}
|
125
|
-
EOF
|
126
|
-
end
|
127
|
-
rescue => e
|
128
|
-
$vmc_event.raised(e)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
begin
|
133
|
-
$vmc_event.process = thd
|
134
|
-
|
135
|
-
yield $vmc_event
|
136
|
-
|
137
|
-
$vmc_event.should complete
|
138
|
-
ensure
|
139
|
-
thd.kill
|
140
|
-
end
|
141
|
-
ensure
|
142
|
-
$stdin = before_in
|
143
|
-
$stdout = before_out
|
144
|
-
$stderr = before_err
|
145
|
-
$vmc_event = before_event
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
module VMCMatchers
|
150
|
-
class Contain
|
151
|
-
def initialize(content)
|
152
|
-
@content = content
|
153
|
-
end
|
154
|
-
|
155
|
-
def matches?(actual)
|
156
|
-
@actual = actual
|
157
|
-
true
|
158
|
-
end
|
159
|
-
|
160
|
-
def failure_message
|
161
|
-
"expected '#@content' to be in the output"
|
162
|
-
end
|
163
|
-
|
164
|
-
def negative_failure_message
|
165
|
-
"expected '#@content' to NOT be in the output"
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def contain(content)
|
170
|
-
Contain.new(content)
|
171
|
-
end
|
172
|
-
|
173
|
-
class Ask
|
174
|
-
def initialize(message)
|
175
|
-
@message = message
|
176
|
-
end
|
177
|
-
|
178
|
-
def matches?(log)
|
179
|
-
ev = log.wait_for_event(EventLog::Asked)
|
180
|
-
|
181
|
-
@actual = ev.message
|
182
|
-
@actual == @message
|
183
|
-
end
|
184
|
-
|
185
|
-
def failure_message
|
186
|
-
"expected to be asked '#@message', got '#@actual'"
|
187
|
-
end
|
188
|
-
|
189
|
-
def negative_failure_message
|
190
|
-
"expected to NOT be asked for #@message"
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def ask(message)
|
195
|
-
Ask.new(message)
|
196
|
-
end
|
197
|
-
|
198
|
-
class HaveInput
|
199
|
-
def initialize(name, value = nil)
|
200
|
-
@name = name
|
201
|
-
@expected = value
|
202
|
-
end
|
203
|
-
|
204
|
-
def matches?(log)
|
205
|
-
@actual = log.wait_for_event(EventLog::GotInput).value
|
206
|
-
@actual == @expected
|
207
|
-
end
|
208
|
-
|
209
|
-
def failure_message
|
210
|
-
"expected to have input '#@name' as '#@expected', but got '#@actual'"
|
211
|
-
end
|
212
|
-
|
213
|
-
def negative_failure_message
|
214
|
-
"expected not to have input '#@name', but had it as '#@actual'"
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
def have_input(name, value = nil)
|
219
|
-
HaveInput.new(name, value)
|
220
|
-
end
|
221
|
-
|
222
|
-
class Output
|
223
|
-
def initialize(line)
|
224
|
-
@expected = line
|
225
|
-
end
|
226
|
-
|
227
|
-
def matches?(log)
|
228
|
-
@actual = log.wait_for_event(EventLog::Printed).line
|
229
|
-
@actual == @expected
|
230
|
-
end
|
231
|
-
|
232
|
-
def failure_message
|
233
|
-
"expected '#@expected' to be in the output, but got '#@actual'"
|
234
|
-
end
|
235
|
-
|
236
|
-
def negative_failure_message
|
237
|
-
"expected '#@expected' NOT to be in the output, but it was"
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
def output(line)
|
242
|
-
Output.new(line)
|
243
|
-
end
|
244
|
-
|
245
|
-
class Complete
|
246
|
-
def matches?(log)
|
247
|
-
@log = log
|
248
|
-
|
249
|
-
log.process.join(1)
|
250
|
-
|
251
|
-
log.process.status == false
|
252
|
-
end
|
253
|
-
|
254
|
-
def failure_message
|
255
|
-
pending = @log.pending_events
|
256
|
-
|
257
|
-
if @exception
|
258
|
-
"process existed with an exception: #@exception"
|
259
|
-
elsif !pending.empty?
|
260
|
-
"expected process to complete, but it's pending events #{pending}"
|
261
|
-
else
|
262
|
-
"process is blocked; status: #{@log.process.status}"
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
def negative_failure_message
|
267
|
-
"expected process to still be running, but it's completed"
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
def complete
|
272
|
-
Complete.new
|
273
|
-
end
|
274
|
-
|
275
|
-
|
276
|
-
class FailWith
|
277
|
-
def initialize(exception, predicate = nil)
|
278
|
-
@expected = exception
|
279
|
-
@predicate = predicate
|
280
|
-
end
|
281
|
-
|
282
|
-
def matches?(log)
|
283
|
-
@actual = log.wait_for_event(EventLog::Raised).exception
|
284
|
-
|
285
|
-
return false unless @actual.is_a?(@expected)
|
286
|
-
|
287
|
-
@predicate.call(@actual) if @predicate
|
288
|
-
|
289
|
-
true
|
290
|
-
end
|
291
|
-
|
292
|
-
def failure_message
|
293
|
-
"expected #@expected to be raised, but got #{@actual.class}: '#@actual'"
|
294
|
-
end
|
295
|
-
|
296
|
-
def negative_failure_message
|
297
|
-
"expected #@expected to NOT be raised, but it was"
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
def fail_with(exception, &blk)
|
302
|
-
FailWith.new(exception, blk)
|
303
|
-
end
|
304
|
-
|
305
|
-
|
306
|
-
class ProgressExpectation
|
307
|
-
def matches?(log)
|
308
|
-
@actual = log.wait_for_event(EventLog::Progress)
|
309
|
-
@actual == @expected
|
310
|
-
end
|
311
|
-
|
312
|
-
def failure_message
|
313
|
-
"expected to #{@expected.report}, but #{@actual.report_past} instead"
|
314
|
-
end
|
315
|
-
|
316
|
-
def negative_failure_message
|
317
|
-
"expected not to #{@expected.report}"
|
318
|
-
end
|
319
|
-
end
|
320
|
-
|
321
|
-
class Successfully < ProgressExpectation
|
322
|
-
def initialize(message)
|
323
|
-
@expected = EventLog::Did.new(message)
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
|
-
class Skip < ProgressExpectation
|
328
|
-
def initialize(message)
|
329
|
-
@expected = EventLog::Skipped.new(message)
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
|
-
class FailTo < ProgressExpectation
|
334
|
-
def initialize(message)
|
335
|
-
@expected = EventLog::FailedTo.new(message)
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
|
-
class GiveUp < ProgressExpectation
|
340
|
-
def initialize(message)
|
341
|
-
@expected = EventLog::GaveUp.new(message)
|
342
|
-
end
|
343
|
-
end
|
344
|
-
|
345
|
-
def successfully(message)
|
346
|
-
Successfully.new(message)
|
347
|
-
end
|
348
|
-
|
349
|
-
def skip(message)
|
350
|
-
Skip.new(message)
|
351
|
-
end
|
352
|
-
|
353
|
-
def fail_to(message)
|
354
|
-
FailTo.new(message)
|
355
|
-
end
|
356
|
-
|
357
|
-
def give_up(message)
|
358
|
-
GiveUp.new(message)
|
359
|
-
end
|
360
|
-
|
361
|
-
|
362
|
-
def asks(what)
|
363
|
-
$vmc_event.should ask(what)
|
364
|
-
end
|
365
|
-
|
366
|
-
def given(what)
|
367
|
-
$vmc_event.provide("#{what}\n")
|
368
|
-
end
|
369
|
-
|
370
|
-
def has_input(name, value = nil)
|
371
|
-
$vmc_event.should have_input(name, value)
|
372
|
-
end
|
373
|
-
|
374
|
-
def raises(exception, &blk)
|
375
|
-
$vmc_event.should fail_with(exception, &blk)
|
376
|
-
end
|
377
|
-
|
378
|
-
def finish
|
379
|
-
$vmc_event.should complete
|
380
|
-
end
|
381
|
-
|
382
|
-
def outputs(what)
|
383
|
-
$vmc_event.should output(what)
|
384
|
-
end
|
385
|
-
|
386
|
-
def does(what)
|
387
|
-
$vmc_event.should successfully(what)
|
388
|
-
end
|
389
|
-
|
390
|
-
def skips(what)
|
391
|
-
$vmc_event.should skip(what)
|
392
|
-
end
|
393
|
-
|
394
|
-
def fails_to(what)
|
395
|
-
$vmc_event.should fail_to(what)
|
396
|
-
end
|
397
|
-
|
398
|
-
def gives_up(what)
|
399
|
-
$vmc_event.should give_up(what)
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
RSpec.configure do |c|
|
404
|
-
c.include VMCHelpers
|
405
|
-
c.include VMCMatchers
|
406
|
-
|
407
|
-
c.before(:all) do
|
408
|
-
VMC::CLI.client = CFoundry::Client.new(TARGET)
|
409
|
-
|
410
|
-
client.login(:username => USER, :password => PASSWORD)
|
411
|
-
client.current_organization = client.organizations.first
|
412
|
-
client.current_space = client.current_organization.spaces.first
|
413
|
-
end
|
414
|
-
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -4008089058
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 0.4.0.beta.
|
11
|
+
- 34
|
12
|
+
version: 0.4.0.beta.34
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- VMware
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2012-08-
|
20
|
+
date: 2012-08-21 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: json_pure
|
@@ -249,12 +249,12 @@ dependencies:
|
|
249
249
|
requirements:
|
250
250
|
- - ~>
|
251
251
|
- !ruby/object:Gem::Version
|
252
|
-
hash:
|
252
|
+
hash: 57
|
253
253
|
segments:
|
254
254
|
- 0
|
255
255
|
- 3
|
256
|
-
-
|
257
|
-
version: 0.3.
|
256
|
+
- 21
|
257
|
+
version: 0.3.21
|
258
258
|
type: :runtime
|
259
259
|
version_requirements: *id014
|
260
260
|
- !ruby/object:Gem::Dependency
|
@@ -398,6 +398,9 @@ files:
|
|
398
398
|
- vmc-ng/lib/vmc/errors.rb
|
399
399
|
- vmc-ng/lib/vmc/plugin.rb
|
400
400
|
- vmc-ng/lib/vmc/spacing.rb
|
401
|
+
- vmc-ng/lib/vmc/spec_helpers/eventlog.rb
|
402
|
+
- vmc-ng/lib/vmc/spec_helpers/patches.rb
|
403
|
+
- vmc-ng/lib/vmc/spec_helpers.rb
|
401
404
|
- vmc-ng/lib/vmc/version.rb
|
402
405
|
- vmc-ng/lib/vmc.rb
|
403
406
|
- vmc-ng/spec/app/app_spec.rb
|
@@ -406,9 +409,7 @@ files:
|
|
406
409
|
- vmc-ng/spec/assets/hello-sinatra/Gemfile
|
407
410
|
- vmc-ng/spec/assets/hello-sinatra/main.rb
|
408
411
|
- vmc-ng/spec/assets/hello-sinatra/manifest.yml
|
409
|
-
- vmc-ng/spec/eventlog.rb
|
410
412
|
- vmc-ng/spec/helpers.rb
|
411
|
-
- vmc-ng/spec/patches.rb
|
412
413
|
- vmc-ng/spec/Rakefile
|
413
414
|
- vmc-ng/spec/start/target_spec.rb
|
414
415
|
- vmc-ng/bin/vmc
|