bosh_cli 1.0.3 → 1.5.0.pre.1113

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. data/bin/bosh +0 -9
  2. data/lib/cli.rb +69 -64
  3. data/lib/cli/backup_destination_path.rb +33 -0
  4. data/lib/cli/base_command.rb +57 -56
  5. data/lib/cli/blob_manager.rb +12 -12
  6. data/lib/cli/changeset_helper.rb +6 -7
  7. data/lib/cli/client/director.rb +724 -0
  8. data/lib/cli/command_handler.rb +6 -7
  9. data/lib/cli/commands/backup.rb +39 -0
  10. data/lib/cli/commands/biff.rb +42 -21
  11. data/lib/cli/commands/blob_management.rb +1 -1
  12. data/lib/cli/commands/cloudcheck.rb +11 -13
  13. data/lib/cli/commands/deployment.rb +53 -37
  14. data/lib/cli/commands/help.rb +3 -2
  15. data/lib/cli/commands/job_management.rb +67 -103
  16. data/lib/cli/commands/job_rename.rb +6 -8
  17. data/lib/cli/commands/log_management.rb +78 -55
  18. data/lib/cli/commands/maintenance.rb +36 -30
  19. data/lib/cli/commands/misc.rb +72 -51
  20. data/lib/cli/commands/package.rb +2 -2
  21. data/lib/cli/commands/property_management.rb +10 -12
  22. data/lib/cli/commands/release.rb +236 -133
  23. data/lib/cli/commands/snapshot.rb +93 -0
  24. data/lib/cli/commands/ssh.rb +216 -213
  25. data/lib/cli/commands/stemcell.rb +46 -34
  26. data/lib/cli/commands/task.rb +2 -2
  27. data/lib/cli/commands/user.rb +27 -3
  28. data/lib/cli/commands/vm.rb +28 -0
  29. data/lib/cli/commands/vms.rb +81 -23
  30. data/lib/cli/config.rb +6 -2
  31. data/lib/cli/core_ext.rb +31 -30
  32. data/lib/cli/deployment_helper.rb +134 -159
  33. data/lib/cli/deployment_manifest.rb +66 -0
  34. data/lib/cli/deployment_manifest_compiler.rb +0 -3
  35. data/lib/cli/event_log_renderer.rb +10 -10
  36. data/lib/cli/file_with_progress_bar.rb +52 -0
  37. data/lib/cli/job_builder.rb +1 -1
  38. data/lib/cli/job_command_args.rb +23 -0
  39. data/lib/cli/job_property_collection.rb +4 -7
  40. data/lib/cli/job_property_validator.rb +22 -12
  41. data/lib/cli/job_state.rb +54 -0
  42. data/lib/cli/line_wrap.rb +54 -0
  43. data/lib/cli/packaging_helper.rb +10 -10
  44. data/lib/cli/release.rb +18 -15
  45. data/lib/cli/release_builder.rb +9 -4
  46. data/lib/cli/release_compiler.rb +9 -9
  47. data/lib/cli/release_tarball.rb +3 -6
  48. data/lib/cli/resurrection.rb +31 -0
  49. data/lib/cli/runner.rb +56 -30
  50. data/lib/cli/stemcell.rb +25 -10
  51. data/lib/cli/task_log_renderer.rb +1 -1
  52. data/lib/cli/task_tracker.rb +10 -9
  53. data/lib/cli/validation.rb +3 -1
  54. data/lib/cli/version.rb +1 -1
  55. data/lib/cli/version_calc.rb +5 -18
  56. data/lib/cli/versions_index.rb +1 -1
  57. data/lib/cli/vm_state.rb +43 -0
  58. data/lib/cli/yaml_helper.rb +26 -35
  59. metadata +75 -208
  60. data/Rakefile +0 -56
  61. data/lib/cli/director.rb +0 -628
  62. data/spec/assets/biff/bad_gateway_config.yml +0 -28
  63. data/spec/assets/biff/good_simple_config.yml +0 -63
  64. data/spec/assets/biff/good_simple_golden_config.yml +0 -63
  65. data/spec/assets/biff/good_simple_template.erb +0 -69
  66. data/spec/assets/biff/ip_out_of_range.yml +0 -63
  67. data/spec/assets/biff/multiple_subnets_config.yml +0 -40
  68. data/spec/assets/biff/network_only_template.erb +0 -34
  69. data/spec/assets/biff/no_cc_config.yml +0 -27
  70. data/spec/assets/biff/no_range_config.yml +0 -27
  71. data/spec/assets/biff/no_subnet_config.yml +0 -16
  72. data/spec/assets/biff/ok_network_config.yml +0 -30
  73. data/spec/assets/biff/properties_template.erb +0 -6
  74. data/spec/assets/config/atmos/config/final.yml +0 -6
  75. data/spec/assets/config/atmos/config/private.yml +0 -4
  76. data/spec/assets/config/bad-providers/config/final.yml +0 -5
  77. data/spec/assets/config/bad-providers/config/private.yml +0 -4
  78. data/spec/assets/config/deprecation/config/final.yml +0 -5
  79. data/spec/assets/config/deprecation/config/private.yml +0 -2
  80. data/spec/assets/config/local/config/final.yml +0 -5
  81. data/spec/assets/config/local/config/private.yml +0 -1
  82. data/spec/assets/config/s3/config/final.yml +0 -5
  83. data/spec/assets/config/s3/config/private.yml +0 -5
  84. data/spec/assets/config/swift-hp/config/final.yml +0 -6
  85. data/spec/assets/config/swift-hp/config/private.yml +0 -7
  86. data/spec/assets/config/swift-rackspace/config/final.yml +0 -6
  87. data/spec/assets/config/swift-rackspace/config/private.yml +0 -6
  88. data/spec/assets/deployment.MF +0 -0
  89. data/spec/assets/plugins/bosh/cli/commands/echo.rb +0 -43
  90. data/spec/assets/plugins/bosh/cli/commands/ruby.rb +0 -24
  91. data/spec/assets/release/jobs/cacher.tgz +0 -0
  92. data/spec/assets/release/jobs/cacher/config/file1.conf +0 -0
  93. data/spec/assets/release/jobs/cacher/config/file2.conf +0 -0
  94. data/spec/assets/release/jobs/cacher/job.MF +0 -6
  95. data/spec/assets/release/jobs/cacher/monit +0 -1
  96. data/spec/assets/release/jobs/cleaner.tgz +0 -0
  97. data/spec/assets/release/jobs/cleaner/job.MF +0 -4
  98. data/spec/assets/release/jobs/cleaner/monit +0 -1
  99. data/spec/assets/release/jobs/sweeper.tgz +0 -0
  100. data/spec/assets/release/jobs/sweeper/config/test.conf +0 -1
  101. data/spec/assets/release/jobs/sweeper/job.MF +0 -5
  102. data/spec/assets/release/jobs/sweeper/monit +0 -1
  103. data/spec/assets/release/packages/mutator.tar.gz +0 -0
  104. data/spec/assets/release/packages/stuff.tgz +0 -0
  105. data/spec/assets/release/release.MF +0 -17
  106. data/spec/assets/release_invalid_checksum.tgz +0 -0
  107. data/spec/assets/release_invalid_jobs.tgz +0 -0
  108. data/spec/assets/release_no_name.tgz +0 -0
  109. data/spec/assets/release_no_version.tgz +0 -0
  110. data/spec/assets/stemcell/image +0 -1
  111. data/spec/assets/stemcell/stemcell.MF +0 -6
  112. data/spec/assets/stemcell_invalid_mf.tgz +0 -0
  113. data/spec/assets/stemcell_no_image.tgz +0 -0
  114. data/spec/assets/valid_release.tgz +0 -0
  115. data/spec/assets/valid_stemcell.tgz +0 -0
  116. data/spec/spec_helper.rb +0 -28
  117. data/spec/unit/base_command_spec.rb +0 -87
  118. data/spec/unit/biff_spec.rb +0 -172
  119. data/spec/unit/blob_manager_spec.rb +0 -288
  120. data/spec/unit/cache_spec.rb +0 -36
  121. data/spec/unit/cli_commands_spec.rb +0 -356
  122. data/spec/unit/config_spec.rb +0 -125
  123. data/spec/unit/core_ext_spec.rb +0 -81
  124. data/spec/unit/dependency_helper_spec.rb +0 -52
  125. data/spec/unit/deployment_manifest_compiler_spec.rb +0 -63
  126. data/spec/unit/deployment_manifest_spec.rb +0 -153
  127. data/spec/unit/director_spec.rb +0 -471
  128. data/spec/unit/director_task_spec.rb +0 -48
  129. data/spec/unit/event_log_renderer_spec.rb +0 -171
  130. data/spec/unit/hash_changeset_spec.rb +0 -73
  131. data/spec/unit/job_builder_spec.rb +0 -455
  132. data/spec/unit/job_property_collection_spec.rb +0 -111
  133. data/spec/unit/job_property_validator_spec.rb +0 -7
  134. data/spec/unit/job_rename_spec.rb +0 -200
  135. data/spec/unit/package_builder_spec.rb +0 -593
  136. data/spec/unit/release_builder_spec.rb +0 -120
  137. data/spec/unit/release_spec.rb +0 -173
  138. data/spec/unit/release_tarball_spec.rb +0 -29
  139. data/spec/unit/runner_spec.rb +0 -7
  140. data/spec/unit/ssh_spec.rb +0 -84
  141. data/spec/unit/stemcell_spec.rb +0 -17
  142. data/spec/unit/task_tracker_spec.rb +0 -131
  143. data/spec/unit/version_calc_spec.rb +0 -27
  144. data/spec/unit/versions_index_spec.rb +0 -144
