| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| #!/usr/bin/env python | ||
|
|
||
| import sys | ||
| import time | ||
|
|
||
| if len(sys.argv) != 2: | ||
| raise ValueError("unexpected number of args") | ||
|
|
||
| if sys.argv[1] == "--gtest_list_tests": | ||
| print("""\ | ||
| FirstTest. | ||
| subTestA | ||
| subTestB | ||
| subTestC | ||
| """) | ||
| sys.exit(0) | ||
| elif not sys.argv[1].startswith("--gtest_filter="): | ||
| raise ValueError("unexpected argument: %r" % (sys.argv[1])) | ||
|
|
||
| test_name = sys.argv[1].split('=',1)[1] | ||
| if test_name == 'FirstTest.subTestA': | ||
| print('I am subTest A, I PASS') | ||
| print('[ PASSED ] 1 test.') | ||
| sys.exit(0) | ||
| elif test_name == 'FirstTest.subTestB': | ||
| print('I am subTest B, I am slow') | ||
| time.sleep(6) | ||
| print('[ PASSED ] 1 test.') | ||
| sys.exit(0) | ||
| elif test_name == 'FirstTest.subTestC': | ||
| print('I am subTest C, I will hang') | ||
| while True: | ||
| pass | ||
| else: | ||
| raise SystemExit("error: invalid test name: %r" % (test_name,)) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| import lit.formats | ||
| config.name = 'googletest-timeout' | ||
| config.test_format = lit.formats.GoogleTest('DummySubDir', 'Test') | ||
|
|
||
| configSetTimeout = lit_config.params.get('set_timeout', '0') | ||
|
|
||
| if configSetTimeout == '1': | ||
| # Try setting the max individual test time in the configuration | ||
| lit_config.maxIndividualTestTime = 1 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| # RUN: %{python} %s | ||
| from __future__ import print_function | ||
|
|
||
| import time | ||
| import sys | ||
|
|
||
| print("Running infinite loop") | ||
| sys.stdout.flush() # Make sure the print gets flushed so it appears in lit output. | ||
| while True: | ||
| pass |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| # -*- Python -*- | ||
| import os | ||
| import sys | ||
|
|
||
| import lit.formats | ||
|
|
||
| config.name = 'per_test_timeout' | ||
|
|
||
| shellType = lit_config.params.get('external', '1') | ||
|
|
||
| if shellType == '0': | ||
| lit_config.note('Using internal shell') | ||
| externalShell = False | ||
| else: | ||
| lit_config.note('Using external shell') | ||
| externalShell = True | ||
|
|
||
| configSetTimeout = lit_config.params.get('set_timeout', '0') | ||
|
|
||
| if configSetTimeout == '1': | ||
| # Try setting the max individual test time in the configuration | ||
| lit_config.maxIndividualTestTime = 1 | ||
|
|
||
| config.test_format = lit.formats.ShTest(execute_external=externalShell) | ||
| config.suffixes = ['.py'] | ||
|
|
||
| config.test_source_root = os.path.dirname(__file__) | ||
| config.test_exec_root = config.test_source_root | ||
| config.target_triple = '(unused)' | ||
| src_root = os.path.join(config.test_source_root, '..') | ||
| config.environment['PYTHONPATH'] = src_root | ||
| config.substitutions.append(('%{python}', sys.executable)) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # RUN: %{python} %s quick | ||
| # RUN: %{python} %s slow | ||
| from __future__ import print_function | ||
|
|
||
| import time | ||
| import sys | ||
|
|
||
| if len(sys.argv) != 2: | ||
| print("Wrong number of args") | ||
| sys.exit(1) | ||
|
|
||
| mode = sys.argv[1] | ||
|
|
||
| if mode == 'slow': | ||
| print("Running in slow mode") | ||
| sys.stdout.flush() # Make sure the print gets flushed so it appears in lit output. | ||
| time.sleep(6) | ||
| sys.exit(0) | ||
| elif mode == 'quick': | ||
| print("Running in quick mode") | ||
| sys.exit(0) | ||
| else: | ||
| print("Unrecognised mode {}".format(mode)) | ||
| sys.exit(1) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| # RUN: %{python} %s | ||
| from __future__ import print_function | ||
|
|
||
| import sys | ||
|
|
||
| print("short program") |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| # RUN: %{python} %s | ||
| from __future__ import print_function | ||
|
|
||
| import time | ||
| import sys | ||
|
|
||
| print("Running slow program") | ||
| sys.stdout.flush() # Make sure the print gets flushed so it appears in lit output. | ||
| time.sleep(6) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # REQUIRES: python-psutil | ||
|
|
||
| # Check that the per test timeout is enforced when running GTest tests. | ||
| # | ||
| # RUN: not %{lit} -j 1 -v %{inputs}/googletest-timeout --timeout=1 > %t.cmd.out | ||
| # RUN: FileCheck < %t.cmd.out %s | ||
|
|
||
| # Check that the per test timeout is enforced when running GTest tests via | ||
| # the configuration file | ||
| # | ||
| # RUN: not %{lit} -j 1 -v %{inputs}/googletest-timeout \ | ||
| # RUN: --param set_timeout=1 > %t.cfgset.out 2> %t.cfgset.err | ||
| # RUN: FileCheck < %t.cfgset.out %s | ||
|
|
||
| # CHECK: -- Testing: | ||
| # CHECK: PASS: googletest-timeout :: DummySubDir/OneTest/FirstTest.subTestA | ||
| # CHECK: TIMEOUT: googletest-timeout :: DummySubDir/OneTest/FirstTest.subTestB | ||
| # CHECK: TIMEOUT: googletest-timeout :: DummySubDir/OneTest/FirstTest.subTestC | ||
| # CHECK: Expected Passes : 1 | ||
| # CHECK: Individual Timeouts: 2 | ||
|
|
||
| # Test per test timeout via a config file and on the command line. | ||
| # The value set on the command line should override the config file. | ||
| # RUN: not %{lit} -j 1 -v %{inputs}/googletest-timeout \ | ||
| # RUN: --param set_timeout=1 --timeout=2 > %t.cmdover.out 2> %t.cmdover.err | ||
| # RUN: FileCheck < %t.cmdover.out %s | ||
| # RUN: FileCheck --check-prefix=CHECK-CMDLINE-OVERRIDE-ERR < %t.cmdover.err %s | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-ERR: Forcing timeout to be 2 seconds |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,116 @@ | ||
| # REQUIRES: python-psutil | ||
|
|
||
| # Test per test timeout using external shell | ||
| # RUN: not %{lit} \ | ||
| # RUN: %{inputs}/shtest-timeout/infinite_loop.py \ | ||
| # RUN: %{inputs}/shtest-timeout/quick_then_slow.py \ | ||
| # RUN: %{inputs}/shtest-timeout/short.py \ | ||
| # RUN: %{inputs}/shtest-timeout/slow.py \ | ||
| # RUN: -j 1 -v --debug --timeout 1 --param external=1 > %t.extsh.out 2> %t.extsh.err | ||
| # RUN: FileCheck --check-prefix=CHECK-OUT-COMMON < %t.extsh.out %s | ||
| # RUN: FileCheck --check-prefix=CHECK-EXTSH-ERR < %t.extsh.err %s | ||
| # | ||
| # CHECK-EXTSH-ERR: Using external shell | ||
|
|
||
| # Test per test timeout using internal shell | ||
| # RUN: not %{lit} \ | ||
| # RUN: %{inputs}/shtest-timeout/infinite_loop.py \ | ||
| # RUN: %{inputs}/shtest-timeout/quick_then_slow.py \ | ||
| # RUN: %{inputs}/shtest-timeout/short.py \ | ||
| # RUN: %{inputs}/shtest-timeout/slow.py \ | ||
| # RUN: -j 1 -v --debug --timeout 1 --param external=0 > %t.intsh.out 2> %t.intsh.err | ||
| # RUN: FileCheck --check-prefix=CHECK-OUT-COMMON < %t.intsh.out %s | ||
| # RUN: FileCheck --check-prefix=CHECK-INTSH-OUT < %t.intsh.out %s | ||
| # RUN: FileCheck --check-prefix=CHECK-INTSH-ERR < %t.intsh.err %s | ||
| # | ||
| # CHECK-INTSH-OUT: TIMEOUT: per_test_timeout :: infinite_loop.py | ||
| # CHECK-INTSH-OUT: Command 0 Reached Timeout: True | ||
| # CHECK-INTSH-OUT: Command 0 Output: | ||
| # CHECK-INTSH-OUT-NEXT: Running infinite loop | ||
|
|
||
|
|
||
| # CHECK-INTSH-OUT: TIMEOUT: per_test_timeout :: quick_then_slow.py | ||
| # CHECK-INTSH-OUT: Timeout: Reached timeout of 1 seconds | ||
| # CHECK-INTSH-OUT: Command Output | ||
| # CHECK-INTSH-OUT: Command 0 Reached Timeout: False | ||
| # CHECK-INTSH-OUT: Command 0 Output: | ||
| # CHECK-INTSH-OUT-NEXT: Running in quick mode | ||
| # CHECK-INTSH-OUT: Command 1 Reached Timeout: True | ||
| # CHECK-INTSH-OUT: Command 1 Output: | ||
| # CHECK-INTSH-OUT-NEXT: Running in slow mode | ||
|
|
||
| # CHECK-INTSH-OUT: TIMEOUT: per_test_timeout :: slow.py | ||
| # CHECK-INTSH-OUT: Command 0 Reached Timeout: True | ||
| # CHECK-INTSH-OUT: Command 0 Output: | ||
| # CHECK-INTSH-OUT-NEXT: Running slow program | ||
|
|
||
| # CHECK-INTSH-ERR: Using internal shell | ||
|
|
||
| # Test per test timeout set via a config file rather than on the command line | ||
| # RUN: not %{lit} \ | ||
| # RUN: %{inputs}/shtest-timeout/infinite_loop.py \ | ||
| # RUN: %{inputs}/shtest-timeout/quick_then_slow.py \ | ||
| # RUN: %{inputs}/shtest-timeout/short.py \ | ||
| # RUN: %{inputs}/shtest-timeout/slow.py \ | ||
| # RUN: -j 1 -v --debug --param external=0 \ | ||
| # RUN: --param set_timeout=1 > %t.cfgset.out 2> %t.cfgset.err | ||
| # RUN: FileCheck --check-prefix=CHECK-OUT-COMMON < %t.cfgset.out %s | ||
| # RUN: FileCheck --check-prefix=CHECK-CFGSET-ERR < %t.cfgset.err %s | ||
| # | ||
| # CHECK-CFGSET-ERR: Using internal shell | ||
|
|
||
| # CHECK-OUT-COMMON: TIMEOUT: per_test_timeout :: infinite_loop.py | ||
| # CHECK-OUT-COMMON: Timeout: Reached timeout of 1 seconds | ||
| # CHECK-OUT-COMMON: Command {{([0-9]+ )?}}Output | ||
| # CHECK-OUT-COMMON: Running infinite loop | ||
|
|
||
| # CHECK-OUT-COMMON: TIMEOUT: per_test_timeout :: quick_then_slow.py | ||
| # CHECK-OUT-COMMON: Timeout: Reached timeout of 1 seconds | ||
| # CHECK-OUT-COMMON: Command {{([0-9]+ )?}}Output | ||
| # CHECK-OUT-COMMON: Running in quick mode | ||
| # CHECK-OUT-COMMON: Running in slow mode | ||
|
|
||
| # CHECK-OUT-COMMON: PASS: per_test_timeout :: short.py | ||
|
|
||
| # CHECK-OUT-COMMON: TIMEOUT: per_test_timeout :: slow.py | ||
| # CHECK-OUT-COMMON: Timeout: Reached timeout of 1 seconds | ||
| # CHECK-OUT-COMMON: Command {{([0-9]+ )?}}Output | ||
| # CHECK-OUT-COMMON: Running slow program | ||
|
|
||
| # CHECK-OUT-COMMON: Expected Passes{{ *}}: 1 | ||
| # CHECK-OUT-COMMON: Individual Timeouts{{ *}}: 3 | ||
|
|
||
| # Test per test timeout via a config file and on the command line. | ||
| # The value set on the command line should override the config file. | ||
| # RUN: not %{lit} \ | ||
| # RUN: %{inputs}/shtest-timeout/infinite_loop.py \ | ||
| # RUN: %{inputs}/shtest-timeout/quick_then_slow.py \ | ||
| # RUN: %{inputs}/shtest-timeout/short.py \ | ||
| # RUN: %{inputs}/shtest-timeout/slow.py \ | ||
| # RUN: -j 1 -v --debug --param external=0 \ | ||
| # RUN: --param set_timeout=1 --timeout=2 > %t.cmdover.out 2> %t.cmdover.err | ||
| # RUN: FileCheck --check-prefix=CHECK-CMDLINE-OVERRIDE-OUT < %t.cmdover.out %s | ||
| # RUN: FileCheck --check-prefix=CHECK-CMDLINE-OVERRIDE-ERR < %t.cmdover.err %s | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-ERR: Forcing timeout to be 2 seconds | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-OUT: TIMEOUT: per_test_timeout :: infinite_loop.py | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Timeout: Reached timeout of 2 seconds | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Command {{([0-9]+ )?}}Output | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Running infinite loop | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-OUT: TIMEOUT: per_test_timeout :: quick_then_slow.py | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Timeout: Reached timeout of 2 seconds | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Command {{([0-9]+ )?}}Output | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Running in quick mode | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Running in slow mode | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-OUT: PASS: per_test_timeout :: short.py | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-OUT: TIMEOUT: per_test_timeout :: slow.py | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Timeout: Reached timeout of 2 seconds | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Command {{([0-9]+ )?}}Output | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Running slow program | ||
|
|
||
| # CHECK-CMDLINE-OVERRIDE-OUT: Expected Passes{{ *}}: 1 | ||
| # CHECK-CMDLINE-OVERRIDE-OUT: Individual Timeouts{{ *}}: 3 |