bosh-workspace 0.8.0 → 0.8.1
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 +4 -4
- data/Gemfile +1 -0
- data/Guardfile +1 -1
- data/bosh-workspace.gemspec +4 -4
- data/lib/bosh/workspace/helpers/release_helper.rb +1 -1
- data/lib/bosh/workspace/project_deployment.rb +3 -1
- data/lib/bosh/workspace/version.rb +1 -1
- data/spec/commands/prepare_spec.rb +22 -17
- data/spec/commands/project_deployment_spec.rb +18 -17
- data/spec/helpers/project_deployment_helper_spec.rb +30 -27
- data/spec/helpers/release_helper_spec.rb +29 -13
- data/spec/helpers/spiff_helper_spec.rb +4 -4
- data/spec/helpers/stemcell_helper_spec.rb +26 -14
- data/spec/manifest_builder_spec.rb +10 -8
- data/spec/project_deployment_spec.rb +9 -2
- data/spec/release_spec.rb +0 -4
- data/spec/spec_helper.rb +2 -3
- data/spec/stemcell_spec.rb +7 -5
- data/spec/stub_file_spec.rb +3 -3
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fb508481c57fa872d5d518608450a9c0747307a
|
4
|
+
data.tar.gz: 7fe9a93d76ec7097a551c994d683aa1d8c74811f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7251cdc365208e92f87eeb8a3166a773b6fbf28de55cb1673b42d95100c6e12572859f79a1b6fe5b18afaf2deb07635a88d3a32eacd49b2ebcc293a6e5b5f290
|
7
|
+
data.tar.gz: 20096fa74e4f9c1676999cc5701bd83ae99653a3d7f6b5b26c2dc10d2ec385da0c884c4cda21f15abe66f5a69a358d24e7c61bccd54dccf74cc2fc3a13ec6817
|
data/Gemfile
CHANGED
data/Guardfile
CHANGED
data/bosh-workspace.gemspec
CHANGED
@@ -20,15 +20,15 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 2.0.0'
|
22
22
|
|
23
|
-
spec.add_runtime_dependency "bosh_cli", ">= 1.
|
24
|
-
spec.add_runtime_dependency "bosh_common", ">= 1.
|
23
|
+
spec.add_runtime_dependency "bosh_cli", ">= 1.2682.0"
|
24
|
+
spec.add_runtime_dependency "bosh_common", ">= 1.2682.0"
|
25
25
|
spec.add_runtime_dependency "semi_semantic", "~> 1.1.0"
|
26
26
|
spec.add_runtime_dependency "membrane", "~>0.0.2"
|
27
27
|
spec.add_runtime_dependency "git", "~> 1.2.6"
|
28
28
|
|
29
29
|
spec.add_development_dependency "bundler", "~> 1.6"
|
30
|
-
spec.add_development_dependency "rspec", "~>
|
31
|
-
spec.add_development_dependency "rspec-
|
30
|
+
spec.add_development_dependency "rspec", "~> 3.1.0"
|
31
|
+
spec.add_development_dependency "rspec-its", '~> 1.0.1'
|
32
32
|
spec.add_development_dependency "rake"
|
33
33
|
spec.add_development_dependency "archive-zip", "~> 0.6.0"
|
34
34
|
end
|
@@ -13,10 +13,12 @@ module Bosh::Workspace
|
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
16
|
+
STEMCELL_VERSION = /^\d+\.\d+$/
|
17
|
+
|
16
18
|
STEMCELL_SCHEMA = Membrane::SchemaParser.parse do
|
17
19
|
{
|
18
20
|
"name" => String,
|
19
|
-
"version" => enum(Integer, "latest"),
|
21
|
+
"version" => enum(Integer, STEMCELL_VERSION, "latest"),
|
20
22
|
}
|
21
23
|
end
|
22
24
|
|
@@ -15,10 +15,12 @@ describe Bosh::Cli::Command::Prepare do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
before do
|
18
|
-
command.
|
19
|
-
command.
|
20
|
-
command.
|
21
|
-
|
18
|
+
allow(command).to receive(:require_project_deployment)
|
19
|
+
allow(command).to receive(:auth_required)
|
20
|
+
allow(command).to receive(:project_deployment_releases)
|
21
|
+
.and_return(releases)
|
22
|
+
allow(command).to receive(:project_deployment_stemcells)
|
23
|
+
.and_return(stemcells)
|
22
24
|
end
|
23
25
|
|
24
26
|
describe "prepare_release(s/_repos)" do
|
@@ -26,8 +28,8 @@ describe Bosh::Cli::Command::Prepare do
|
|
26
28
|
let(:stemcells) { [] }
|
27
29
|
|
28
30
|
before do
|
29
|
-
release.
|
30
|
-
command.
|
31
|
+
expect(release).to receive(:update_repo)
|
32
|
+
expect(command).to receive(:release_uploaded?)
|
31
33
|
.with(release.name, release.version).and_return(release_uploaded)
|
32
34
|
end
|
33
35
|
|
@@ -35,7 +37,7 @@ describe Bosh::Cli::Command::Prepare do
|
|
35
37
|
let(:release_uploaded) { true }
|
36
38
|
|
37
39
|
it "does not upload the release" do
|
38
|
-
command.
|
40
|
+
expect(command).to_not receive(:release_upload)
|
39
41
|
command.prepare
|
40
42
|
end
|
41
43
|
end
|
@@ -44,7 +46,7 @@ describe Bosh::Cli::Command::Prepare do
|
|
44
46
|
let(:release_uploaded) { false }
|
45
47
|
|
46
48
|
it "does not upload the release" do
|
47
|
-
command.
|
49
|
+
expect(command).to receive(:release_upload).with(release.manifest_file)
|
48
50
|
command.prepare
|
49
51
|
end
|
50
52
|
end
|
@@ -55,16 +57,16 @@ describe Bosh::Cli::Command::Prepare do
|
|
55
57
|
let(:stemcells) { [ stemcell ] }
|
56
58
|
|
57
59
|
before do
|
58
|
-
command.
|
60
|
+
expect(command).to receive(:stemcell_uploaded?)
|
59
61
|
.with(stemcell.name, stemcell.version).and_return(stemcell_uploaded)
|
60
62
|
end
|
61
63
|
|
62
64
|
context "stemcell uploaded" do
|
63
65
|
let(:stemcell_uploaded) { true }
|
64
|
-
|
66
|
+
|
65
67
|
it "does not upload the stemcell" do
|
66
|
-
command.
|
67
|
-
command.
|
68
|
+
expect(command).to_not receive(:stemcell_download)
|
69
|
+
expect(command).to_not receive(:stemcell_upload)
|
68
70
|
command.prepare
|
69
71
|
end
|
70
72
|
end
|
@@ -72,14 +74,17 @@ describe Bosh::Cli::Command::Prepare do
|
|
72
74
|
context "stemcell not uploaded" do
|
73
75
|
let(:stemcell_uploaded) { false }
|
74
76
|
|
75
|
-
before
|
77
|
+
before do
|
78
|
+
allow(stemcell).to receive(:downloaded?)
|
79
|
+
.and_return(stemcell_downloaded)
|
80
|
+
end
|
76
81
|
|
77
82
|
context "stemcell downloaded" do
|
78
83
|
let(:stemcell_downloaded) { true }
|
79
84
|
|
80
85
|
it "does not upload the stemcell" do
|
81
|
-
command.
|
82
|
-
command.
|
86
|
+
expect(command).to_not receive(:stemcell_download)
|
87
|
+
expect(command).to receive(:stemcell_upload).with(stemcell.file)
|
83
88
|
command.prepare
|
84
89
|
end
|
85
90
|
end
|
@@ -88,8 +93,8 @@ describe Bosh::Cli::Command::Prepare do
|
|
88
93
|
let(:stemcell_downloaded) { false }
|
89
94
|
|
90
95
|
it "does not upload the stemcell" do
|
91
|
-
command.
|
92
|
-
command.
|
96
|
+
expect(command).to receive(:stemcell_download).with(stemcell.file_name)
|
97
|
+
expect(command).to receive(:stemcell_upload).with(stemcell.file)
|
93
98
|
command.prepare
|
94
99
|
end
|
95
100
|
end
|
@@ -12,7 +12,7 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
12
12
|
setup_home_dir
|
13
13
|
command.add_option(:config, home_file(".bosh_config"))
|
14
14
|
command.add_option(:non_interactive, true)
|
15
|
-
deployment_cmd.
|
15
|
+
allow(deployment_cmd).to receive(:add_option)
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "#deployment" do
|
@@ -21,7 +21,7 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
21
21
|
let(:filename) { "foo" }
|
22
22
|
|
23
23
|
before do
|
24
|
-
Bosh::Cli::Command::Deployment.
|
24
|
+
expect(Bosh::Cli::Command::Deployment).to receive(:new)
|
25
25
|
.and_return(deployment_cmd)
|
26
26
|
end
|
27
27
|
|
@@ -30,18 +30,19 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
30
30
|
let(:merged_file) { ".manifests/foo.yml" }
|
31
31
|
|
32
32
|
it "sets filename to merged file" do
|
33
|
-
command.
|
33
|
+
expect(command).to receive(:find_deployment).with(filename)
|
34
34
|
.and_return(deployment)
|
35
|
-
command.
|
35
|
+
expect(command).to receive(:project_deployment_file?).with(deployment)
|
36
36
|
.and_return(true)
|
37
|
-
command.
|
38
|
-
command.
|
39
|
-
File.
|
40
|
-
command.
|
41
|
-
command.
|
37
|
+
expect(command).to receive(:project_deployment=).with(deployment)
|
38
|
+
expect(command).to receive(:validate_project_deployment)
|
39
|
+
expect(File).to receive(:exists?).with(merged_file).and_return(false)
|
40
|
+
expect(command).to receive(:create_placeholder_deployment)
|
41
|
+
expect(command).to receive(:project_deployment)
|
42
42
|
.and_return(project_deployment)
|
43
|
-
project_deployment.
|
44
|
-
|
43
|
+
expect(project_deployment).to receive(:merged_file)
|
44
|
+
.and_return(merged_file)
|
45
|
+
expect(deployment_cmd).to receive(:set_current).with(merged_file)
|
45
46
|
subject
|
46
47
|
end
|
47
48
|
end
|
@@ -50,7 +51,7 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
50
51
|
let(:filename) { nil }
|
51
52
|
|
52
53
|
it "returns current deployment" do
|
53
|
-
deployment_cmd.
|
54
|
+
expect(deployment_cmd).to receive(:set_current).with(filename)
|
54
55
|
subject
|
55
56
|
end
|
56
57
|
end
|
@@ -60,19 +61,19 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
60
61
|
subject { command.deploy }
|
61
62
|
|
62
63
|
before do
|
63
|
-
Bosh::Cli::Command::Deployment.
|
64
|
+
expect(Bosh::Cli::Command::Deployment).to receive(:new)
|
64
65
|
.and_return(deployment_cmd)
|
65
|
-
command.
|
66
|
+
expect(command).to receive(:project_deployment?)
|
66
67
|
.and_return(is_project_deployment)
|
67
|
-
deployment_cmd.
|
68
|
+
expect(deployment_cmd).to receive(:perform)
|
68
69
|
end
|
69
70
|
|
70
71
|
context "with project deployment" do
|
71
72
|
let(:is_project_deployment) { true }
|
72
73
|
|
73
74
|
it "requires project deployment" do
|
74
|
-
command.
|
75
|
-
command.
|
75
|
+
expect(command).to receive(:require_project_deployment)
|
76
|
+
expect(command).to receive(:build_project_deployment)
|
76
77
|
subject
|
77
78
|
end
|
78
79
|
end
|
@@ -28,17 +28,17 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
28
28
|
context "deployment" do
|
29
29
|
context "without associated project deployment" do
|
30
30
|
let(:deployment_path) { "deployments/bar.yml" }
|
31
|
-
it { should
|
31
|
+
it { should be false }
|
32
32
|
end
|
33
33
|
context "with associated project deployment" do
|
34
34
|
let(:deployment_path) { ".manifests/foo.yml" }
|
35
|
-
it { should
|
35
|
+
it { should be true }
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
context "project deployment" do
|
40
40
|
let(:deployment_path) { "deployments/foo.yml" }
|
41
|
-
it { should
|
41
|
+
it { should be true }
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -48,7 +48,7 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
48
48
|
let(:deployment_path) { "deployments/foo.yml" }
|
49
49
|
|
50
50
|
before do
|
51
|
-
Bosh::Workspace::ProjectDeployment.
|
51
|
+
expect(Bosh::Workspace::ProjectDeployment).to receive(:new)
|
52
52
|
.with(deployment).and_return(project_deployment)
|
53
53
|
end
|
54
54
|
|
@@ -70,12 +70,12 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
70
70
|
|
71
71
|
context "project deployment" do
|
72
72
|
let(:content) { { "name" => "foo", "templates" => ["bar.yml"] } }
|
73
|
-
it { should
|
73
|
+
it { should be true }
|
74
74
|
end
|
75
75
|
|
76
76
|
context "normal deployment" do
|
77
77
|
let(:content) { { "name" => "foo" } }
|
78
|
-
it { should
|
78
|
+
it { should be false }
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -83,14 +83,14 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
83
83
|
let(:project_deployment_helper) { ProjectDeploymentHelperTester.new(director, deployment) }
|
84
84
|
|
85
85
|
before do
|
86
|
-
subject.
|
86
|
+
expect(subject).to receive(:project_deployment?)
|
87
87
|
.and_return(:is_project_deployment)
|
88
88
|
end
|
89
89
|
|
90
90
|
context "project deployment" do
|
91
91
|
let(:is_project_deployment) { true }
|
92
92
|
it "validates & builds" do
|
93
|
-
subject.
|
93
|
+
expect(subject).to receive(:validate_project_deployment)
|
94
94
|
subject.require_project_deployment
|
95
95
|
end
|
96
96
|
end
|
@@ -113,21 +113,21 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
113
113
|
let(:content) { "director_uuid #{uuid}" }
|
114
114
|
|
115
115
|
it "creates placeholder deployment" do
|
116
|
-
project_deployment_helper.
|
117
|
-
project_deployment.
|
118
|
-
project_deployment.
|
119
|
-
project_deployment.
|
120
|
-
File.
|
121
|
-
file.
|
116
|
+
expect(project_deployment_helper).to receive(:resolve_director_uuid)
|
117
|
+
expect(project_deployment).to receive(:merged_file).and_return(merged_file)
|
118
|
+
expect(project_deployment).to receive(:file).and_return(deployment)
|
119
|
+
expect(project_deployment).to receive(:director_uuid).and_return(uuid)
|
120
|
+
expect(File).to receive(:open).with(merged_file, "w").and_yield(file)
|
121
|
+
expect(file).to receive(:write).with(/#{uuid}\s# Don't edit/)
|
122
122
|
subject
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
126
|
describe "#validate_project_deployment" do
|
127
127
|
it "raises an error" do
|
128
|
-
project_deployment.
|
129
|
-
project_deployment.
|
130
|
-
project_deployment.
|
128
|
+
expect(project_deployment).to receive(:valid?).and_return(false)
|
129
|
+
expect(project_deployment).to receive(:errors).and_return(["foo"])
|
130
|
+
expect(project_deployment).to receive(:file).and_return(["foo.yml"])
|
131
131
|
expect { subject.validate_project_deployment }.to raise_error(/foo/)
|
132
132
|
end
|
133
133
|
end
|
@@ -138,14 +138,17 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
138
138
|
let(:merged_file) { "foo/bar" }
|
139
139
|
|
140
140
|
it "builds project deployment manifest" do
|
141
|
-
project_deployment_helper.
|
142
|
-
project_deployment_helper.
|
143
|
-
|
144
|
-
project_deployment.
|
145
|
-
|
146
|
-
|
141
|
+
expect(project_deployment_helper).to receive(:resolve_director_uuid)
|
142
|
+
expect(project_deployment_helper).to receive(:work_dir)
|
143
|
+
.and_return(work_dir)
|
144
|
+
expect(project_deployment).to receive(:domain_name)
|
145
|
+
.and_return(domain_name)
|
146
|
+
expect(project_deployment).to receive(:merged_file)
|
147
|
+
.and_return(merged_file)
|
148
|
+
|
149
|
+
expect(Bosh::Workspace::ManifestBuilder).to receive(:build)
|
147
150
|
.with(project_deployment, work_dir)
|
148
|
-
Bosh::Workspace::DnsHelper.
|
151
|
+
expect(Bosh::Workspace::DnsHelper).to receive(:transform)
|
149
152
|
.with(merged_file, domain_name)
|
150
153
|
|
151
154
|
subject
|
@@ -158,8 +161,8 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
158
161
|
let(:current_uuid) { "current-uuid" }
|
159
162
|
|
160
163
|
before do
|
161
|
-
project_deployment.
|
162
|
-
director.
|
164
|
+
expect(project_deployment).to receive(:director_uuid).and_return(uuid)
|
165
|
+
allow(director).to receive(:get_status).and_return(status)
|
163
166
|
end
|
164
167
|
|
165
168
|
context "using the warden cpi" do
|
@@ -168,7 +171,7 @@ describe Bosh::Workspace::ProjectDeploymentHelper do
|
|
168
171
|
context "with director uuid current" do
|
169
172
|
let(:uuid) { "current" }
|
170
173
|
it "builds manifest" do
|
171
|
-
project_deployment.
|
174
|
+
expect(project_deployment).to receive(:director_uuid=).with(current_uuid)
|
172
175
|
subject
|
173
176
|
end
|
174
177
|
end
|
@@ -16,14 +16,20 @@ describe Bosh::Workspace::ReleaseHelper do
|
|
16
16
|
let(:work_dir) { asset_dir("manifests-repo") }
|
17
17
|
|
18
18
|
describe "#release_upload" do
|
19
|
-
let(:release_cmd)
|
20
|
-
|
21
|
-
|
19
|
+
let(:release_cmd) do
|
20
|
+
instance_double "Bosh::Cli::Command::Release::UploadRelease"
|
21
|
+
end
|
22
|
+
|
23
|
+
before do
|
24
|
+
allow(Bosh::Cli::Command::Release::UploadRelease).to receive(:new)
|
25
|
+
.and_return(release_cmd)
|
26
|
+
end
|
27
|
+
|
22
28
|
let(:manifest_file) { "foo-1.yml." }
|
23
29
|
subject { release_helper.release_upload(manifest_file) }
|
24
|
-
|
30
|
+
|
25
31
|
it "uploads release" do
|
26
|
-
release_cmd.
|
32
|
+
expect(release_cmd).to receive(:upload).with(manifest_file)
|
27
33
|
subject
|
28
34
|
end
|
29
35
|
end
|
@@ -31,24 +37,30 @@ describe Bosh::Workspace::ReleaseHelper do
|
|
31
37
|
describe "#release_uploaded?" do
|
32
38
|
let(:releases) { { "versions" => %w(1 2 3) } }
|
33
39
|
subject { release_helper.release_uploaded?("foo", version) }
|
34
|
-
before
|
40
|
+
before do
|
41
|
+
expect(director).to receive(:get_release)
|
42
|
+
.with("foo").and_return(releases)
|
43
|
+
end
|
35
44
|
|
36
45
|
context "release exists" do
|
37
46
|
let(:version) { 2 }
|
38
|
-
it { should
|
47
|
+
it { should be true }
|
39
48
|
end
|
40
49
|
|
41
50
|
context "release not found" do
|
42
51
|
let(:version) { "8" }
|
43
|
-
it { should
|
52
|
+
it { should be false }
|
44
53
|
end
|
45
54
|
end
|
46
|
-
|
55
|
+
|
47
56
|
describe "#release_dir" do
|
48
57
|
let(:releases_dir) { File.join(work_dir, ".releases") }
|
49
58
|
subject { release_helper.releases_dir }
|
50
|
-
|
51
|
-
before
|
59
|
+
|
60
|
+
before do
|
61
|
+
expect(FileUtils).to receive(:mkdir_p).once
|
62
|
+
.with(releases_dir).and_return([releases_dir])
|
63
|
+
end
|
52
64
|
|
53
65
|
it { should eq releases_dir }
|
54
66
|
|
@@ -64,10 +76,14 @@ describe Bosh::Workspace::ReleaseHelper do
|
|
64
76
|
let(:release_data) { { name: "foo" } }
|
65
77
|
let(:releases) { [release_data, release_data] }
|
66
78
|
|
67
|
-
before
|
79
|
+
before do
|
80
|
+
expect(release_helper)
|
81
|
+
.to receive_message_chain("project_deployment.releases")
|
82
|
+
.and_return(releases)
|
83
|
+
end
|
68
84
|
|
69
85
|
it "inits releases once" do
|
70
|
-
Bosh::Workspace::Release.
|
86
|
+
expect(Bosh::Workspace::Release).to receive(:new).twice
|
71
87
|
.with(release_data, /\/.releases/).and_return(release)
|
72
88
|
subject
|
73
89
|
expect(subject).to eq [release, release]
|
@@ -16,7 +16,7 @@ describe Bosh::Workspace::SpiffHelper do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
before do
|
19
|
-
subject.
|
19
|
+
expect(subject).to receive(:sh).and_yield(result)
|
20
20
|
end
|
21
21
|
|
22
22
|
context "spiff not in path" do
|
@@ -34,7 +34,7 @@ describe Bosh::Workspace::SpiffHelper do
|
|
34
34
|
let(:result) { Bosh::Exec::Result.new("spiff", "spiff error", 1, false) }
|
35
35
|
|
36
36
|
it "raises an error" do
|
37
|
-
subject.
|
37
|
+
expect(subject).to receive(:say).with(/Command failed/)
|
38
38
|
expect{ subject.spiff_merge templates, target_file }
|
39
39
|
.to raise_error /spiff error/
|
40
40
|
end
|
@@ -46,8 +46,8 @@ describe Bosh::Workspace::SpiffHelper do
|
|
46
46
|
let(:result) { Bosh::Exec::Result.new("spiff", output, 0, false) }
|
47
47
|
|
48
48
|
it "merges manifests" do
|
49
|
-
File.
|
50
|
-
file.
|
49
|
+
expect(File).to receive(:open).with(target_file, 'w').and_yield(file)
|
50
|
+
expect(file).to receive(:write).with(output)
|
51
51
|
subject.spiff_merge templates, target_file
|
52
52
|
end
|
53
53
|
end
|
@@ -17,15 +17,18 @@ describe Bosh::Workspace::StemcellHelper do
|
|
17
17
|
|
18
18
|
context "with stemcell command" do
|
19
19
|
let(:stemcell_cmd) { instance_double("Bosh::Cli::Command::Stemcell") }
|
20
|
-
before
|
20
|
+
before do
|
21
|
+
allow(Bosh::Cli::Command::Stemcell)
|
22
|
+
.to receive(:new).and_return(stemcell_cmd)
|
23
|
+
end
|
21
24
|
|
22
25
|
describe "#stemcell_download" do
|
23
26
|
let(:name) { "foo" }
|
24
27
|
subject { stemcell_helper.stemcell_download(name) }
|
25
|
-
|
28
|
+
|
26
29
|
it "downloads stemcell" do
|
27
|
-
Dir.
|
28
|
-
stemcell_cmd.
|
30
|
+
expect(Dir).to receive(:chdir).and_yield
|
31
|
+
expect(stemcell_cmd).to receive(:download_public).with(name)
|
29
32
|
subject
|
30
33
|
end
|
31
34
|
end
|
@@ -33,9 +36,9 @@ describe Bosh::Workspace::StemcellHelper do
|
|
33
36
|
describe "#stemcell_upload" do
|
34
37
|
let(:file) { "foo.tgz" }
|
35
38
|
subject { stemcell_helper.stemcell_upload(file) }
|
36
|
-
|
39
|
+
|
37
40
|
it "uploads stemcell" do
|
38
|
-
stemcell_cmd.
|
41
|
+
expect(stemcell_cmd).to receive(:upload).with(file)
|
39
42
|
subject
|
40
43
|
end
|
41
44
|
end
|
@@ -44,24 +47,29 @@ describe Bosh::Workspace::StemcellHelper do
|
|
44
47
|
describe "#stemcell_uploaded?" do
|
45
48
|
let(:stemcells) { [{ "name" => "foo", "version" => "1" }] }
|
46
49
|
subject { stemcell_helper.stemcell_uploaded?(name, 1) }
|
47
|
-
before
|
50
|
+
before do
|
51
|
+
expect(director).to receive(:list_stemcells).and_return(stemcells)
|
52
|
+
end
|
48
53
|
|
49
54
|
context "stemcell exists" do
|
50
55
|
let(:name) { "foo" }
|
51
|
-
it { should
|
56
|
+
it { should be true }
|
52
57
|
end
|
53
58
|
|
54
59
|
context "stemcell not found" do
|
55
60
|
let(:name) { "bar" }
|
56
|
-
it { should
|
61
|
+
it { should be false }
|
57
62
|
end
|
58
63
|
end
|
59
|
-
|
64
|
+
|
60
65
|
describe "#stemcell_dir" do
|
61
66
|
let(:stemcells_dir) { File.join(work_dir, ".stemcells") }
|
62
67
|
subject { stemcell_helper.stemcells_dir }
|
63
|
-
|
64
|
-
before
|
68
|
+
|
69
|
+
before do
|
70
|
+
expect(FileUtils).to receive(:mkdir_p).once.with(stemcells_dir)
|
71
|
+
.and_return([stemcells_dir])
|
72
|
+
end
|
65
73
|
|
66
74
|
it { should eq stemcells_dir }
|
67
75
|
|
@@ -77,10 +85,14 @@ describe Bosh::Workspace::StemcellHelper do
|
|
77
85
|
let(:stemcell_data) { { name: "foo" } }
|
78
86
|
let(:stemcells) { [stemcell_data, stemcell_data] }
|
79
87
|
|
80
|
-
before
|
88
|
+
before do
|
89
|
+
allow(stemcell_helper)
|
90
|
+
.to receive_message_chain("project_deployment.stemcells")
|
91
|
+
.and_return(stemcells)
|
92
|
+
end
|
81
93
|
|
82
94
|
it "inits stemcells once" do
|
83
|
-
Bosh::Workspace::Stemcell.
|
95
|
+
expect(Bosh::Workspace::Stemcell).to receive(:new).twice
|
84
96
|
.with(stemcell_data, /\/.stemcells/).and_return(stemcell)
|
85
97
|
subject
|
86
98
|
expect(subject).to eq [stemcell, stemcell]
|
@@ -12,9 +12,9 @@ describe Bosh::Workspace::ManifestBuilder do
|
|
12
12
|
instance_double("Bosh::Workspace::ManifestBuilder") }
|
13
13
|
|
14
14
|
it "creates builder and merges templates" do
|
15
|
-
Bosh::Workspace::ManifestBuilder.
|
15
|
+
expect(Bosh::Workspace::ManifestBuilder).to receive(:new)
|
16
16
|
.with(project_deployment, work_dir).and_return(manifest_builder)
|
17
|
-
manifest_builder.
|
17
|
+
expect(manifest_builder).to receive(:merge_templates)
|
18
18
|
subject
|
19
19
|
end
|
20
20
|
end
|
@@ -23,7 +23,8 @@ describe Bosh::Workspace::ManifestBuilder do
|
|
23
23
|
subject { Bosh::Workspace::ManifestBuilder.new project_deployment, work_dir }
|
24
24
|
|
25
25
|
before do
|
26
|
-
File.
|
26
|
+
allow(File).to receive(:exists?).with(/templates\//)
|
27
|
+
.and_return(template_exists)
|
27
28
|
end
|
28
29
|
|
29
30
|
context "missing template" do
|
@@ -38,21 +39,22 @@ describe Bosh::Workspace::ManifestBuilder do
|
|
38
39
|
let(:dir_exists) { true }
|
39
40
|
|
40
41
|
before do
|
41
|
-
File.
|
42
|
-
Bosh::Workspace::StubFile.
|
42
|
+
allow(File).to receive(:exists?).with(/\.stubs/).and_return(dir_exists)
|
43
|
+
expect(Bosh::Workspace::StubFile).to receive(:create)
|
44
|
+
.with(/\.stubs\/.+yml/, project_deployment)
|
43
45
|
end
|
44
46
|
|
45
47
|
context "no hidden dirs" do
|
46
48
|
let(:dir_exists) { false }
|
47
49
|
it "creates hidden dirs" do
|
48
|
-
subject.
|
49
|
-
Dir.
|
50
|
+
expect(subject).to receive(:spiff_merge)
|
51
|
+
expect(Dir).to receive(:mkdir).with(/.stubs/)
|
50
52
|
subject.merge_templates
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
54
56
|
it "generates manifest with spiff" do
|
55
|
-
subject.
|
57
|
+
expect(subject).to receive(:spiff_merge) do |args|
|
56
58
|
if args.is_a?(Array)
|
57
59
|
expect(args.first).to match(/\/templates\/.+yml/)
|
58
60
|
expect(args.last).to match(/\.stubs\/.+yml/)
|
@@ -123,6 +123,13 @@ describe Bosh::Workspace::ProjectDeployment do
|
|
123
123
|
it { should_not match(/version/i) }
|
124
124
|
end
|
125
125
|
|
126
|
+
context "patch version" do
|
127
|
+
let(:missing) { "name" }
|
128
|
+
let(:stemcell_version) { "2719.1" }
|
129
|
+
it { should match(/name.*missing/i) }
|
130
|
+
it { should_not match(/version/i) }
|
131
|
+
end
|
132
|
+
|
126
133
|
context "invalid version" do
|
127
134
|
let(:missing) { "name" }
|
128
135
|
let(:stemcell_version) { "foo" }
|
@@ -139,7 +146,7 @@ describe Bosh::Workspace::ProjectDeployment do
|
|
139
146
|
|
140
147
|
describe "attr readers" do
|
141
148
|
let(:director_uuid) { uuid }
|
142
|
-
%w(name director_uuid templates releases stemcells meta).each do |attr|
|
149
|
+
%w(name director_uuid templates releases stemcells meta).each do |attr|
|
143
150
|
its(attr.to_sym) { should eq eval(attr) }
|
144
151
|
end
|
145
152
|
end
|
@@ -147,7 +154,7 @@ describe Bosh::Workspace::ProjectDeployment do
|
|
147
154
|
describe "#merged_file" do
|
148
155
|
it "creates parent directory" do
|
149
156
|
dir = File.dirname(subject.merged_file)
|
150
|
-
expect(File.directory?(dir)).to
|
157
|
+
expect(File.directory?(dir)).to be true
|
151
158
|
end
|
152
159
|
|
153
160
|
it "retruns merged file" do
|
data/spec/release_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -10,7 +10,7 @@ Bundler.setup(:default, :test)
|
|
10
10
|
$:.unshift(File.expand_path("../../lib", __FILE__))
|
11
11
|
|
12
12
|
require "rspec/core"
|
13
|
-
require
|
13
|
+
require "rspec/its"
|
14
14
|
|
15
15
|
require "tmpdir"
|
16
16
|
require "archive/zip"
|
@@ -21,8 +21,7 @@ require "cli"
|
|
21
21
|
require "bosh/workspace"
|
22
22
|
|
23
23
|
RSpec.configure do |config|
|
24
|
-
config.
|
25
|
-
|
24
|
+
config.raise_errors_for_deprecations!
|
26
25
|
config.expect_with :rspec do |c|
|
27
26
|
c.syntax = :expect
|
28
27
|
end
|
data/spec/stemcell_spec.rb
CHANGED
@@ -7,22 +7,24 @@ describe Bosh::Workspace::Stemcell do
|
|
7
7
|
let(:version) { 3 }
|
8
8
|
|
9
9
|
describe "#name_version" do
|
10
|
-
its(:name_version) {
|
10
|
+
its(:name_version) { is_expected.to eq "#{name}/#{version}" }
|
11
11
|
end
|
12
12
|
|
13
13
|
describe "#file_name" do
|
14
|
-
its(:file_name) {
|
14
|
+
its(:file_name) { is_expected.to eq file_name }
|
15
15
|
end
|
16
16
|
|
17
17
|
describe "#downloaded?" do
|
18
|
-
before
|
19
|
-
|
18
|
+
before do
|
19
|
+
expect(File).to receive(:exists?).with(/\/#{file_name}/).and_return(true)
|
20
|
+
end
|
21
|
+
its(:downloaded?) { is_expected.to eq true }
|
20
22
|
end
|
21
23
|
|
22
24
|
describe "attr readers" do
|
23
25
|
let(:file) { "#{stemcells_dir}/#{file_name}" }
|
24
26
|
%w(name version file).each do |attr|
|
25
|
-
its(attr.to_sym) {
|
27
|
+
its(attr.to_sym) { is_expected.to eq eval(attr) }
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
data/spec/stub_file_spec.rb
CHANGED
@@ -20,16 +20,16 @@ describe Bosh::Workspace::StubFile do
|
|
20
20
|
subject { Bosh::Workspace::StubFile.create(path, project_deployment) }
|
21
21
|
|
22
22
|
it "calls write" do
|
23
|
-
Bosh::Workspace::StubFile.
|
23
|
+
expect(Bosh::Workspace::StubFile).to receive(:new)
|
24
24
|
.with(project_deployment).and_return(stub_file)
|
25
|
-
stub_file.
|
25
|
+
expect(stub_file).to receive(:write).with(path)
|
26
26
|
subject
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
describe "#write" do
|
31
31
|
it "writes yaml content" do
|
32
|
-
IO.
|
32
|
+
expect(IO).to receive(:write).with(path, /---\n/)
|
33
33
|
subject.write(path)
|
34
34
|
end
|
35
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh-workspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ruben Koster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bosh_cli
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.2682.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.2682.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bosh_common
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.2682.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.2682.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: semi_semantic
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,28 +100,28 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 3.1.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 3.1.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec-
|
112
|
+
name: rspec-its
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.0.1
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.0.1
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rake
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|