bosh_cli 0.18 → 0.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,8 +14,8 @@ describe Bosh::Cli::ReleaseBuilder do
14
14
  Bosh::Cli::ReleaseBuilder.new(@release, [], [])
15
15
  end
16
16
 
17
- it "uses version 1 if no previous releases have been created" do
18
- new_builder.version.should == 1
17
+ it "uses version 0.1-dev if no previous releases have been created" do
18
+ new_builder.version.should == "0.1-dev"
19
19
  end
20
20
 
21
21
  it "builds a release" do
@@ -23,7 +23,8 @@ describe Bosh::Cli::ReleaseBuilder do
23
23
  builder.build
24
24
 
25
25
  expected_tarball_path = File.join(@release_dir,
26
- "dev_releases", "bosh_release-1.tgz")
26
+ "dev_releases",
27
+ "bosh_release-0.1-dev.tgz")
27
28
 
28
29
  builder.tarball_path.should == expected_tarball_path
29
30
  File.file?(expected_tarball_path).should be_true
@@ -34,21 +35,23 @@ describe Bosh::Cli::ReleaseBuilder do
34
35
  builder.build
35
36
  builder.build
36
37
 
37
- File.file?(File.join(@release_dir, "dev_releases", "bosh_release-1.tgz")).
38
+ File.file?(File.join(@release_dir, "dev_releases",
39
+ "bosh_release-0.1-dev.tgz")).
38
40
  should be_true
39
- File.file?(File.join(@release_dir, "dev_releases", "bosh_release-2.tgz")).
41
+ File.file?(File.join(@release_dir, "dev_releases",
42
+ "bosh_release-0.2-dev.tgz")).
40
43
  should be_false
41
44
  end
42
45
 
43
46
  it "has a list of jobs affected by building this release" do
44
47
  job1 = mock(:job, :new_version? => true,
45
- :packages => ["bar", "baz"], :name => "job1")
48
+ :packages => %w(bar baz), :name => "job1")
46
49
  job2 = mock(:job, :new_version? => false,
47
- :packages => ["foo", "baz"], :name => "job2")
50
+ :packages => %w(foo baz), :name => "job2")
48
51
  job3 = mock(:job, :new_version? => false,
49
- :packages => ["baz", "zb"], :name => "job3")
52
+ :packages => %w(baz zb), :name => "job3")
50
53
  job4 = mock(:job, :new_version? => false,
51
- :packages => ["bar", "baz"], :name => "job4")
54
+ :packages => %w(bar baz), :name => "job4")
52
55
 
53
56
  package1 = mock(:package, :name => "foo", :new_version? => true)
54
57
  package2 = mock(:package, :name => "bar", :new_version? => false)
@@ -62,4 +65,19 @@ describe Bosh::Cli::ReleaseBuilder do
62
65
  builder.affected_jobs.should =~ [job1, job2, job3]
63
66
  end
64
67
 
68
+ it "bumps dev version in sync with final version" do
69
+ final_index = Bosh::Cli::VersionsIndex.new(File.join(@release_dir,
70
+ "releases"))
71
+
72
+ final_index.add_version("deadbeef", { "version" => 2 }, "payload")
73
+
74
+ builder = new_builder
75
+ builder.version.should == "2.1-dev"
76
+ builder.build
77
+
78
+ final_index.add_version("deadbeef", { "version" => 7 }, "payload")
79
+ builder = new_builder
80
+ builder.version.should == "7.1-dev"
81
+ end
82
+
65
83
  end
@@ -100,31 +100,6 @@ describe Bosh::Cli::Runner do
100
100
  test_cmd(%w(sync blobs), :blob_management, :sync)
101
101
  end
102
102
 
103
- it "cancels running task and quits when ctrl-c is issued " +
104
- "and user agrees to quit" do
105
- runner = Bosh::Cli::Runner.new(["any", "command"])
106
- runner.runner = {}
107
- runner.runner.stub(:task_running?).and_return(true)
108
- runner.stub(:kill_current_task?).and_return(true)
109
- runner.runner.should_receive(:cancel_current_task).once
110
- lambda { runner.handle_ctrl_c }.should raise_error SystemExit
111
- end
112
-
113
- it "quits when ctrl-c is issued and there is no task running" do
114
- runner = Bosh::Cli::Runner.new(["any", "command"])
115
- runner.runner = {}
116
- runner.runner.stub(:task_running?).and_return(false)
117
- lambda { runner.handle_ctrl_c }.should raise_error SystemExit
118
- end
119
-
120
- it "doesn't quit when user issues ctrl-c but does not want to quit" do
121
- runner = Bosh::Cli::Runner.new(["any", "command"])
122
- runner.runner = {}
123
- runner.runner.stub(:task_running?).and_return(true)
124
- runner.stub(:kill_current_task?).and_return(false)
125
- lambda { runner.handle_ctrl_c }.should_not raise_error SystemExit
126
- end
127
-
128
103
  it "loads custom plugins" do
129
104
  plugin_path = spec_asset("plugins")
130
105
  $:.unshift(plugin_path)
