v / cmd / tools / vretry_test.v
63 lines · 55 sloc · 1.57 KB · 319eb83525cbfaf18a8518fbe06279c1b6751f1f
Raw
1// This test uses the script cmd/tools/check_retry.vsh
2import os
3import log
4
5const vexe = @VEXE
6const vroot = os.dir(vexe)
7
8const is_ci = os.getenv('CI') != ''
9
10fn dump_on_ci[T](x T) {
11 if is_ci {
12 dump(x)
13 }
14}
15
16fn run(cmd string) os.Result {
17 log.info('>>> running cmd: ${cmd}')
18 defer {
19 log.info('>>> finished cmd: ${cmd}')
20 }
21 return os.execute(cmd)
22}
23
24fn test_retry() {
25 log.use_stdout()
26 log.warn('start...')
27 defer {
28 log.warn('... done')
29 }
30 tpath := os.join_path(os.vtmp_dir(), 'vretry_test')
31 os.rmdir_all(tpath) or {}
32 os.mkdir_all(tpath)!
33 defer {
34 os.rmdir_all(tpath) or {}
35 }
36 os.chdir(vroot)!
37 fail_cmd := '${vexe} run cmd/tools/check_retry.vsh too many arguments'
38 if is_ci {
39 // Skip longer running test on local runs.
40 res := run('${vexe} retry ${fail_cmd}')
41 assert res.exit_code != 0
42 assert res.output.contains('error: exceeded maximum number of retries')
43 }
44
45 mut res := run('${vexe} retry -d 0.2 -r 3 ${fail_cmd}')
46 dump_on_ci(res)
47 assert res.exit_code != 0
48 assert res.output.contains('error: exceeded maximum number of retries (3)!')
49
50 pass_cmd := '${vexe} run cmd/tools/check_retry.vsh'
51 res = run('${vexe} retry ${pass_cmd}')
52 dump_on_ci(res)
53 assert res.exit_code == 0
54 assert res.output == run(pass_cmd).output
55
56 // Include flags on the cmd as well.
57 pass_cmd_with_flags := '${vexe} run cmd/tools/check_retry.vsh --list -x -- -b js arguments'
58 res = run('${vexe} retry -r 3 -- ${pass_cmd_with_flags}')
59 dump_on_ci(res)
60 assert res.exit_code == 0
61 output_trimmed := res.output.trim_space()
62 assert output_trimmed == "['--list', '-x', '--', '-b', 'js', 'arguments']"
63}
64