diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/Main.hs b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/Main.hs index 8b9178a40eb3b5cd8f5c8461be83dda912d4f9c9..0d938d882a6d2c858feefac59b12997518a76747 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/Main.hs +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/Main.hs @@ -2,13 +2,21 @@ import Control.Concurrent (killThread, threadDelay, myThreadId) import Control.Exception (finally) import qualified System.Posix.Signals as Signal import System.Exit (exitFailure) +import qualified Data.Time.Clock as Time +import qualified Data.Time.Format as Time main = do + -- timestamped logging to aid with #8416 + let log msg = do + ts <- Time.getCurrentTime + let tsfmt = Time.formatTime Time.defaultTimeLocale "%H:%M:%S.%q" ts + putStrLn $ tsfmt <> " [exe ] " <> msg mainThreadId <- myThreadId Signal.installHandler Signal.sigTERM (Signal.Catch $ killThread mainThreadId) Nothing (do - putStrLn "about to sleep" + log "about to write file" writeFile "exe.run" "up and running" + log "about to sleep" threadDelay 10000000 -- 10s - putStrLn "done sleeping") - `finally` putStrLn "exiting" + log "done sleeping") + `finally` log "exiting" diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/RunKill.cabal b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/RunKill.cabal index dd13e1ecf740bb11127dbb0b165a5b32a73aef20..b30ec06b2cbc74b7f4990a20a50fc2fdda8914d7 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/RunKill.cabal +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/RunKill.cabal @@ -5,5 +5,5 @@ cabal-version: >= 1.10 executable exe default-language: Haskell2010 - build-depends: base, process, unix + build-depends: base, process, time, unix main-is: Main.hs diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/cabal.test.hs b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/cabal.test.hs index b0fcc2466dc50afe8ef7e05beeae59edb7b8e2eb..9d5c8f91242288aed817fa3af18fb916bddd6abb 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/cabal.test.hs +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/cabal.test.hs @@ -4,6 +4,8 @@ import Control.Concurrent (threadDelay) import System.Directory (removeFile) import Control.Exception (catch, throwIO) import System.IO.Error (isDoesNotExistError) +import qualified Data.Time.Clock as Time +import qualified Data.Time.Format as Time {- This test verifies that 'cabal run' terminates its @@ -18,16 +20,28 @@ main :: IO () main = cabalTest $ do skipIfWindows -- test project relies on Posix + -- timestamped logging to aid with #8416 + let logIO msg = do + ts <- Time.getCurrentTime + let tsfmt = Time.formatTime Time.defaultTimeLocale "%H:%M:%S.%q" ts + putStrLn $ tsfmt <> " [cabal.test] " <> msg + log = liftIO . logIO + dir <- fmap testCurrentDir getTestEnv let runFile = dir </> "exe.run" liftIO $ removeFile runFile `catchNoExist` return () + log "about to v2-build" cabal_raw_action ["v2-build", "exe"] (\_ -> return ()) + log "about to v2-run" r <- fails $ cabal_raw_action ["v2-run", "exe"] $ \cabalHandle -> do -- wait for "cabal run" to have started "exe" + logIO "about to wait for file" waitFile total runFile -- then kill "cabal run" + logIO "about to terminate cabal" Process.terminateProcess cabalHandle + log "v2-run done" -- "exe" should exit, and should have been interrupted before -- finishing its sleep