-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathws.test
321 lines (231 loc) · 8.65 KB
/
ws.test
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
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
#
# Run this with shelltest ws.test
#
function do_ssh {
local host="$1"; shift
ssh -o PasswordAuthentication=no -qT $host "$*" 2>&1
}
function git_basename {
basename "$1" | sed s/\.git$//
}
function before_all {
[ -x "$(which ws)" ] || abort "Can't find workspace script."
export WORKSPACE="./ws"
export WORKSPACE_RELATIVE_HOME="tmp/workspace-test"
export WORKSPACE_TEST_HOME="$HOME/$WORKSPACE_RELATIVE_HOME"
export WORKSPACE_HOME="$WORKSPACE_TEST_HOME"
export RED="jayne.local"
export RED_WILDCARD="jayne.%"
do_ssh $RED true || abort "ssh to $HOST broken"
export BLUE="kaylee.local"
do_ssh $BLUE true || abort "ssh to $OTHER_HOST broken"
export ALICE="[email protected]:matadon/rbenv-gem-rehash.git"
export ALICE_WILDCARD="rbenv%"
export BOB="[email protected]:matadon/sprockets-blackcoffee.git"
export CHARLIE="[email protected]:matadon/postinius.git"
do_ssh [email protected] | grep -q "successfully authenticated" \
|| abort "ssh to github.com broken"
}
function unmount_remote {
for remote in $*; do
[ ! -d "$remote" ] && continue
if [ "$(which fusermount)" != "" ]; then
fusermount -u "$remote"
else
umount "$remote"
fi
done
}
function after_each {
unmount_remote $WORKSPACE_TEST_HOME/client/*
unmount_remote $WORKSPACE_TEST_HOME/*
[ -d "$WORKSPACE_TEST_HOME" ] && rm -fr "$WORKSPACE_TEST_HOME"
do_ssh $RED "test -d \"$WORKSPACE_RELATIVE_HOME\" && rm -fr \"$WORKSPACE_RELATIVE_HOME\""
do_ssh $BLUE "test -d \"$WORKSPACE_RELATIVE_HOME\" && rm -fr \"$WORKSPACE_RELATIVE_HOME\""
true
}
function test_workspace_takes_config_from_environment {
$WORKSPACE init | grep -q "$HOME/tmp/workspace-test" \
|| abort "Workspace not reading WORKSPACE_HOME from environment."
}
function test_set_and_get {
$WORKSPACE set host $RED || fail
[ "$($WORKSPACE get host)" = "$RED" ] || abort
}
function test_set_requires_valid_option {
! $WORKSPACE set invalid_option
}
function test_add_repo {
local name="$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED || fail
[ -d "$WORKSPACE_HOME/$name" ] || fail
[ -d "$WORKSPACE_HOME/$name/.git" ] || fail
do_ssh $RED "test -d \"$WORKSPACE_RELATIVE_HOME/$name\"" || fail
}
function test_add_repo_on_default_host {
local name="$(git_basename $ALICE)"
$WORKSPACE set host $RED || fail
$WORKSPACE add $ALICE || fail
[ -d "$WORKSPACE_HOME/$name" ] || fail
[ -d "$WORKSPACE_HOME/$name/.git" ] || fail
do_ssh $RED "test -d \"$WORKSPACE_RELATIVE_HOME/$name\"" || fail
}
function test_add_repo_in_namespace {
local name="$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED client || fail
[ -d "$WORKSPACE_HOME/$name" ] && fail
[ -d "$WORKSPACE_HOME/client/$name" ] || fail
[ -d "$WORKSPACE_HOME/client/$name/.git" ] || fail
do_ssh $RED "test -d \"$WORKSPACE_RELATIVE_HOME/client/$name\"" || fail
}
function test_add_repo_in_namespace_with_default_host {
local name="$(git_basename $ALICE)"
$WORKSPACE set host $RED || fail
$WORKSPACE add $ALICE - client || fail
[ -d "$WORKSPACE_HOME/$name" ] && fail
[ -d "$WORKSPACE_HOME/client/$name" ] || fail
[ -d "$WORKSPACE_HOME/client/$name/.git" ] || fail
do_ssh $RED "test -d \"$WORKSPACE_RELATIVE_HOME/client/$name\"" || fail
}
function test_add_repo_conflict {
local name="$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $ALICE $RED && fail
[ ! -e "$WORKSPACE_HOME/$name/$name" ] || fail
}
function test_remove_repo_forced {
local name="$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE remove $name force=yes
[ -e "$WORKSPACE_HOME/$name" ] && fail
do_ssh $RED "test -e \"$WORKSPACE_RELATIVE_HOME/$name\"" && fail
pass
}
function test_remove_destroy_namespace_if_empty {
local name="$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED client || fail
$WORKSPACE remove $ALICE force=yes || fail
[ -e "$WORKSPACE_HOME/client/$name" ] && fail
[ -e "$WORKSPACE_HOME/client" ] && fail
do_ssh $RED "test -e \"$WORKSPACE_RELATIVE_HOME/client/$name\"" && fail
do_ssh $RED "test -e \"$WORKSPACE_RELATIVE_HOME/client" && fail
pass
}
function test_remove_preserve_namespace_if_not_empty {
local name="$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED client || fail
$WORKSPACE add $BOB $RED client || fail
$WORKSPACE remove $ALICE force=yes || fail
[ -e "$WORKSPACE_HOME/client/$name" ] && fail
[ -e "$WORKSPACE_HOME/client" ] || fail
do_ssh $RED "test -e $WORKSPACE_RELATIVE_HOME/client/$name" && fail
do_ssh $RED "test -e $WORKSPACE_RELATIVE_HOME/client" || fail
pass
}
function test_shim_and_unshim_forced {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local local_hostname="$(hostname)"
local remote_hostname="$(do_ssh $RED hostname)"
[ "$local_hostname" != "$remote_hostname" ] || fail
eval "$($WORKSPACE init)"
$WORKSPACE shim hostname force=yes || fail
$WORKSPACE add $ALICE $RED || fail
[ "$(cd $HOME; hostname)" = "$local_hostname" ] || fail
[ "$(cd $alice_path; hostname)" = "$remote_hostname" ] || fail
$WORKSPACE unshim hostname || fail
[ "$(cd $HOME; hostname)" = "$local_hostname" ] || fail
[ "$(cd $alice_path; hostname)" = "$local_hostname" ] || fail
}
function test_down_by_name {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local bob_path="$WORKSPACE_HOME/$(git_basename $BOB)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $BOB $RED || fail
[ "$(ls -A $alice_path)" != "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
$WORKSPACE down "$(git_basename $ALICE)"
[ "$(ls -A $alice_path)" = "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
}
function test_down_by_repository {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local bob_path="$WORKSPACE_HOME/$(git_basename $BOB)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $BOB $RED || fail
[ "$(ls -A $alice_path)" != "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
$WORKSPACE down "$ALICE"
[ "$(ls -A $alice_path)" = "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
}
function test_down_by_host {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local bob_path="$WORKSPACE_HOME/$(git_basename $BOB)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $BOB $BLUE || fail
[ "$(ls -A $alice_path)" != "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
$WORKSPACE down @"$RED"
[ "$(ls -A $alice_path)" = "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
}
function test_down_by_host_wildcard {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local bob_path="$WORKSPACE_HOME/$(git_basename $BOB)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $BOB $BLUE || fail
[ "$(ls -A $alice_path)" != "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
$WORKSPACE down @"$RED_WILDCARD"
[ "$(ls -A $alice_path)" = "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
}
function test_down_by_name_wildcard {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local bob_path="$WORKSPACE_HOME/$(git_basename $BOB)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $BOB $RED || fail
[ "$(ls -A $alice_path)" != "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
$WORKSPACE down "$ALICE_WILDCARD"
[ "$(ls -A $alice_path)" = "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
}
function test_down_idempotent {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE down $ALICE || fail
$WORKSPACE down $ALICE || fail
}
function test_up {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE down $ALICE || fail
$WORKSPACE up $ALICE || fail
[ "$(ls -A $alice_path)" != "" ] || fail
}
function test_up_idempotent {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE up $ALICE || fail
$WORKSPACE up $ALICE || fail
}
function test_restore {
local alice_path="$WORKSPACE_HOME/$(git_basename $ALICE)"
local bob_path="$WORKSPACE_HOME/$(git_basename $BOB)"
$WORKSPACE add $ALICE $RED || fail
$WORKSPACE add $BOB $RED || fail
unmount_remote "$alice_path" || fail
$WORKSPACE restore || fail
[ "$(ls -A $alice_path)" != "" ] || fail
[ "$(ls -A $bob_path)" != "" ] || fail
}
function test_info {
pending
}
function test_list {
pending
}
function test_list_with_format {
pending
}