forked from jenkinsci/docker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall-plugins.bats
247 lines (227 loc) · 9.66 KB
/
install-plugins.bats
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#!/usr/bin/env bats
load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'
load test_helpers
SUT_IMAGE=$(sut_image)
@test "build image" {
cd $BATS_TEST_DIRNAME/..
docker_build -t $SUT_IMAGE .
}
@test "plugins are installed with plugins.sh" {
run docker_build_child $SUT_IMAGE-plugins $BATS_TEST_DIRNAME/plugins
assert_success
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
assert_success
assert_line 'junit.jpi'
assert_line 'junit.jpi.pinned'
assert_line 'ant.jpi'
assert_line 'ant.jpi.pinned'
}
@test "plugins are installed with install-plugins.sh" {
run docker_build_child $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
refute_line --partial 'Skipping already installed dependency'
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-install-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
assert_success
assert_line 'junit.jpi'
assert_line 'junit.jpi.pinned'
assert_line 'ant.jpi'
assert_line 'ant.jpi.pinned'
assert_line 'credentials.jpi'
assert_line 'credentials.jpi.pinned'
assert_line 'mesos.jpi'
assert_line 'mesos.jpi.pinned'
# optional dependencies
refute_line 'metrics.jpi'
refute_line 'metrics.jpi.pinned'
# plugins bundled but under detached-plugins, so need to be installed
assert_line 'mailer.jpi'
assert_line 'mailer.jpi.pinned'
assert_line 'git.jpi'
assert_line 'git.jpi.pinned'
assert_line 'filesystem_scm.jpi'
assert_line 'filesystem_scm.jpi.pinned'
assert_line 'docker-plugin.jpi'
assert_line 'docker-plugin.jpi.pinned'
}
@test "plugins are installed with install-plugins.sh with non-default REF" {
run docker_build_child $SUT_IMAGE-install-plugins-ref $BATS_TEST_DIRNAME/install-plugins/ref
assert_success
refute_line --partial 'Skipping already installed dependency'
docker run --rm $SUT_IMAGE-install-plugins-ref -e REF=/var/lib/jenkins/ref ls --color=never -1 /var/lib/jenkins/ref | tr -d '\r'
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-install-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
assert_success
assert_line 'junit.jpi'
assert_line 'junit.jpi.pinned'
assert_line 'ant.jpi'
assert_line 'ant.jpi.pinned'
assert_line 'credentials.jpi'
assert_line 'credentials.jpi.pinned'
assert_line 'mesos.jpi'
assert_line 'mesos.jpi.pinned'
# optional dependencies
refute_line 'metrics.jpi'
refute_line 'metrics.jpi.pinned'
# plugins bundled but under detached-plugins, so need to be installed
assert_line 'mailer.jpi'
assert_line 'mailer.jpi.pinned'
assert_line 'git.jpi'
assert_line 'git.jpi.pinned'
assert_line 'filesystem_scm.jpi'
assert_line 'filesystem_scm.jpi.pinned'
assert_line 'docker-plugin.jpi'
assert_line 'docker-plugin.jpi.pinned'
}
@test "plugins are installed with install-plugins.sh from a plugins file" {
run docker_build_child $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
run docker_build_child $SUT_IMAGE-install-plugins-pluginsfile $BATS_TEST_DIRNAME/install-plugins/pluginsfile
assert_success
refute_line --partial 'Skipping already installed dependency'
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-install-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
assert_success
assert_line 'junit.jpi'
assert_line 'junit.jpi.pinned'
assert_line 'ant.jpi'
assert_line 'ant.jpi.pinned'
assert_line 'credentials.jpi'
assert_line 'credentials.jpi.pinned'
assert_line 'mesos.jpi'
assert_line 'mesos.jpi.pinned'
# optional dependencies
refute_line 'metrics.jpi'
refute_line 'metrics.jpi.pinned'
# plugins bundled but under detached-plugins, so need to be installed
assert_line 'mailer.jpi'
assert_line 'mailer.jpi.pinned'
assert_line 'git.jpi'
assert_line 'git.jpi.pinned'
assert_line 'filesystem_scm.jpi'
assert_line 'filesystem_scm.jpi.pinned'
}
@test "plugins are installed with install-plugins.sh even when already exist" {
run docker_build_child $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
run docker_build_child $SUT_IMAGE-install-plugins-update $BATS_TEST_DIRNAME/install-plugins/update --no-cache
assert_success
assert_line --partial 'Skipping already installed dependency workflow-step-api'
assert_line "Using provided plugin: ant"
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-install-plugins-update unzip -p /var/jenkins_home/plugins/junit.jpi META-INF/MANIFEST.MF | tr -d '\r'"
assert_success
assert_line 'Plugin-Version: 1.28'
}
@test "clean work directory" {
run bash -c "ls -la $BATS_TEST_DIRNAME/upgrade-plugins ; rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
assert_success
}
@test "plugins are getting upgraded but not downgraded" {
# Initial execution
run docker_build_child $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
mkdir -p $work
# Image contains junit 1.6 and ant-plugin 1.3
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins true"
assert_success
run unzip_manifest junit.jpi $work
assert_line 'Plugin-Version: 1.6'
run unzip_manifest ant.jpi $work
assert_line 'Plugin-Version: 1.3'
# Upgrade to new image with different plugins
run docker_build_child $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
assert_success
# Images contains junit 1.28 and ant-plugin 1.2
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
assert_success
run unzip_manifest junit.jpi $work
assert_success
# Should be updated
assert_line 'Plugin-Version: 1.28'
run unzip_manifest ant.jpi $work
# 1.2 is older than the existing 1.3, so keep 1.3
assert_line 'Plugin-Version: 1.3'
}
@test "clean work directory" {
run bash -c "ls -la $BATS_TEST_DIRNAME/upgrade-plugins ; rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
assert_success
}
@test "do not upgrade if plugin has been manually updated" {
run docker_build_child $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
mkdir -p $work
# Image contains junit 1.6 and ant-plugin 1.3
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins curl --connect-timeout 20 --retry 5 --retry-delay 0 --retry-max-time 60 -s -f -L https://updates.jenkins.io/download/plugins/junit/1.8/junit.hpi -o /var/jenkins_home/plugins/junit.jpi"
assert_success
run unzip_manifest junit.jpi $work
assert_line 'Plugin-Version: 1.8'
run docker_build_child $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
assert_success
# Images contains junit 1.28 and ant-plugin 1.2
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
assert_success
# junit shouldn't be upgraded
run unzip_manifest junit.jpi $work
assert_success
assert_line 'Plugin-Version: 1.8'
refute_line 'Plugin-Version: 1.28'
# ant shouldn't be downgraded
run unzip_manifest ant.jpi $work
assert_success
assert_line 'Plugin-Version: 1.3'
refute_line 'Plugin-Version: 1.2'
}
@test "clean work directory" {
run bash -c "ls -la $BATS_TEST_DIRNAME/upgrade-plugins ; rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
assert_success
}
@test "upgrade plugin even if it has been manually updated when PLUGINS_FORCE_UPGRADE=true" {
run docker_build_child $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
mkdir -p $work
# Image contains junit 1.6 and ant-plugin 1.3
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins curl --connect-timeout 20 --retry 5 --retry-delay 0 --retry-max-time 60 -s -f -L https://updates.jenkins.io/download/plugins/junit/1.8/junit.hpi -o /var/jenkins_home/plugins/junit.jpi"
assert_success
run unzip_manifest junit.jpi $work
assert_line 'Plugin-Version: 1.8'
run docker_build_child $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
assert_success
# Images contains junit 1.28 and ant-plugin 1.2
run bash -c "docker run -e PLUGINS_FORCE_UPGRADE=true -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
assert_success
# junit should be upgraded
run unzip_manifest junit.jpi $work
assert_success
refute_line 'Plugin-Version: 1.8'
assert_line 'Plugin-Version: 1.28'
# ant shouldn't be downgraded
run unzip_manifest ant.jpi $work
assert_success
assert_line 'Plugin-Version: 1.3'
refute_line 'Plugin-Version: 1.2'
}
@test "clean work directory" {
run bash -c "ls -la $BATS_TEST_DIRNAME/upgrade-plugins ; rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
assert_success
}
@test "plugins are installed with install-plugins.sh and no war" {
run docker_build_child $SUT_IMAGE-install-plugins-no-war $BATS_TEST_DIRNAME/install-plugins/no-war
assert_success
}
@test "Use a custom jenkins.war" {
# Build the image using the right Dockerfile setting a new war with JENKINS_WAR env and with a weird plugin inside
run docker_build_child $SUT_IMAGE-install-plugins-custom-war $BATS_TEST_DIRNAME/install-plugins/custom-war --no-cache
assert_success
# Assert the weird plugin is there
assert_output --partial 'my-happy-plugin:1.1'
}
@test "clean work directory" {
run bash -c "ls -la $BATS_TEST_DIRNAME/upgrade-plugins ; rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work-${SUT_IMAGE}"
assert_success
}