packaging 0.108.1 → 0.109.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -2
- data/lib/packaging/artifactory.rb +15 -10
- data/lib/packaging/config/validations.rb +1 -1
- data/lib/packaging/config.rb +5 -5
- data/lib/packaging/deb/repo.rb +4 -4
- data/lib/packaging/nuget.rb +1 -1
- data/lib/packaging/paths.rb +4 -3
- data/lib/packaging/rpm/repo.rb +26 -8
- data/lib/packaging/sign/msi.rb +6 -8
- data/lib/packaging/sign/rpm.rb +8 -6
- data/lib/packaging/util/execution.rb +1 -1
- data/lib/packaging/util/ezbake.rb +1 -1
- data/lib/packaging/util/file.rb +4 -6
- data/lib/packaging/util/net.rb +8 -12
- data/lib/packaging/util/ship.rb +17 -7
- data/lib/packaging/util/tool.rb +1 -1
- data/lib/packaging/util/version.rb +7 -5
- data/spec/lib/packaging/config_spec.rb +300 -279
- data/spec/lib/packaging/deb/repo_spec.rb +138 -76
- data/spec/lib/packaging/deb_spec.rb +28 -25
- data/spec/lib/packaging/repo_spec.rb +52 -31
- data/spec/lib/packaging/rpm/repo_spec.rb +109 -71
- data/spec/lib/packaging/sign_spec.rb +22 -43
- data/spec/lib/packaging/tar_spec.rb +48 -44
- data/spec/lib/packaging/util/execution_spec.rb +32 -32
- data/spec/lib/packaging/util/file_spec.rb +112 -75
- data/spec/lib/packaging/util/gpg_spec.rb +24 -19
- data/spec/lib/packaging/util/jenkins_spec.rb +79 -48
- data/spec/lib/packaging/util/misc_spec.rb +13 -8
- data/spec/lib/packaging/util/net_spec.rb +193 -152
- data/spec/lib/packaging/util/rake_utils_spec.rb +24 -18
- data/spec/lib/packaging_spec.rb +7 -9
- data/tasks/apple.rake +7 -8
- data/tasks/deb.rake +1 -1
- data/tasks/fetch.rake +2 -2
- data/tasks/mock.rake +3 -3
- data/tasks/nightly_repos.rake +11 -9
- data/tasks/rpm.rake +2 -3
- data/tasks/ship.rake +4 -2
- data/tasks/sign.rake +8 -10
- data/tasks/z_data_dump.rake +3 -3
- metadata +48 -35
@@ -1,112 +1,146 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
let(:source) {
|
5
|
-
let(:target) {
|
6
|
-
let(:options) {
|
7
|
-
let(:tar) {
|
8
|
-
let(:files) { [
|
9
|
-
let(:symlinks) { [
|
10
|
-
let(:dirs) { [
|
11
|
-
let(:empty_dirs) { [
|
12
|
-
|
13
|
-
|
14
|
-
describe
|
3
|
+
describe 'Pkg::Util::File' do
|
4
|
+
let(:source) { '/tmp/placething.tar.gz' }
|
5
|
+
let(:target) { '/tmp' }
|
6
|
+
let(:options) { '--thing-for-tar' }
|
7
|
+
let(:tar) { '/usr/bin/tar' }
|
8
|
+
let(:files) { ['foo.rb', 'foo/bar.rb'] }
|
9
|
+
let(:symlinks) { ['bar.rb'] }
|
10
|
+
let(:dirs) { ['foo'] }
|
11
|
+
let(:empty_dirs) { ['bar'] }
|
12
|
+
|
13
|
+
|
14
|
+
describe '#untar_into' do
|
15
15
|
before :each do
|
16
|
-
Pkg::Util::Tool
|
16
|
+
allow(Pkg::Util::Tool)
|
17
|
+
.to receive(:find_tool)
|
18
|
+
.with('tar', required: true)
|
19
|
+
.and_return(tar)
|
17
20
|
end
|
18
21
|
|
19
|
-
it
|
20
|
-
Pkg::Util::File
|
21
|
-
|
22
|
+
it 'raises an exception if the source doesn\'t exist' do
|
23
|
+
expect(Pkg::Util::File)
|
24
|
+
.to receive(:file_exists?)
|
25
|
+
.with(source, { required: true })
|
26
|
+
.and_raise(RuntimeError)
|
27
|
+
expect(Pkg::Util::Execution).not_to receive(:capture3)
|
22
28
|
expect { Pkg::Util::File.untar_into(source) }.to raise_error(RuntimeError)
|
23
29
|
end
|
24
30
|
|
25
|
-
it
|
26
|
-
Pkg::Util::File
|
27
|
-
|
31
|
+
it 'unpacks the tarball to the current directory if no target is passed' do
|
32
|
+
expect(Pkg::Util::File)
|
33
|
+
.to receive(:file_exists?)
|
34
|
+
.with(source, { required: true }) { true }
|
35
|
+
expect(Pkg::Util::Execution)
|
36
|
+
.to receive(:capture3)
|
37
|
+
.with("#{tar} -xf #{source}")
|
28
38
|
Pkg::Util::File.untar_into(source)
|
29
39
|
end
|
30
40
|
|
31
|
-
it
|
32
|
-
Pkg::Util::File
|
33
|
-
|
41
|
+
it 'unpacks the tarball to the current directory with options if no target is passed' do
|
42
|
+
expect(Pkg::Util::File)
|
43
|
+
.to receive(:file_exists?)
|
44
|
+
.with(source, { required: true }) { true }
|
45
|
+
expect(Pkg::Util::Execution)
|
46
|
+
.to receive(:capture3)
|
47
|
+
.with("#{tar} #{options} -xf #{source}")
|
34
48
|
Pkg::Util::File.untar_into(source, nil, options)
|
35
49
|
end
|
36
50
|
|
37
|
-
it
|
38
|
-
File.
|
39
|
-
Pkg::Util::File.
|
40
|
-
Pkg::Util::File.
|
41
|
-
Pkg::Util::Execution.
|
51
|
+
it 'unpacks the tarball into the target' do
|
52
|
+
allow(File).to receive(:capture3ist?).with(source).and_return(true)
|
53
|
+
expect(Pkg::Util::File).to receive(:file_exists?).with(source, { required: true }) { true }
|
54
|
+
expect(Pkg::Util::File).to receive(:file_writable?).with(target) { true }
|
55
|
+
expect(Pkg::Util::Execution).to receive(:capture3).with("#{tar} -C #{target} -xf #{source}")
|
42
56
|
Pkg::Util::File.untar_into(source, target)
|
43
57
|
end
|
44
58
|
|
45
59
|
it "unpacks the tarball into the target with options passed" do
|
46
|
-
File.
|
47
|
-
Pkg::Util::File.
|
48
|
-
Pkg::Util::File.
|
49
|
-
Pkg::Util::Execution
|
60
|
+
allow(File).to receive(:capture3ist?).with(source).and_return(true)
|
61
|
+
expect(Pkg::Util::File).to receive(:file_exists?).with(source, { required: true }) { true }
|
62
|
+
expect(Pkg::Util::File).to receive(:file_writable?).with(target) { true }
|
63
|
+
expect(Pkg::Util::Execution)
|
64
|
+
.to receive(:capture3)
|
65
|
+
.with("#{tar} #{options} -C #{target} -xf #{source}")
|
50
66
|
Pkg::Util::File.untar_into(source, target, options)
|
51
67
|
end
|
52
68
|
end
|
53
69
|
|
54
|
-
describe
|
55
|
-
it
|
56
|
-
Pkg::Util::File.files_with_ext(
|
70
|
+
describe '#files_with_ext' do
|
71
|
+
it 'returns nothing if there are no files with that extension' do
|
72
|
+
expect(Pkg::Util::File.files_with_ext('./spec/fixtures/configs/components', '.fake'))
|
73
|
+
.to be_empty
|
57
74
|
end
|
58
75
|
|
59
|
-
it
|
60
|
-
expect(Pkg::Util::File.files_with_ext(
|
61
|
-
|
76
|
+
it 'returns only the files with that extension' do
|
77
|
+
expect(Pkg::Util::File.files_with_ext('./spec/fixtures/configs/components', '.json'))
|
78
|
+
.to include('./spec/fixtures/configs/components/test_file.json')
|
79
|
+
expect(Pkg::Util::File.files_with_ext('./spec/fixtures/configs/components', '.json'))
|
80
|
+
.to include('./spec/fixtures/configs/components/test_file_2.json')
|
62
81
|
end
|
63
82
|
end
|
64
83
|
|
65
|
-
describe
|
66
|
-
it
|
84
|
+
describe '#install_files_into_dir' do
|
85
|
+
it 'selects the correct files to install' do
|
67
86
|
Pkg::Config.load_defaults
|
68
87
|
workdir = Pkg::Util::File.mktemp
|
69
88
|
patterns = []
|
70
89
|
|
71
|
-
|
72
|
-
File.
|
73
|
-
File.
|
74
|
-
File.
|
75
|
-
Pkg::Util::File.stub(:empty_dir?) { false }
|
90
|
+
allow(File).to receive(:file?).and_return(false)
|
91
|
+
allow(File).to receive(:symlink?).and_return(false)
|
92
|
+
allow(File).to receive(:directory?).and_return(false)
|
93
|
+
allow(Pkg::Util::File).to receive(:empty_dir?).and_return(false)
|
76
94
|
|
77
95
|
# Files should have the path made and should be copied
|
78
96
|
files.each do |file|
|
79
|
-
File.
|
80
|
-
Dir.
|
81
|
-
FileUtils
|
82
|
-
|
97
|
+
allow(File).to receive(:file?).with(file).and_return(true)
|
98
|
+
allow(Dir).to receive(:[]).with(file).and_return(file)
|
99
|
+
expect(FileUtils)
|
100
|
+
.to receive(:mkpath)
|
101
|
+
.with(File.dirname(File.join(workdir, file)), verbose: false)
|
102
|
+
expect(FileUtils)
|
103
|
+
.to receive(:cp)
|
104
|
+
.with(file, File.join(workdir, file), verbose: false, preserve: true)
|
83
105
|
patterns << file
|
84
106
|
end
|
85
107
|
|
86
108
|
# Symlinks should have the path made and should be copied
|
87
109
|
symlinks.each do |file|
|
88
|
-
File.
|
89
|
-
Dir.
|
90
|
-
FileUtils
|
91
|
-
|
110
|
+
allow(File).to receive(:symlink?).with(file).and_return(true)
|
111
|
+
allow(Dir).to receive(:[]).with(file).and_return(file)
|
112
|
+
expect(FileUtils)
|
113
|
+
.to receive(:mkpath)
|
114
|
+
.with(File.dirname(File.join(workdir, file)), verbose: false)
|
115
|
+
expect(FileUtils)
|
116
|
+
.to receive(:cp)
|
117
|
+
.with(file, File.join(workdir, file), verbose: false, preserve: true)
|
92
118
|
patterns << file
|
93
119
|
end
|
94
120
|
|
95
|
-
# Dirs should be added to patterns but
|
121
|
+
# Dirs should be added to patterns but not acted upon
|
96
122
|
dirs.each do |dir|
|
97
|
-
File.
|
98
|
-
Dir.
|
99
|
-
FileUtils
|
100
|
-
|
123
|
+
allow(File).to receive(:directory?).with(dir).and_return(true)
|
124
|
+
allow(Dir).to receive(:[]).with("#{dir}/**/*").and_return(dir)
|
125
|
+
expect(FileUtils)
|
126
|
+
.not_to receive(:mkpath)
|
127
|
+
.with(File.dirname(File.join(workdir, dir)), verbose: false)
|
128
|
+
expect(FileUtils)
|
129
|
+
.not_to receive(:cp)
|
130
|
+
.with(dir, File.join(workdir, dir), verbose: false, preserve: true)
|
101
131
|
patterns << dir
|
102
132
|
end
|
103
133
|
|
104
134
|
# Empty dirs should have the path created and nothing copied
|
105
135
|
empty_dirs.each do |dir|
|
106
|
-
Pkg::Util::File.
|
107
|
-
Dir.
|
108
|
-
FileUtils
|
109
|
-
|
136
|
+
allow(Pkg::Util::File).to receive(:empty_dir?).with(dir).and_return(true)
|
137
|
+
allow(Dir).to receive(:[]).with(dir).and_return(dir)
|
138
|
+
expect(FileUtils)
|
139
|
+
.to receive(:mkpath)
|
140
|
+
.with(File.join(workdir, dir), verbose: false)
|
141
|
+
expect(FileUtils)
|
142
|
+
.not_to receive(:cp)
|
143
|
+
.with(dir, File.join(workdir, dir), verbose: false, preserve: true)
|
110
144
|
patterns << dir
|
111
145
|
end
|
112
146
|
|
@@ -115,25 +149,28 @@ describe "Pkg::Util::File" do
|
|
115
149
|
end
|
116
150
|
end
|
117
151
|
|
118
|
-
describe
|
119
|
-
it
|
120
|
-
File.
|
121
|
-
Pkg::Util::File.directories(
|
152
|
+
describe '#directories' do
|
153
|
+
it 'returns nil if there is no directory' do
|
154
|
+
expect(File).to receive(:directory?).with('/tmp').and_return(false)
|
155
|
+
expect(Pkg::Util::File.directories('/tmp')).to be_nil
|
122
156
|
end
|
123
157
|
|
124
|
-
it
|
125
|
-
File.
|
126
|
-
Dir.
|
127
|
-
Pkg::Util::File.directories("/tmp").
|
158
|
+
it 'returns the empty array if there are no dirs in the directory' do
|
159
|
+
expect(File).to receive(:directory?).with('/tmp').and_return(true)
|
160
|
+
expect(Dir).to receive(:glob).with('*').and_return([])
|
161
|
+
expect(Pkg::Util::File.directories("/tmp")).to be_empty
|
128
162
|
end
|
129
163
|
|
130
|
-
it
|
131
|
-
File.
|
132
|
-
[
|
133
|
-
File.
|
164
|
+
it 'returns an array of the top level directories inside a directory' do
|
165
|
+
allow(File).to receive(:directory?).and_return(false)
|
166
|
+
['/tmp', '/tmp/dir', '/tmp/other_dir'].each do |dir|
|
167
|
+
expect(File).to receive(:directory?).with(dir).and_return(true)
|
134
168
|
end
|
135
|
-
Dir
|
136
|
-
|
169
|
+
expect(Dir)
|
170
|
+
.to receive(:glob)
|
171
|
+
.with('*')
|
172
|
+
.and_return(['/tmp/file', '/tmp/dir', '/tmp/other_dir'])
|
173
|
+
expect(Pkg::Util::File.directories('/tmp')).to eq(['/tmp/dir', '/tmp/other_dir'])
|
137
174
|
end
|
138
175
|
end
|
139
176
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
let(:gpg) {
|
5
|
-
let(:keychain) {
|
6
|
-
let(:gpg_key) {
|
7
|
-
let(:target_file) {
|
3
|
+
describe 'Pkg::Util::Gpg' do
|
4
|
+
let(:gpg) { '/local/bin/gpg' }
|
5
|
+
let(:keychain) { '/usr/local/bin/keychain' }
|
6
|
+
let(:gpg_key) { 'abcd1234' }
|
7
|
+
let(:target_file) { '/tmp/file' }
|
8
8
|
|
9
9
|
before(:each) do
|
10
10
|
reset_env(['RPM_GPG_AGENT'])
|
@@ -12,36 +12,37 @@ describe "Pkg::Util::Gpg" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#key' do
|
15
|
-
it
|
15
|
+
it 'fails if Pkg::Config.gpg_key isn\'t set' do
|
16
16
|
allow(Pkg::Config).to receive(:gpg_key).and_return(nil)
|
17
17
|
expect { Pkg::Util::Gpg.key }.to raise_error(RuntimeError)
|
18
18
|
end
|
19
|
-
it
|
19
|
+
it 'fails if Pkg::Config.gpg_key is an empty string' do
|
20
20
|
allow(Pkg::Config).to receive(:gpg_key).and_return('')
|
21
21
|
expect { Pkg::Util::Gpg.key }.to raise_error(RuntimeError)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#kill_keychain' do
|
26
|
-
it
|
26
|
+
it 'doesn\'t reload the keychain if already loaded' do
|
27
27
|
Pkg::Util::Gpg.instance_variable_set("@keychain_loaded", true)
|
28
|
-
|
29
|
-
Pkg::Util::Gpg.
|
28
|
+
|
29
|
+
expect(Pkg::Util::Gpg).not_to receive(:kill_keychain)
|
30
|
+
expect(Pkg::Util::Gpg).not_to receive(:start_keychain)
|
30
31
|
Pkg::Util::Gpg.load_keychain
|
31
32
|
Pkg::Util::Gpg.instance_variable_set("@keychain_loaded", nil)
|
32
33
|
end
|
33
34
|
|
34
35
|
it "doesn't reload the keychain if ENV['RPM_GPG_AGENT'] is set" do
|
35
36
|
ENV['RPM_GPG_AGENT'] = 'blerg'
|
36
|
-
Pkg::Util::Gpg.
|
37
|
-
Pkg::Util::Gpg.
|
37
|
+
expect(Pkg::Util::Gpg).not_to receive(:kill_keychain)
|
38
|
+
expect(Pkg::Util::Gpg).not_to receive(:start_keychain)
|
38
39
|
Pkg::Util::Gpg.load_keychain
|
39
40
|
end
|
40
41
|
|
41
42
|
it 'kills and starts the keychain if not loaded already' do
|
42
43
|
Pkg::Util::Gpg.instance_variable_set("@keychain_loaded", nil)
|
43
|
-
Pkg::Util::Gpg.
|
44
|
-
Pkg::Util::Gpg.
|
44
|
+
expect(Pkg::Util::Gpg).to receive(:kill_keychain).once
|
45
|
+
expect(Pkg::Util::Gpg).to receive(:start_keychain).once
|
45
46
|
Pkg::Util::Gpg.load_keychain
|
46
47
|
end
|
47
48
|
end
|
@@ -49,15 +50,19 @@ describe "Pkg::Util::Gpg" do
|
|
49
50
|
describe '#sign_file' do
|
50
51
|
it 'adds special flags if RPM_GPG_AGENT is set' do
|
51
52
|
ENV['RPM_GPG_AGENT'] = 'blerg'
|
52
|
-
additional_flags =
|
53
|
-
Pkg::Util::Tool.
|
54
|
-
Pkg::Util::Execution
|
53
|
+
additional_flags = '--no-tty --use-agent'
|
54
|
+
expect(Pkg::Util::Tool).to receive(:find_tool).with('gpg').and_return(gpg)
|
55
|
+
expect(Pkg::Util::Execution)
|
56
|
+
.to receive(:capture3)
|
57
|
+
.with("#{gpg}\s#{additional_flags}\s--armor --detach-sign -u #{gpg_key} #{target_file}")
|
55
58
|
Pkg::Util::Gpg.sign_file(target_file)
|
56
59
|
end
|
57
60
|
|
58
61
|
it 'signs without extra flags when RPM_GPG_AGENT is not set' do
|
59
|
-
Pkg::Util::Tool.
|
60
|
-
Pkg::Util::Execution
|
62
|
+
expect(Pkg::Util::Tool).to receive(:find_tool).with('gpg').and_return(gpg)
|
63
|
+
expect(Pkg::Util::Execution)
|
64
|
+
.to receive(:capture3)
|
65
|
+
.with("#{gpg}\s\s--armor --detach-sign -u #{gpg_key} #{target_file}")
|
61
66
|
Pkg::Util::Gpg.sign_file(target_file)
|
62
67
|
end
|
63
68
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'json'
|
3
4
|
|
4
5
|
describe Pkg::Util::Jenkins do
|
5
|
-
let(:build_host) {
|
6
|
-
let(:name) {
|
6
|
+
let(:build_host) { 'Jenkins-foo' }
|
7
|
+
let(:name) { 'job-foo' }
|
7
8
|
around do |example|
|
8
9
|
old_build_host = Pkg::Config.jenkins_build_host
|
9
10
|
Pkg::Config.jenkins_build_host = build_host
|
@@ -11,51 +12,77 @@ describe Pkg::Util::Jenkins do
|
|
11
12
|
Pkg::Config.jenkins_build_host = old_build_host
|
12
13
|
end
|
13
14
|
|
14
|
-
describe
|
15
|
-
let(:xml_file) {
|
15
|
+
describe '#create_jenkins_job' do
|
16
|
+
let(:xml_file) { 'bar.xml' }
|
16
17
|
|
17
|
-
it
|
18
|
-
Pkg::Util::Net
|
18
|
+
it 'should call curl_form_data with the correct arguments' do
|
19
|
+
expect(Pkg::Util::Net)
|
20
|
+
.to receive(:curl_form_data)
|
21
|
+
.with("http://#{build_host}/createItem?name=#{name}",
|
22
|
+
['-H', '"Content-Type: application/xml"',
|
23
|
+
'--data-binary',
|
24
|
+
"@#{xml_file}"])
|
19
25
|
Pkg::Util::Jenkins.create_jenkins_job(name, xml_file)
|
20
26
|
end
|
21
27
|
end
|
22
28
|
|
23
|
-
describe
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
describe '#jenkins_job_exists?' do
|
30
|
+
it 'should call curl_form_data with correct arguments' do
|
31
|
+
expect(Pkg::Util::Net)
|
32
|
+
.to receive(:curl_form_data)
|
33
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
34
|
+
['--silent', '--fail'],
|
35
|
+
quiet: true)
|
36
|
+
.and_return(['output', 0])
|
37
|
+
expect(Pkg::Util::Execution).to receive(:success?).and_return(true)
|
28
38
|
Pkg::Util::Jenkins.jenkins_job_exists?(name)
|
29
39
|
end
|
30
40
|
|
31
|
-
it
|
32
|
-
Pkg::Util::Net
|
33
|
-
|
34
|
-
|
41
|
+
it 'should return false on job not existing' do
|
42
|
+
expect(Pkg::Util::Net)
|
43
|
+
.to receive(:curl_form_data)
|
44
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
45
|
+
['--silent', '--fail'],
|
46
|
+
quiet: true)
|
47
|
+
.and_return(['output', 1])
|
48
|
+
expect(Pkg::Util::Execution)
|
49
|
+
.to receive(:success?)
|
50
|
+
.and_return(false)
|
51
|
+
expect(Pkg::Util::Jenkins.jenkins_job_exists?(name)).to be false
|
35
52
|
end
|
36
53
|
|
37
|
-
it
|
38
|
-
Pkg::Util::Net
|
39
|
-
|
54
|
+
it 'should return false if curl_form_data raised a runtime error' do
|
55
|
+
expect(Pkg::Util::Net)
|
56
|
+
.to receive(:curl_form_data)
|
57
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
58
|
+
['--silent', '--fail'],
|
59
|
+
quiet: true)
|
60
|
+
.and_return(false)
|
61
|
+
expect(Pkg::Util::Jenkins.jenkins_job_exists?(name)).to be false
|
40
62
|
end
|
41
63
|
|
42
|
-
it
|
43
|
-
Pkg::Util::Net
|
44
|
-
|
45
|
-
|
64
|
+
it 'should return true when job exists' do
|
65
|
+
expect(Pkg::Util::Net)
|
66
|
+
.to receive(:curl_form_data)
|
67
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
68
|
+
['--silent', '--fail'],
|
69
|
+
quiet: true)
|
70
|
+
.and_return(['output', 0])
|
71
|
+
expect(Pkg::Util::Execution).to receive(:success?).and_return(true)
|
72
|
+
expect(Pkg::Util::Jenkins.jenkins_job_exists?(name)).to be true
|
46
73
|
end
|
47
74
|
end
|
48
75
|
|
49
76
|
describe '#poll_jenkins_job' do
|
50
|
-
let(:job_url) {
|
77
|
+
let(:job_url) { 'http://cat.meow' }
|
51
78
|
let(:build_url) { "#{job_url}/1" }
|
52
|
-
let(:result) {
|
53
|
-
let(:job_hash) { {'lastBuild' => { 'url' => build_url } }}
|
54
|
-
let(:build_hash) { {'result' => result, 'building' => false } }
|
79
|
+
let(:result) { 'SUCCESS' }
|
80
|
+
let(:job_hash) { { 'lastBuild' => { 'url' => build_url } } }
|
81
|
+
let(:build_hash) { { 'result' => result, 'building' => false } }
|
55
82
|
|
56
83
|
before :each do
|
57
|
-
subject.
|
58
|
-
subject.
|
84
|
+
allow(subject).to receive(:get_jenkins_info).with(job_url).and_return(job_hash)
|
85
|
+
allow(subject).to receive(:wait_for_build).with(build_url).and_return(build_hash)
|
59
86
|
end
|
60
87
|
|
61
88
|
context "when polling the given url" do
|
@@ -66,47 +93,51 @@ describe Pkg::Util::Jenkins do
|
|
66
93
|
end
|
67
94
|
|
68
95
|
describe '#wait_for_build' do
|
69
|
-
let(:job_url) {
|
96
|
+
let(:job_url) { 'http://cat.meow' }
|
70
97
|
let(:build_url) { "#{job_url}/1" }
|
71
|
-
let(:build_hash) { {'building' => false } }
|
98
|
+
let(:build_hash) { { 'building' => false } }
|
72
99
|
|
73
100
|
context "when waiting for the given build to finish" do
|
74
101
|
it "return the resulting build_hash when build completes successfully" do
|
75
|
-
subject.
|
102
|
+
expect(subject).to receive(:get_jenkins_info).with(job_url).and_return(build_hash)
|
76
103
|
subject.wait_for_build(job_url)
|
77
104
|
end
|
78
105
|
end
|
79
106
|
end
|
80
107
|
|
81
108
|
describe '#get_jenkins_info' do
|
82
|
-
let(:url) {
|
109
|
+
let(:url) { 'http://cat.meow' }
|
83
110
|
let(:uri) { URI(url) }
|
84
111
|
let(:response) { double }
|
85
|
-
let(:valid_json)
|
86
|
-
|
87
|
-
|
88
|
-
|
112
|
+
let(:valid_json) do
|
113
|
+
{
|
114
|
+
'employees' => [
|
115
|
+
{ 'firstName' => 'John', 'lastName' => 'Doe' },
|
116
|
+
{ 'firstName' => 'Anna', 'lastName' => 'Smith' },
|
117
|
+
{ 'firstName' => 'Peter', 'lastName' => 'Jones' }
|
118
|
+
]
|
119
|
+
}.to_json
|
120
|
+
end
|
89
121
|
|
90
122
|
before :each do
|
91
|
-
response.
|
92
|
-
response.
|
93
|
-
Pkg::Util::Jenkins.
|
123
|
+
allow(response).to receive(:body).and_return(valid_json)
|
124
|
+
allow(response).to receive(:code).and_return('200')
|
125
|
+
expect(Pkg::Util::Jenkins).to receive(:URI).and_return(uri)
|
94
126
|
end
|
95
127
|
|
96
|
-
context
|
97
|
-
it
|
98
|
-
Net::HTTP.
|
128
|
+
context 'when making HTTP GET request to given url' do
|
129
|
+
it 'should return Hash of JSON contents when response is non-error' do
|
130
|
+
expect(Net::HTTP).to receive(:get_response).with(uri).and_return(response)
|
99
131
|
subject.get_jenkins_info(url)
|
100
132
|
end
|
101
133
|
|
102
|
-
it
|
103
|
-
response.
|
104
|
-
Net::HTTP.
|
105
|
-
expect
|
134
|
+
it 'should raise Runtime error when response is error' do
|
135
|
+
allow(response).to receive(:code).and_return('400')
|
136
|
+
expect(Net::HTTP).to receive(:get_response).with(uri).and_return(response)
|
137
|
+
expect do
|
106
138
|
subject.get_jenkins_info(url)
|
107
|
-
|
139
|
+
end.to raise_error(Exception, /Unable to query .*, please check that it is valid./)
|
108
140
|
end
|
109
141
|
end
|
110
142
|
end
|
111
|
-
|
112
143
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe 'Pkg::Util::Misc' do
|
5
|
-
context
|
5
|
+
context '#search_and_replace' do
|
6
6
|
let(:orig_string) { "#!/bin/bash\necho '__REPO_NAME__'" }
|
7
7
|
let(:updated_string) { "#!/bin/bash\necho 'abcdefg'" }
|
8
8
|
let(:good_replacements) do
|
@@ -13,19 +13,24 @@ describe 'Pkg::Util::Misc' do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'replaces the token with the Pkg::Config variable' do
|
16
|
-
Pkg::Config.config_from_hash({:
|
17
|
-
Pkg::Util::Misc.search_and_replace(orig_string, good_replacements)
|
16
|
+
Pkg::Config.config_from_hash({ project: 'foo', repo_name: 'abcdefg' })
|
17
|
+
expect(Pkg::Util::Misc.search_and_replace(orig_string, good_replacements))
|
18
|
+
.to eq(updated_string)
|
18
19
|
end
|
19
20
|
|
20
21
|
it 'does no replacement if the Pkg::Config variable is not set' do
|
21
|
-
Pkg::Config.config_from_hash({:
|
22
|
-
Pkg::Util::Misc.search_and_replace(orig_string, good_replacements)
|
22
|
+
Pkg::Config.config_from_hash({ project: 'foo' })
|
23
|
+
expect(Pkg::Util::Misc.search_and_replace(orig_string, good_replacements))
|
24
|
+
.to eq(orig_string)
|
23
25
|
end
|
24
26
|
|
25
27
|
it 'warns and continues if the Pkg::Config variable is unknown to packaging' do
|
26
|
-
Pkg::Config.config_from_hash({:
|
27
|
-
Pkg::Util::Misc
|
28
|
-
|
28
|
+
Pkg::Config.config_from_hash({ project: 'foo' })
|
29
|
+
expect(Pkg::Util::Misc)
|
30
|
+
.to receive(:warn)
|
31
|
+
.with("replacement value for '#{warn_replacements.keys.first}' probably shouldn't be nil")
|
32
|
+
expect(Pkg::Util::Misc.search_and_replace(orig_string, warn_replacements))
|
33
|
+
.to eq(orig_string)
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|