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