bosh_cli 0.18 → 0.19

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.
@@ -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