![]() The way gingko handles interrupts is: - It starts running AfterSuite hooks in a separate goroutine (this includes cleanupAction hooks) - Once AfterSuite hook is done executing it calls os.Exit(1) on test suite. So how cleanupFunc() that runs via defer in test can be interrupted is: - cleanupFunc starts running via defer (or AfterEach hook) but first thing that function does is to remove cleanupHandle from framework.RemoveCleanupAction. - Test suite receives interrupt from user and AfterSuite block starts executing - remember that while cleanupFunc is running in goroutine#1, AfterSuite is running concurrently in goroutine#2. - AfterSuite hook has bunch of CleanupActions it needs to run which were registered via framework.AddCleanupAction(cleanupFunc) but once cleanupFunc starts executing via defer in the test, it will remove the cleanupHandle from framework's aftersuite hooks. - So if AfterSuite did not had anything to run (because those actions were removed via framework.RemoveCleanupAction then it will simply go to the last framework.AfterEach action and call os.Exit(1) - So if os.Exit(1) is called before cleanupFunc has a chance to finish in defer, it will not complete. |
||
---|---|---|
.. | ||
cmd | ||
conformance | ||
e2e | ||
e2e_kubeadm | ||
e2e_node | ||
fixtures | ||
fuzz | ||
images | ||
instrumentation | ||
integration | ||
kubemark | ||
list | ||
soak/serve_hostnames | ||
typecheck | ||
utils | ||
BUILD | ||
OWNERS |