Handle freezing tests. Fixes #10752.

pull/11087/head
Jussi Pakkanen 2 years ago
parent e5ce7f0770
commit 3ae89a7150
  1. 6
      mesonbuild/mtest.py
  2. 21
      test cases/unit/109 freeze/freeze.c
  3. 4
      test cases/unit/109 freeze/meson.build
  4. 8
      unittests/linuxliketests.py

@ -1265,14 +1265,14 @@ class TestSubprocess:
# Make sure the termination signal actually kills the process
# group, otherwise retry with a SIGKILL.
with suppress(TimeoutError):
with suppress(asyncio.TimeoutError):
await asyncio.wait_for(p.wait(), timeout=0.5)
if p.returncode is not None:
return None
os.killpg(p.pid, signal.SIGKILL)
with suppress(TimeoutError):
with suppress(asyncio.TimeoutError):
await asyncio.wait_for(p.wait(), timeout=1)
if p.returncode is not None:
return None
@ -1281,7 +1281,7 @@ class TestSubprocess:
# Try to kill it one last time with a direct call.
# If the process has spawned children, they will remain around.
p.kill()
with suppress(TimeoutError):
with suppress(asyncio.TimeoutError):
await asyncio.wait_for(p.wait(), timeout=1)
if p.returncode is not None:
return None

@ -0,0 +1,21 @@
#include<stdio.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
static void do_nothing(int signo, siginfo_t *info, void *context) {
}
int main(int argc, char **argv) {
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sa.sa_sigaction = do_nothing;
if (sigaction(SIGTERM, &sa, NULL) == -1) {
printf("Could not set up signal handler.\n");
return 1;
}
printf("Freezing forever.\n");
while(1) {
}
return 0;
}

@ -0,0 +1,4 @@
project('freeze', 'c')
e = executable('freeze', 'freeze.c')
test('freeze', e, timeout: 1)

@ -1820,3 +1820,11 @@ class LinuxlikeTests(BasePlatformTests):
default_symlinks.append(symlink)
os.symlink(default_dirs[i], symlink)
self.assertFalse(cpp.compiler_args([f'-isystem{symlink}' for symlink in default_symlinks]).to_native())
def test_freezing(self):
testdir = os.path.join(self.unit_test_dir, '109 freeze')
self.init(testdir)
self.build()
with self.assertRaises(subprocess.CalledProcessError) as e:
self.run_tests()
self.assertNotIn('Traceback', e.exception.output)

Loading…
Cancel
Save