@@ -0,0 +1,154 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require "spec_helper"
4
+
5
+ describe Bosh::Cli::TaskTracker do
6
+
7
+ before(:each) do
8
+ @cache = mock("cache")
9
+ @director = mock("director", :uuid => "deadbeef",
10
+ :get_time_difference => 0.5)
11
+ Bosh::Cli::Config.cache = @cache
12
+ end
13
+
14
+ def make_tracker(task_id, options)
15
+ tracker = Bosh::Cli::TaskTracker.new(@director, task_id, options)
16
+ tracker.stub!(:sleep)
17
+ tracker
18
+ end
19
+
20
+ it "tracks director task event log" do
21
+ tracker = make_tracker("42", {})
22
+ @director.should_receive(:get_time_difference).and_return(0.5)
23
+
24
+ @cache.should_receive(:read).with("task/deadbeef/42/event").and_return(nil)
25
+
26
+ @director.should_receive(:get_task_state).with("42").
27
+ and_return("queued", "queued", "processing", "processing", "done")
28
+
29
+ @director.should_receive(:get_task_output).with("42", 0, "event").
30
+ and_return(["", nil], ["", nil], ["foo\nbar", 8])
31
+
32
+ @director.should_receive(:get_task_output).with("42", 8, "event").
33
+ and_return(["\nba", 12])
34
+
35
+ @director.should_receive(:get_task_output).with("42", 12, "event").
36
+ and_return(["z", 13])
37
+
38
+ @cache.should_receive(:write).
39
+ with("task/deadbeef/42/event", "foo\nbar\nbaz\n")
40
+
41
+ tracker.should_receive(:sleep).with(1).exactly(4).times
42
+
43
+ tracker.track.should == :done
44
+ end
45
+
46
+ it "used cached task result if available" do
47
+ tracker = make_tracker("42", { :log_type => "debug" })
48
+
49
+ @cache.should_receive(:read).with("task/deadbeef/42/debug").
50
+ and_return("foo\nbar\nbaz\n")
51
+
52
+ @director.should_receive(:get_task_state).with("42").and_return("cancelled")
53
+
54
+ tracker.track.should == :cancelled
55
+ end
56
+
57
+ it "uses appropriate renderer" do
58
+ renderer = mock("renderer", :duration_known? => false)
59
+ Bosh::Cli::TaskLogRenderer.should_receive(:create_for_log_type).
60
+ with("foobar").and_return(renderer)
61
+
62
+ tracker = make_tracker("42", { :log_type => "foobar" })
63
+
64
+ @cache.should_receive(:read).with("task/deadbeef/42/foobar").and_return(nil)
65
+
66
+ @director.should_receive(:get_task_state).with("42").
67
+ and_return("queued", "processing", "done")
68
+
69
+ @director.should_receive(:get_task_output).with("42", 0, "foobar").
70
+ and_return(["", nil], ["foo\nbar", 8])
71
+
72
+ @director.should_receive(:get_task_output).with("42", 8, "foobar").
73
+ and_return(["\nbaz", 12])
74
+
75
+ renderer.should_receive(:time_adjustment=).with(0.5)
76
+ renderer.should_receive(:add_output).with("foo\n").ordered
77
+ renderer.should_receive(:add_output).with("bar\n").ordered
78
+ renderer.should_receive(:add_output).with("baz\n").ordered
79
+ renderer.should_receive(:refresh).exactly(3).times
80
+ renderer.should_receive(:finish).with(:done)
81
+
82
+ tracker.should_receive(:sleep).with(1).exactly(2).times
83
+
84
+ @cache.should_receive(:write).
85
+ with("task/deadbeef/42/foobar", "foo\nbar\nbaz\n")
86
+
87
+ tracker.track.should == :done
88
+ end
89
+
90
+ it "treats error and cancelled states as finished states" do
91
+ %w(error cancelled).each do |state|
92
+ tracker = make_tracker("42", { :log_type => "foobar",
93
+ :use_cache => false })
94
+
95
+ @director.should_receive(:get_task_state).with("42").
96
+ and_return("queued", "processing", state)
97
+
98
+ @director.should_receive(:get_task_output).with("42", 0, "foobar").
99
+ and_return(["", nil], ["foo\nbar", 8])
100
+
101
+ @director.should_receive(:get_task_output).with("42", 8, "foobar").
102
+ and_return(["\nbaz", 12])
103
+
104
+ tracker.should_receive(:sleep).with(1).exactly(2).times
105
+
106
+ tracker.track.should == state.to_sym
107
+ end
108
+ end
109
+
110
+ it "prompts for task cancel on interrupt (if in interactive mode)" do
111
+ tracker = make_tracker("42", { :log_type => "foobar",
112
+ :use_cache => false })
113
+
114
+ tracker.stub!(:interactive?).and_return(true)
115
+
116
+ @director.should_receive(:get_task_state).with("42").and_raise(Interrupt)
117
+ @director.should_receive(:get_task_state).with("42").and_return("cancelled")
118
+ @director.should_receive(:get_task_output).with("42", 0, "foobar").
119
+ and_return(["", nil])
120
+
121
+ tracker.should_receive(:ask).and_return("yes")
122
+ @director.should_receive(:cancel_task).with("42")
123
+
124
+ tracker.track.should == :cancelled
125
+ end
126
+
127
+ it "prompts for task error log on error (if in interactive mode)" do
128
+ tracker = make_tracker("42", { :log_type => "event",
129
+ :use_cache => false })
130
+
131
+ tracker.stub!(:interactive?).and_return(true)
132
+
133
+ @director.should_receive(:get_task_state).with("42").
134
+ and_return("processing", "error")
135
+
136
+ @director.should_receive(:get_task_output).with("42", 0, "event").
137
+ and_return(["", nil])
138
+
139
+ @director.should_receive(:get_task_output).with("42", 0, "event").
140
+ and_return(["foo", 4])
141
+
142
+ tracker.should_receive(:ask).and_return("yes")
143
+
144
+ new_tracker = mock("tracker")
145
+ Bosh::Cli::TaskTracker.should_receive(:new).
146
+ with(@director, "42", { :log_type => "debug", :use_cache => false }).
147
+ and_return(new_tracker)
148
+
149
+ new_tracker.should_receive(:track).and_return(:foo)
150
+
151
+ tracker.track.should == :error
152
+ end
153
+
154
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.18'
4
+ version: '0.19'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-09 00:00:00.000000000 Z
12
+ date: 2012-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json_pure
@@ -197,6 +197,7 @@ files:
197
197
  - lib/cli/commands/deployment.rb
