UNPKG

9.38 kBapplication/x-shView Raw
1#!/bin/bash
2#
3# Unit test for the Storer interface.
4# Uses its command-line interface.
5
6DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
7
8TMPDIR=$(mktemp -d -u)
9echo -e "Working directory: \e[1;34m$TMPDIR\e[0m"
10
11DIFF="diff"
12BINARY="node lib/storer.js --verbose --storer_debug --storer_lockfile=$TMPDIR/lock"
13
14
15echo -n 'Does not start if the lock is acquired: '
16mkdir $TMPDIR
17touch $TMPDIR/lock
18echo | $BINARY >/dev/null 2>$TMPDIR/output.txt
19if ! grep EEXIST $TMPDIR/output.txt >/dev/null ; then
20 echo -e '\e[1;31mFAIL\e[0m'
21 exit 1
22fi
23echo -e '\e[1;32mOK\e[0m'
24rm -rf $TMPDIR
25
26
27echo -n 'Uses the lockfile: '
28mkdir $TMPDIR
29mkdir $TMPDIR-writable
30chmod -w $TMPDIR
31echo | $BINARY >/dev/null 2>$TMPDIR-writable/output.txt
32if ! grep EACCES $TMPDIR-writable/output.txt >/dev/null ; then
33 echo -e '\e[1;31mFAIL\e[0m'
34 exit 1
35fi
36echo -e '\e[1;32mOK\e[0m'
37rm -rf $TMPDIR-writable
38rm -rf $TMPDIR
39
40
41echo -n 'Responds with INVALID_JSON: '
42mkdir $TMPDIR
43cat >$TMPDIR/input.txt <<EOF
44This is not a valid JSON.
45EOF
46cat $TMPDIR/input.txt | $BINARY > $TMPDIR/output.txt
47if ! grep INVALID_JSON $TMPDIR/output.txt >/dev/null ; then
48 echo -e '\e[1;31mFAIL\e[0m'
49 exit 1
50fi
51echo -e '\e[1;32mOK\e[0m'
52rm -rf $TMPDIR
53
54
55echo -n 'Responds with NEED_V_FIELD: '
56mkdir $TMPDIR
57cat >$TMPDIR/input.txt <<EOF
58{"foo": "bar"}
59EOF
60cat $TMPDIR/input.txt | $BINARY > $TMPDIR/output.txt
61if ! grep NEED_V_FIELD $TMPDIR/output.txt >/dev/null ; then
62 echo -e '\e[1;31mFAIL\e[0m'
63 exit 1
64fi
65echo -e '\e[1;32mOK\e[0m'
66rm -rf $TMPDIR
67
68
69echo -n 'Responds with NEED_MS_FIELD: '
70mkdir $TMPDIR
71cat >$TMPDIR/input.txt <<EOF
72{"v":"0.9.0","foo": "bar"}
73EOF
74cat $TMPDIR/input.txt | $BINARY > $TMPDIR/output.txt
75if ! grep NEED_MS_FIELD $TMPDIR/output.txt >/dev/null ; then
76 echo -e '\e[1;31mFAIL\e[0m'
77 exit 1
78fi
79echo -e '\e[1;32mOK\e[0m'
80rm -rf $TMPDIR
81
82
83echo -n 'Responds with LARGE_TIME_DISCREPANCY: '
84mkdir $TMPDIR
85cat >$TMPDIR/input.txt <<EOF
86{"v":"0.9.0","ms":0}
87EOF
88cat $TMPDIR/input.txt | $BINARY > $TMPDIR/output.txt
89if ! grep LARGE_TIME_DISCREPANCY $TMPDIR/output.txt >/dev/null ; then
90 echo -e '\e[1;31mFAIL\e[0m'
91 exit 1
92fi
93echo -e '\e[1;32mOK\e[0m'
94rm -rf $TMPDIR
95
96
97echo -n 'Responds with VERSION_OUT_OF_BOUNDS: '
98mkdir $TMPDIR
99cat >$TMPDIR/input.txt <<EOF
100{"v":"0.9.0","ms":0}
101EOF
102cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 > $TMPDIR/output.txt
103if ! grep VERSION_OUT_OF_BOUNDS $TMPDIR/output.txt >/dev/null ; then
104 echo -e '\e[1;31mFAIL\e[0m'
105 exit 1
106fi
107echo -e '\e[1;32mOK\e[0m'
108rm -rf $TMPDIR
109
110
111echo -n 'Writes an entry: '
112mkdir $TMPDIR
113cat >$TMPDIR/input.txt <<EOF
114{"v":"0.9.0","ms":0}
115EOF
116cat >$TMPDIR/golden.txt <<EOF
117{"v":"0.9.0","ms":0}
118EOF
119cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" > $TMPDIR/output.txt
120if [ $(ls $TMPDIR/destination/* | wc -l) != 1 ] ; then
121 echo -e '\e[1;31mFAIL\e[0m'
122 exit 1
123fi
124if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
125 echo -e '\e[1;31mFAIL\e[0m'
126 exit 1
127fi
128echo -e '\e[1;32mOK\e[0m'
129rm -rf $TMPDIR
130
131
132echo -n 'Fails if intermediate directory can not be written into: '
133mkdir $TMPDIR
134mkdir $TMPDIR/intermediate
135chmod -w $TMPDIR/intermediate
136cat >$TMPDIR/input.txt <<EOF
137{"v":"0.9.0","ms":0}
138EOF
139cat >$TMPDIR/golden.txt <<EOF
140{"v":"0.9.0","ms":0}
141EOF
142cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" >/dev/null 2> $TMPDIR/output.txt
143if ! grep EACCES $TMPDIR/output.txt >/dev/null ; then
144 echo -e '\e[1;31mFAIL\e[0m'
145 exit 1
146fi
147echo -e '\e[1;32mOK\e[0m'
148rm -rf $TMPDIR
149
150
151echo -n 'Uses overridden intermediate directory: '
152mkdir $TMPDIR
153mkdir $TMPDIR/intermediate
154chmod -w $TMPDIR/intermediate
155cat >$TMPDIR/input.txt <<EOF
156{"v":"0.9.0","ms":0}
157EOF
158cat >$TMPDIR/golden.txt <<EOF
159{"v":"0.9.0","ms":0}
160EOF
161cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" --storer_intermediate_dir=$TMPDIR/intermediate2 > $TMPDIR/output.txt
162if [ $(ls $TMPDIR/destination/* | wc -l) != 1 ] ; then
163 echo -e '\e[1;31mFAIL\e[0m'
164 exit 1
165fi
166if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
167 echo -e '\e[1;31mFAIL\e[0m'
168 exit 1
169fi
170echo -e '\e[1;32mOK\e[0m'
171rm -rf $TMPDIR
172
173
174echo -n 'Fails if destination directory can not be written into: '
175mkdir $TMPDIR
176mkdir $TMPDIR/destination
177chmod -w $TMPDIR/destination
178cat >$TMPDIR/input.txt <<EOF
179{"v":"0.9.0","ms":0}
180EOF
181cat >$TMPDIR/golden.txt <<EOF
182{"v":"0.9.0","ms":0}
183EOF
184cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" >/dev/null 2> $TMPDIR/output.txt
185if ! grep EACCES $TMPDIR/output.txt >/dev/null ; then
186 echo -e '\e[1;31mFAIL\e[0m'
187 exit 1
188fi
189echo -e '\e[1;32mOK\e[0m'
190rm -rf $TMPDIR
191
192
193echo -n 'Uses overridden destination directory: '
194mkdir $TMPDIR
195mkdir $TMPDIR/destination
196chmod -w $TMPDIR/destination
197cat >$TMPDIR/input.txt <<EOF
198{"v":"0.9.0","ms":0}
199EOF
200cat >$TMPDIR/golden.txt <<EOF
201{"v":"0.9.0","ms":0}
202EOF
203cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" --storer_destination_dir=$TMPDIR/destination2 > $TMPDIR/output.txt
204if [ $(ls $TMPDIR/destination2/* | wc -l) != 1 ] ; then
205 echo -e '\e[1;31mFAIL\e[0m'
206 exit 1
207fi
208if ! cat $TMPDIR/destination2/* | sort | $DIFF - $TMPDIR/golden.txt ; then
209 echo -e '\e[1;31mFAIL\e[0m'
210 exit 1
211fi
212echo -e '\e[1;32mOK\e[0m'
213rm -rf $TMPDIR
214
215
216echo -n 'Discards entries because of version: '
217mkdir $TMPDIR
218cat >$TMPDIR/input.txt <<EOF
219{"v":"0.9.0","ms":0,"data":"foo"}
220{"v":"0.1.0","ms":0,"data":"blah"}
221{"v":"0.9.1","ms":0,"data":"bar"}
222{"v":"0.1.1","ms":0,"data":"buzz"}
223EOF
224cat >$TMPDIR/golden.txt <<EOF
225{"v":"0.9.0","ms":0,"data":"foo"}
226{"v":"0.9.1","ms":0,"data":"bar"}
227EOF
228cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" > $TMPDIR/output.txt
229if [ $(ls $TMPDIR/destination/* | wc -l) != 1 ] ; then
230 echo -e '\e[1;31mFAIL\e[0m'
231 exit 1
232fi
233if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
234 echo -e '\e[1;31mFAIL\e[0m'
235 exit 1
236fi
237echo -e '\e[1;32mOK\e[0m'
238rm -rf $TMPDIR
239
240
241echo -n 'Explicitly flushes: '
242mkdir $TMPDIR
243cat >$TMPDIR/input.txt <<EOF
244{"v":"0.9.0","ms":0,"data":"foo"}
245FLUSH
246{"v":"0.9.1","ms":0,"data":"bar"}
247EOF
248cat >$TMPDIR/golden.txt <<EOF
249{"v":"0.9.0","ms":0,"data":"foo"}
250{"v":"0.9.1","ms":0,"data":"bar"}
251EOF
252cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" > $TMPDIR/output.txt
253if [ $(ls $TMPDIR/destination/* | wc -l) != 2 ] ; then
254 echo -e '\e[1;31mFAIL\e[0m'
255 exit 1
256fi
257if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
258 echo -e '\e[1;31mFAIL\e[0m'
259 exit 1
260fi
261echo -e '\e[1;32mOK\e[0m'
262rm -rf $TMPDIR
263
264echo -n 'Implicitly flushes by maximum number of entires per file: '
265mkdir $TMPDIR
266cat >$TMPDIR/input.txt <<EOF
267{"v":"0.9.0","ms":0,"data":"foo1"}
268{"v":"0.9.1","ms":0,"data":"bar1"}
269{"v":"0.9.0","ms":0,"data":"foo2"}
270{"v":"0.9.1","ms":0,"data":"bar2"}
271EOF
272cat >$TMPDIR/golden.txt <<EOF
273{"v":"0.9.0","ms":0,"data":"foo1"}
274{"v":"0.9.0","ms":0,"data":"foo2"}
275{"v":"0.9.1","ms":0,"data":"bar1"}
276{"v":"0.9.1","ms":0,"data":"bar2"}
277EOF
278cat $TMPDIR/input.txt | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" --storer_max_entries_per_file=2 > $TMPDIR/output.txt
279if [ $(ls $TMPDIR/destination/* | wc -l) != 2 ] ; then
280 echo -e '\e[1;31mFAIL\e[0m'
281 exit 1
282fi
283if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
284 echo -e '\e[1;31mFAIL\e[0m'
285 exit 1
286fi
287echo -e '\e[1;32mOK\e[0m'
288rm -rf $TMPDIR
289
290
291echo -n 'Replays pre-existing intermediate files on startup: '
292mkdir $TMPDIR
293mkdir $TMPDIR/intermediate
294cat >$TMPDIR/intermediate/foo.txt <<EOF
295{"data":"foo1","ms":10001}
296{"data":"foo3","ms":10002}
297{"data":"foo2","ms":10003}
298EOF
299cat >$TMPDIR/intermediate/bar.txt <<EOF
300{"data":"bar1","ms":20001}
301{"data":"bar3","ms":20002}
302{"data":"bar2","ms":20003}
303EOF
304cat >$TMPDIR/golden.txt <<EOF
305{"data":"bar1","ms":20001}
306{"data":"bar2","ms":20003}
307{"data":"bar3","ms":20002}
308{"data":"foo1","ms":10001}
309{"data":"foo2","ms":10003}
310{"data":"foo3","ms":10002}
311EOF
312echo | $BINARY > $TMPDIR/output.txt
313if [ $(ls $TMPDIR/destination/* | wc -l) != 2 ] ; then
314 echo -e '\e[1;31mFAIL\e[0m'
315 exit 1
316fi
317if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
318 echo -e '\e[1;31mFAIL\e[0m'
319 exit 1
320fi
321echo -e '\e[1;32mOK\e[0m'
322rm -rf $TMPDIR
323
324
325echo -n 'Implicitly flushes because of the timeout (flaky, uses sleep): '
326mkdir $TMPDIR
327cat >$TMPDIR/i1.txt <<EOF
328{"v":"0.9.0","ms":0,"data":"foo"}
329EOF
330cat >$TMPDIR/i2.txt <<EOF
331{"v":"0.9.1","ms":0,"data":"bar"}
332EOF
333cat >$TMPDIR/golden.txt <<EOF
334{"v":"0.9.0","ms":0,"data":"foo"}
335{"v":"0.9.1","ms":0,"data":"bar"}
336EOF
337(cat $TMPDIR/i1.txt ; sleep 1 ; cat $TMPDIR/i2.txt) | $BINARY --storer_max_time_discrepancy_ms=1e15 --storer_version_requirements=">=0.8.0" --storer_max_file_age_ms=200 > $TMPDIR/output.txt
338if [ $(ls $TMPDIR/destination/* | wc -l) != 2 ] ; then
339 echo -e '\e[1;31mFAIL\e[0m'
340 exit 1
341fi
342if ! cat $TMPDIR/destination/* | sort | $DIFF - $TMPDIR/golden.txt ; then
343 echo -e '\e[1;31mFAIL\e[0m'
344 exit 1
345fi
346echo -e '\e[1;32mOK\e[0m'
347rm -rf $TMPDIR
348
349
350echo -e '\e[1;32mPASS\e[0m'
351exit 0