packaging 0.108.1 → 0.109.0
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/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
|