Skip to content

Commit dc25675

Browse files
committed
Improve callLocal tests.
1 parent afcf725 commit dc25675

File tree

1 file changed

+36
-3
lines changed
  • src/Control/Distributed/Process/Tests

1 file changed

+36
-3
lines changed

src/Control/Distributed/Process/Tests/CH.hs

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Data.IORef
1414
, writeIORef
1515
, newIORef
1616
)
17-
import Control.Concurrent (forkIO, threadDelay, myThreadId, throwTo, ThreadId)
17+
import Control.Concurrent (forkIO, threadDelay, myThreadId, throwTo, ThreadId, yield)
1818
import Control.Concurrent.MVar
1919
( MVar
2020
, newEmptyMVar
@@ -1397,12 +1397,11 @@ testCallLocal TestTransport{..} = do
13971397
send keeper caller
13981398
onException
13991399
(callLocal $ do
1400-
onException (do send keeper ()
1400+
onException (do send keeper caller
14011401
expect)
14021402
(do liftIO $ writeIORef ibox True))
14031403
(send keeper ())
14041404
caller <- expect
1405-
() <- expect
14061405
exit caller "test"
14071406
() <- expect
14081407
return ()
@@ -1417,6 +1416,40 @@ testCallLocal TestTransport{..} = do
14171416
True <- readIORef ibox
14181417
return ()
14191418

1419+
-- Test that caller waits for the worker in correct situation
1420+
ibox3 <- newIORef False
1421+
result3 <- newEmptyMVar
1422+
runProcess node $ do
1423+
keeper <- getSelfPid
1424+
spawnLocal $ do
1425+
callLocal $
1426+
(do us <- getSelfPid
1427+
send keeper us
1428+
() <- expect
1429+
liftIO yield)
1430+
`finally` (liftIO $ writeIORef ibox3 True)
1431+
liftIO $ putMVar result3 =<< readIORef ibox3
1432+
worker <- expect
1433+
send worker ()
1434+
True <- takeMVar result3
1435+
return ()
1436+
1437+
-- Test that caller waits for the worker in case when caller gets an exception
1438+
ibox4 <- newIORef False
1439+
result4 <- newEmptyMVar
1440+
runProcess node $ do
1441+
keeper <- getSelfPid
1442+
spawnLocal $ do
1443+
caller <- getSelfPid
1444+
callLocal
1445+
((do send keeper caller
1446+
expect)
1447+
`finally` (liftIO $ writeIORef ibox4 True))
1448+
`finally` (liftIO $ putMVar result4 =<< readIORef ibox4)
1449+
caller <- expect
1450+
exit caller "hi!"
1451+
True <- takeMVar result4
1452+
return ()
14201453
-- XXX: Testing that when mask_ $ callLocal p runs p in masked state.
14211454

14221455

0 commit comments

Comments
 (0)