@@ -1,120 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- require "spec_helper"
4
-
5
- describe Bosh::Cli::ReleaseBuilder do
6
-
7
- before(:each) do
8
- @release_dir = Dir.mktmpdir
9
- FileUtils.mkdir_p(File.join(@release_dir, "config"))
10
- @release = Bosh::Cli::Release.new(@release_dir)
11
- end
12
-
13
- def new_builder
14
- Bosh::Cli::ReleaseBuilder.new(@release, [], [])
15
- end
16
-
17
- it "uses version 0.1-dev if no previous releases have been created" do
18
- new_builder.version.should == "0.1-dev"
19
- end
20
-
21
- it "builds a release" do
22
- builder = new_builder
23
- builder.build
24
-
25
- expected_tarball_path = File.join(@release_dir,
26
- "dev_releases",
27
- "bosh_release-0.1-dev.tgz")
28
-
29
- builder.tarball_path.should == expected_tarball_path
30
- File.file?(expected_tarball_path).should be_true
31
- end
32
-
33
- it "doesn't build a new release if nothing has changed" do
34
- builder = new_builder
35
- builder.build
36
- builder.build
37
-
38
- File.file?(File.join(@release_dir, "dev_releases",
39
- "bosh_release-0.1-dev.tgz")).
40
- should be_true
41
- File.file?(File.join(@release_dir, "dev_releases",
42
- "bosh_release-0.2-dev.tgz")).
43
- should be_false
44
- end
45
-
46
- it "has a list of jobs affected by building this release" do
47
- job1 = mock(:job, :new_version? => true,
48
- :packages => %w(bar baz), :name => "job1")
49
- job2 = mock(:job, :new_version? => false,
50
- :packages => %w(foo baz), :name => "job2")
51
- job3 = mock(:job, :new_version? => false,
52
- :packages => %w(baz zb), :name => "job3")
53
- job4 = mock(:job, :new_version? => false,
54
- :packages => %w(bar baz), :name => "job4")
55
-
56
- package1 = mock(:package, :name => "foo", :new_version? => true)
57
- package2 = mock(:package, :name => "bar", :new_version? => false)
58
- package3 = mock(:package, :name => "baz", :new_version? => false)
59
- package4 = mock(:package, :name => "zb", :new_version? => true)
60
-
61
- builder = Bosh::Cli::ReleaseBuilder.new(@release,
62
- [package1, package2,
63
- package3, package4],
64
- [job1, job2, job3, job4])
65
- builder.affected_jobs.should =~ [job1, job2, job3]
66
- end
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",
73
- { "version" => 2 },
74
- get_tmp_file_path("payload"))
75
-
76
- builder = new_builder
77
- builder.version.should == "2.1-dev"
78
- builder.build
79
-
80
- final_index.add_version("deadbeef",
81
- { "version" => 7 },
82
- get_tmp_file_path("payload"))
83
- builder = new_builder
84
- builder.version.should == "7.1-dev"
85
- end
86
-
87
- it "has packages and jobs fingerprints in spec" do
88
- job = mock(
89
- Bosh::Cli::JobBuilder,
90
- :name => "job1",
91
- :version => "1.1",
92
- :new_version? => true,
93
- :packages => %w(foo),
94
- :fingerprint => "deadbeef",
95
- :checksum => "cafebad"
96
- )
97
-
98
- package = mock(
99
- Bosh::Cli::PackageBuilder,
100
- :name => "foo",
101
- :version => "42",
102
- :new_version? => true,
103
- :fingerprint => "deadcafe",
104
- :checksum => "baddeed",
105
- :dependencies => []
106
- )
107
-
108
- builder = Bosh::Cli::ReleaseBuilder.new(@release, [package], [job])
109
- builder.should_receive(:copy_jobs)
110
- builder.should_receive(:copy_packages)
111
-
112
- builder.build
113
-
114
- manifest = YAML.load_file(builder.manifest_path)
115
-
116
- manifest["jobs"][0]["fingerprint"].should == "deadbeef"
117
- manifest["packages"][0]["fingerprint"].should == "deadcafe"
118
- end
119
-
120
- end
@@ -1,173 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- require "spec_helper"
4
-
5
- describe Bosh::Cli::Release do
6
-
7
- before :each do
8
- @release_dir = Dir.mktmpdir
9
- FileUtils.mkdir_p(File.join(@release_dir, "config"))
10
- end
11
-
12
- def new_release(dir)
13
- Bosh::Cli::Release.new(@release_dir)
14
- end
15
-
16
- it "persists release attributes" do
17
- r = new_release(@dir)
18
-
19
- r.dev_name.should be_nil
20
- r.final_name.should be_nil
21
- r.min_cli_version.should be_nil
22
- r.latest_release_filename.should be_nil
23
-
24
- r.dev_name = "dev-release"
25
- r.final_name = "prod-release"
26
- r.min_cli_version = "0.5.2"
27
- r.latest_release_filename = "foobar"
28
- r.save_config
29
-
30
- r2 = new_release(@release_dir)
31
- r.dev_name.should == "dev-release"
32
- r.final_name.should == "prod-release"
33
- r.min_cli_version.should == "0.5.2"
34
- r.latest_release_filename.should == "foobar"
35
- end
36
-
37
- it "has attributes persisted in bosh user config" do
38
- r = new_release(@release_dir)
39
- r.dev_name = "dev-release"
40
- r.final_name = "prod-release"
41
- r.min_cli_version = "0.5.2"
42
- r.save_config
43
-
44
- FileUtils.rm_rf(File.join(@release_dir, "config", "dev.yml"))
45
-
46
- r = new_release(@release_dir)
47
- r.dev_name.should be_nil
48
- r.final_name.should == "prod-release"
49
- r.min_cli_version.should == "0.5.2"
50
- end
51
-
52
- it "has attributes persisted in public release config" do
53
- r = new_release(@release_dir)
54
- r.dev_name = "dev-release"
55
- r.final_name = "prod-release"
56
- r.min_cli_version = "0.5.2"
57
- r.save_config
58
-
59
- FileUtils.rm_rf(File.join(@release_dir, "config", "final.yml"))
60
-
61
- r = new_release(@release_dir)
62
- r.dev_name.should == "dev-release"
63
- r.final_name.should be_nil
64
- r.min_cli_version.should be_nil
65
- end
66
-
67
- describe "merging final.yml with private.yml" do
68
- it "should print a warning when it contains blobstore_secret" do
69
- r = Bosh::Cli::Release.new(spec_asset("config/deprecation"))
70
- opts = {
71
- :uid => "bosh",
72
- :secret => "bar"
73
- }
74
- Bosh::Blobstore::Client.should_receive(:create).with("atmos", opts)
75
- r.should_receive(:say)
76
-
77
- r.blobstore
78
- end
79
-
80
- it "should detect blobstore secrets for deprecated options" do
81
- r = Bosh::Cli::Release.new(spec_asset("config/deprecation"))
82
- r.has_blobstore_secret?.should be_true
83
- end
84
-
85
- it "should merge s3 secrets into options" do
86
- r = Bosh::Cli::Release.new(spec_asset("config/s3"))
87
- opts = {
88
- :bucket_name => "test",
89
- :secret_access_key => "foo",
90
- :access_key_id => "bar"
91
- }
92
- Bosh::Blobstore::Client.should_receive(:create).with("s3", opts)
93
- r.blobstore
94
- end
95
-
96
- it "should detect blobstore secrets for s3 options" do
97
- r = Bosh::Cli::Release.new(spec_asset("config/s3"))
98
- r.has_blobstore_secret?.should be_true
99
- end
100
-
101
- it "should merge atmos secrets into options" do
102
- r = Bosh::Cli::Release.new(spec_asset("config/atmos"))
103
- opts = {
104
- :uid => "bosh",
105
- :secret => "bar"
106
- }
107
- Bosh::Blobstore::Client.should_receive(:create).with("atmos", opts)
108
- r.blobstore
109
- end
110
-
111
- it "should detect blobstore secrets for atmos options" do
112
- r = Bosh::Cli::Release.new(spec_asset("config/atmos"))
113
- r.has_blobstore_secret?.should be_true
114
- end
115
-
116
- it "should merge swift (HP) secrets into options" do
117
- r = Bosh::Cli::Release.new(spec_asset("config/swift-hp"))
118
- opts = {
119
- :container_name => "test",
120
- :swift_provider => "hp",
121
- :hp => {
122
- :hp_account_id => "foo",
123
- :hp_secret_key => "bar",
124
- :hp_tenant_id => "foo"
125
- }
126
- }
127
- Bosh::Blobstore::Client.should_receive(:create).with("swift", opts)
128
- r.blobstore
129
- end
130
-
131
- it "should detect blobstore secrets for swift (HP) options" do
132
- r = Bosh::Cli::Release.new(spec_asset("config/swift-hp"))
133
- r.has_blobstore_secret?.should be_true
134
- end
135
-
136
- it "should merge swift (Rackspace) secrets into options" do
137
- r = Bosh::Cli::Release.new(spec_asset("config/swift-rackspace"))
138
- opts = {
139
- :container_name => "test",
140
- :swift_provider => "rackspace",
141
- :rackspace => {
142
- :rackspace_username => "foo",
143
- :rackspace_api_key => "bar"
144
- }
145
- }
146
- Bosh::Blobstore::Client.should_receive(:create).with("swift", opts)
147
- r.blobstore
148
- end
149
-
150
- it "should detect blobstore secrets for swift (Rackspace) options" do
151
- r = Bosh::Cli::Release.new(spec_asset("config/swift-rackspace"))
152
- r.has_blobstore_secret?.should be_true
153
- end
154
-
155
- it "should not throw an error when merging empty secrets into options" do
156
- r = Bosh::Cli::Release.new(spec_asset("config/local"))
157
- opts = {
158
- :blobstore_path => "/tmp/blobstore"
159
- }
160
- Bosh::Blobstore::Client.should_receive(:create).with("local", opts)
161
- r.blobstore
162
- end
163
-
164
- it "throws an error when blobstore providers does not match" do
165
- r = Bosh::Cli::Release.new(spec_asset("config/bad-providers"))
166
- expect {
167
- r.blobstore
168
- }.to raise_error(Bosh::Cli::CliError, "blobstore private provider " +
169
- "does not match final provider")
170
-
171
- end
172
- end
173
- end
@@ -1,29 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- require "spec_helper"
4
-
5
- describe Bosh::Cli::ReleaseTarball do
6
-
7
- describe "verifying a release" do
8
- it "verifies and reports a valid release" do
9
- tarball = Bosh::Cli::ReleaseTarball.new(spec_asset("valid_release.tgz"))
10
- tarball.should be_valid
11
- end
12
-
13
- it "verifies repacked release if appropriate option is set" do
14
- tarball = Bosh::Cli::ReleaseTarball.new(spec_asset("valid_release.tgz"))
15
- package_matches = ["86bd8b15562cde007f030a303fa64779af5fa4e7"]
16
- repacked_tarball_path = tarball.repack(package_matches)
17
-
18
- tarball.skipped.should == 1
19
-
20
- repacked_tarball = Bosh::Cli::ReleaseTarball.new(repacked_tarball_path)
21
- repacked_tarball.valid?.should be_false
22
- repacked_tarball.reset_validation
23
- repacked_tarball.valid?(:allow_sparse => true).should be_true
24
- end
25
- end
26
-
27
- # TODO: add whining on potential errors
28
-
29
- end
@@ -1,7 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- require "spec_helper"
4
-
5
- describe Bosh::Cli::Runner do
6
- pending "needs tests"
7
- end
@@ -1,84 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- require "spec_helper"
4
-
5
- describe Bosh::Cli::Command::Base do
6
- # TODO: the whole spec needs to be rewritten
7
-
8
- before :all do
9
- @public_key = File.join(Dir.mktmpdir, "public_key")
10
- File.open(@public_key, "w+") do |f|
11
- f.write("PUBLIC_KEY")
12
- end
13
- end
14
-
15
- describe Bosh::Cli::Command::Ssh do
16
- it "should get the public key" do
17
- ssh = Bosh::Cli::Command::Ssh.new
18
- ssh.add_option(:public_key, @public_key)
19
- public_key = ssh.send(:get_public_key)
20
- public_key.should == "PUBLIC_KEY"
21
- end
22
-
23
- it "should get the public key from users home directory " +
24
- "or raise exception" do
25
- ssh = Bosh::Cli::Command::Ssh.new
26
- public_key = nil
27
- begin
28
- public_key = ssh.send(:get_public_key)
29
- rescue Bosh::Cli::CliError
30
- public_key = "SOMETHING"
31
- end
32
- public_key.should_not be_nil
33
- end
34
-
35
- it "should contact director to setup ssh on the job" do
36
- mock_director = mock(Object)
37
- mock_director.stub(:setup_ssh).and_return([:done, 42])
38
-
39
- mock_director.stub(:get_task_result_log).with(42).
40
- and_return(JSON.generate(
41
- [{ "status" => "success", "ip" => "127.0.0.1" }]))
42
- mock_director.stub(:cleanup_ssh)
43
- Bosh::Cli::Director.should_receive(:new).and_return(mock_director)
44
- ssh = Bosh::Cli::Command::Ssh.new
45
- ssh.stub(:prepare_deployment_manifest).and_return("test")
46
- ssh.stub(:cleanup_ssh)
47
- ssh.stub(:get_public_key).and_return("PUBKEY")
48
- ssh.send(
49
- :setup_ssh, "dea", 0, "temp_pass") do |results, _, _|
50
- results.each do |result|
51
- result["status"].should == "success"
52
- result["ip"].should == "127.0.0.1"
53
- end
54
- end
55
- end
56
-
57
- it "should try to setup interactive shell when a job index is given" do
58
- ssh = Bosh::Cli::Command::Ssh.new
59
- @interactive_shell = false
60
- @execute_command = false
61
- ssh.stub(:setup_interactive_shell) { @interactive_shell = true }
62
- ssh.stub(:execute_command) { @execute_command = true }
63
- ssh.shell("dea", "0")
64
- @interactive_shell.should == true && @execute_command.should == false
65
- end
66
-
67
- it "should fail to setup interactive shell when a job index is not given" do
68
- ssh = Bosh::Cli::Command::Ssh.new
69
- lambda {
70
- ssh.shell("dea")
71
- }.should raise_error(Bosh::Cli::CliError)
72
- end
73
-
74
- it "should try to execute given command remotely" do
75
- ssh = Bosh::Cli::Command::Ssh.new
76
- @interactive_shell = false
77
- @execute_command = false
78
- ssh.stub(:setup_interactive_shell) { @interactive_shell = true }
79
- ssh.stub(:perform_operation) { @execute_command = true }
80
- ssh.shell("dea", "ls -l")
81
- @interactive_shell.should == false && @execute_command.should == true
82
- end
83
- end
84
- end
@@ -1,17 +0,0 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
- require "spec_helper"
4
-
5
- describe Bosh::Cli::Stemcell do
6
-
7
- describe "verifying a stemcell" do
8
- it "verifies and reports a valid stemcell" do
9
- sc = Bosh::Cli::Stemcell.new(spec_asset("valid_stemcell.tgz"),
10
- Bosh::Cli::Cache.new(Dir.mktmpdir))
11
- sc.should be_valid
12
- end
13
- end
14
-
15
- # TODO: add whining on potential errors
16
-
17
- end
@@ -1,131 +0,0 @@
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 "accepts alternate :renderer option" do
128
- tracker = make_tracker("42", {:renderer => "I'm a renderer"})
129
- tracker.renderer.should == "I'm a renderer"
130
- end
131
- end