| 1 | // This test uses the script cmd/tools/check_retry.vsh |
| 2 | import os |
| 3 | import log |
| 4 | |
| 5 | const vexe = @VEXE |
| 6 | const vroot = os.dir(vexe) |
| 7 | |
| 8 | const is_ci = os.getenv('CI') != '' |
| 9 | |
| 10 | fn dump_on_ci[T](x T) { |
| 11 | if is_ci { |
| 12 | dump(x) |
| 13 | } |
| 14 | } |
| 15 | |
| 16 | fn 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 | |
| 24 | fn 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 | |