@@ -77,7 +77,6 @@ testSpawnTracing result = do
77 evSpawned <- liftIO $ newEmptyMVar
77 evSpawned <- liftIO $ newEmptyMVar
78 evDied <- liftIO $ newEmptyMVar
78 evDied <- liftIO $ newEmptyMVar
79 tracer <- startTracer $ \ev -> do
79 tracer <- startTracer $ \ev -> do
80− say "in spawn tracer..."
81 case ev of
80 case ev of
82 (TraceEvSpawned p) -> liftIO $ putMVar evSpawned p
81 (TraceEvSpawned p) -> liftIO $ putMVar evSpawned p
83 (TraceEvDied p r) -> liftIO $ putMVar evDied (p, r)
82 (TraceEvDied p r) -> liftIO $ putMVar evDied (p, r)
@@ -96,9 +95,7 @@ testSpawnTracing result = do
96 matchIf (\(ProcessMonitorNotification ref _ _) -> ref == mref)
95 matchIf (\(ProcessMonitorNotification ref _ _) -> ref == mref)
97 ((\_ -> return ()))
96 ((\_ -> return ()))
99− say "seen the death of tracer"
100 setTraceFlags defaultTraceFlags
98 setTraceFlags defaultTraceFlags
101− say "finishing setting default flags"
102 stash result (tracedAlive == pid &&
99 stash result (tracedAlive == pid &&
103 tracedDead == pid &&
100 tracedDead == pid &&
104 tracedReason == DiedNormal)
101 tracedReason == DiedNormal)
@@ -146,6 +143,79 @@ testTraceRecvNamedPid result = do
146 stash result (res' && (p == pid))
143 stash result (res' && (p == pid))
147 return ()
144 return ()
146+testTraceSending :: TestResult Bool -> Process ()
147+testTraceSending result = do
148+ pid <- spawnLocal $ (expect :: Process String) >> return ()
150+ res <- liftIO $ newEmptyMVar
151+ withFlags defaultTraceFlags { traceSend = traceOn } $ do
155+ (TraceEvSent to from _) ->
156+ stash res (to == pid && from == self)
159+ send pid "hello there"
160+ res' <- liftIO $ takeMVar res
163+testTraceRegistration :: TestResult Bool -> Process ()
164+testTraceRegistration result = do
166+ pid <- spawnLocal $ do
169+ register "foobar" self
173+ res <- liftIO $ newEmptyMVar
174+ withFlags defaultTraceFlags { traceRegistered = traceOn } $ do
178+ TraceEvRegistered p s ->
179+ stash res (p == pid && s == "foobar")
184+ () <- receiveChan rp
187+ match (\(ProcessMonitorNotification _ _ _) -> return ())
189+ res' <- liftIO $ takeMVar res
192+testTraceUnRegistration :: TestResult Bool -> Process ()
193+testTraceUnRegistration result = do
194+ pid <- spawnLocal $ do
199+ register "foobar" pid
200+ res <- liftIO $ newEmptyMVar
201+ withFlags defaultTraceFlags { traceUnregistered = traceOn } $ do
205+ TraceEvUnRegistered p n -> do
206+ stash res (p == pid && n == "foobar")
213+ matchIf (\(ProcessMonitorNotification mref' _ _) -> mref == mref')
216+ res' <- liftIO $ takeMVar res
149testTraceLayering :: TestResult () -> Process ()
219testTraceLayering :: TestResult () -> Process ()
150testTraceLayering result = do
220testTraceLayering result = do
151 pid <- spawnLocal $ do
221 pid <- spawnLocal $ do
@@ -154,8 +224,8 @@ testTraceLayering result = do
154 traceMessage ("traceMsg", 123 :: Int)
224 traceMessage ("traceMsg", 123 :: Int)
155 return ()
225 return ()
156 withFlags defaultTraceFlags {
226 withFlags defaultTraceFlags {
157− traceDied = traceOnly [pid]
227+ traceDied = traceOnly [pid]
158− , traceRecv = traceOnly ["foobar"]
228+ , traceRecv = traceOnly ["foobar"]
159 } $ doTest pid result
229 } $ doTest pid result
160 return ()
230 return ()
@@ -171,22 +241,22 @@ testTraceLayering result = do
172 recv <- liftIO $ newEmptyMVar
242 recv <- liftIO $ newEmptyMVar
173 ; withTracer
243 ; withTracer
174− (\ev' ->
244+ (\ev' ->
175− case ev' of
245+ case ev' of
176− TraceEvReceived _ _ -> liftIO $ putMVar recv ()
246+ TraceEvReceived _ _ -> liftIO $ putMVar recv ()
177− _ -> return ())
247+ _ -> return ())
179− user <- liftIO $ newEmptyMVar
249+ user <- liftIO $ newEmptyMVar
180− ; withTracer
250+ ; withTracer
181− (\ev'' ->
251+ (\ev'' ->
182− case ev'' of
252+ case ev'' of
183− TraceEvUser _ -> liftIO $ putMVar user ()
253+ TraceEvUser _ -> liftIO $ putMVar user ()
184− _ -> return ())
254+ _ -> return ())
185− (send pid () >> (liftIO $ takeMVar user))
255+ (send pid () >> (liftIO $ takeMVar user))
186− ; liftIO $ takeMVar recv
256+ ; liftIO $ takeMVar recv
188− ; liftIO $ takeMVar died
258+ ; liftIO $ takeMVar died
190 liftIO $ putMVar result' ()
260 liftIO $ putMVar result' ()
192tests :: LocalNode -> IO [Test]
262tests :: LocalNode -> IO [Test]
@@ -212,6 +282,18 @@ tests node1 = do
212 (delayedAssertion
282 (delayedAssertion
213 "expected a recv trace for the process registered as 'foobar'"
283 "expected a recv trace for the process registered as 'foobar'"
214 node1 True testTraceRecvNamedPid lock)
284 node1 True testTraceRecvNamedPid lock)
285+ , testCase "Trace Send(er)"
287+ "expected a 'send' trace with the requisite fields set"
288+ node1 True testTraceSending lock)
289+ , testCase "Trace Registration"
291+ "expected a 'registered' trace"
292+ node1 True testTraceRegistration lock)
293+ , testCase "Trace Unregistration"
295+ "expected an 'unregistered' trace"
296+ node1 True testTraceUnRegistration lock)
215 , testCase "Trace Layering"
297 , testCase "Trace Layering"
216 (delayedAssertion
298 (delayedAssertion
217 "expected blah"
299 "expected blah"