198
198
  - lib/cli/commands/job.rb
199
199
  - lib/cli/commands/job_management.rb
200
+ - lib/cli/commands/job_rename.rb
200
201
  - lib/cli/commands/log_management.rb
201
202
  - lib/cli/commands/maintenance.rb
202
203
  - lib/cli/commands/misc.rb
@@ -218,6 +219,7 @@ files:
218
219
  - lib/cli/errors.rb
219
220
  - lib/cli/event_log_renderer.rb
220
221
  - lib/cli/job_builder.rb
222
+ - lib/cli/null_renderer.rb
221
223
  - lib/cli/package_builder.rb
222
224
  - lib/cli/packaging_helper.rb
223
225
  - lib/cli/release.rb
@@ -227,6 +229,7 @@ files:
227
229
  - lib/cli/runner.rb
228
230
  - lib/cli/stemcell.rb
229
231
  - lib/cli/task_log_renderer.rb
232
+ - lib/cli/task_tracker.rb
230
233
  - lib/cli/templates/help_message.erb
231
234
  - lib/cli/validation.rb
232
235
  - lib/cli/version.rb
@@ -289,6 +292,7 @@ files:
289
292
  - spec/unit/event_log_renderer_spec.rb
290
293
  - spec/unit/hash_changeset_spec.rb
291
294
  - spec/unit/job_builder_spec.rb
295
+ - spec/unit/job_rename_spec.rb
292
296
  - spec/unit/package_builder_spec.rb
293
297
  - spec/unit/release_builder_spec.rb
294
298
  - spec/unit/release_spec.rb
@@ -296,6 +300,7 @@ files:
296
300
  - spec/unit/runner_spec.rb
297
301
  - spec/unit/ssh_spec.rb
298
302
  - spec/unit/stemcell_spec.rb
303
+ - spec/unit/task_tracker_spec.rb
299
304
  - spec/unit/version_calc_spec.rb
300
305
  - spec/unit/versions_index_spec.rb
301
306
  homepage: http://www.vmware.com
@@ -312,7 +317,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
312
317
  version: '0'
313
318
  segments:
314
319
  - 0
315
- hash: 4379440498501370449
320
+ hash: -2317006899427919460
316
321
  required_rubygems_version: !ruby/object:Gem::Requirement
317
322
  none: false
318
323
  requirements:
@@ -321,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
326
  version: '0'
322
327
  segments:
323
328
  - 0
324
- hash: 4379440498501370449
329
+ hash: -2317006899427919460
325
330
  requirements: []
326
331
  rubyforge_project:
327
332
  rubygems_version: 1.8.23
@@ -383,6 +388,7 @@ test_files:
383
388
  - spec/unit/event_log_renderer_spec.rb
384
389
  - spec/unit/hash_changeset_spec.rb
385
390
  - spec/unit/job_builder_spec.rb
391
+ - spec/unit/job_rename_spec.rb
386
392
  - spec/unit/package_builder_spec.rb
387
393
  - spec/unit/release_builder_spec.rb
388
394
  - spec/unit/release_spec.rb
@@ -390,5 +396,6 @@ test_files:
390
396
  - spec/unit/runner_spec.rb
391
397
  - spec/unit/ssh_spec.rb
392
398
  - spec/unit/stemcell_spec.rb
399
+ - spec/unit/task_tracker_spec.rb
393
400
  - spec/unit/version_calc_spec.rb
394
401
  - spec/unit/versions_index_spec.rb