diff --git a/cardano-diffusion/changelog.d/20251007_150408_coot_net_sim_tracer.md b/cardano-diffusion/changelog.d/20251007_150408_coot_net_sim_tracer.md new file mode 100644 index 00000000000..b62c123ce17 --- /dev/null +++ b/cardano-diffusion/changelog.d/20251007_150408_coot_net_sim_tracer.md @@ -0,0 +1,10 @@ +### Breaking + +- `diffusionSimulation`: removed tracer argument, no longer polymorphic in + monad - using `IOSim` only. `diffusionSimulationM` is available but not + exported. + +### Non-Breaking + +- Testing improvements in net-sim. + diff --git a/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet.hs b/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet.hs index 2b55260551e..3e4ac9f977b 100644 --- a/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet.hs +++ b/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet.hs @@ -309,38 +309,49 @@ traceFromList = Trace.fromList (MainReturn (Time 0) (Labelled (ThreadId []) (Ju testWithIOSim :: (SimTrace Void -> Int -> Property) + -- ^ property to verify -> Int + -- ^ number of trace events to analyse -> AbsBearerInfo + -- ^ bearer configuration -> DiffusionScript + -- ^ sim-net configuration -> Property -testWithIOSim f traceNumber bi ds = +testWithIOSim prop traceNumber bi ds = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo bi) ds - iosimTracer trace = runSimTrace sim - in labelDiffusionScript ds - $ counterexample (intercalate "\n" $ - selectTraceEventsSay' $ Trace.take traceNumber trace) - --counterexample (Trace.ppTrace show (ppSimEvent 0 0 0) $ Trace.take traceNumber trace) - $ f trace traceNumber + in labelDiffusionScript ds $ + -- we don't capture the time in the say trace, we add it here + counterexample (intercalate "\n" $ map (\(Time t, ev) -> show t <> " " <> ev) $ + selectTraceEventsSayWithTime' $ Trace.take traceNumber trace) $ + -- counterexample (Trace.ppTrace show (ppSimEvent 0 0 0) $ Trace.take traceNumber trace) $ + prop trace traceNumber testWithIOSimPOR :: (SimTrace Void -> Int -> Property) + -- ^ property to verify -> Int + -- ^ number of trace events to analyse -> AbsBearerInfo + -- ^ bearer configuration -> DiffusionScript + -- ^ sim-net configuration -> Property -testWithIOSimPOR f traceNumber bi ds = +testWithIOSimPOR prop traceNumber bi ds = let sim :: forall s . IOSim s Void sim = do exploreRaces diffusionSimulation (toBearerInfo bi) ds - iosimTracer in labelDiffusionScript ds - $ exploreSimTrace id sim $ \_ ioSimTrace -> - f ioSimTrace traceNumber + $ exploreSimTrace id sim $ \_ trace -> + -- we don't capture the time in the say trace, we add it here + counterexample (intercalate "\n" $ map (\(Time t, ev) -> show t <> " " <> ev) $ + selectTraceEventsSayWithTime' $ Trace.take traceNumber trace) $ + -- counterexample (Trace.ppTrace show (ppSimEvent 0 0 0) $ Trace.take traceNumber trace) $ + prop trace traceNumber -- @@ -489,9 +500,8 @@ unit_cm_valid_transitions = ] ] sim :: forall s. IOSim s Void - sim = do - exploreRaces - diffusionSimulation (toBearerInfo bi) ds iosimTracer + sim = diffusionSimulation (toBearerInfo bi) ds + in exploreSimTrace (\a -> a { explorationReplay = Just s }) sim $ \_ ioSimTrace -> prop_diffusion_cm_valid_transition_order' ioSimTrace short_trace @@ -551,7 +561,6 @@ unit_connection_manager_trace_coverage = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo absNoAttenuation) script - iosimTracer events :: [CM.Trace NtNAddr @@ -661,7 +670,6 @@ unit_connection_manager_transitions_coverage = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo absNoAttenuation) script - iosimTracer trace = runSimTrace sim -- events from `traceTVar` installed in `newMutableConnState` @@ -785,7 +793,6 @@ prop_inbound_governor_trace_coverage defaultBearerInfo diffScript = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo defaultBearerInfo) diffScript - iosimTracer events :: [IG.Trace NtNAddr] events = mapMaybe (\case DiffusionInboundGovernorTrace st -> Just st @@ -943,8 +950,7 @@ prop_txSubmission_allTransactions (ArbTxDecisionPolicy decisionPolicy) ] in checkAllTransactions (runSimTrace (diffusionSimulation noAttenuation - diffScript - iosimTracer) + diffScript) ) 500_000 -- ^ Running for 500k might not be enough. where @@ -1044,7 +1050,6 @@ prop_check_inflight_ratio bi ds@(DiffusionScript simArgs _ _) = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo bi) ds - iosimTracer events :: Events DiffusionTestTrace events = Signal.eventsFromList @@ -1088,7 +1093,6 @@ prop_inbound_governor_transitions_coverage defaultBearerInfo diffScript = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo defaultBearerInfo) diffScript - iosimTracer events :: [IG.RemoteTransitionTrace NtNAddr] events = mapMaybe (\case DiffusionInboundGovernorTransitionTrace st -> @@ -1120,7 +1124,6 @@ prop_fetch_client_state_trace_coverage defaultBearerInfo diffScript = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo defaultBearerInfo) diffScript - iosimTracer events :: [TraceFetchClientState BlockHeader] events = mapMaybe (\case DiffusionFetchTrace st -> @@ -1281,7 +1284,9 @@ prop_only_bootstrap_peers_in_fallback_state ioSimTrace traceNumber = <*> govLedgerStateJudgement <*> trIsNodeAlive ) - in counterexample (List.intercalate "\n" $ map show $ Signal.eventsToList events) + in counterexample + (List.intercalate "\n" $ + map (show . uncurry WithTime) $ Signal.eventsToList events) $ signalProperty 20 show Set.null keepNonTrustablePeersTooLong @@ -1509,7 +1514,6 @@ prop_server_trace_coverage defaultBearerInfo diffScript = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo defaultBearerInfo) diffScript - iosimTracer events :: [Server.Trace NtNAddr] events = mapMaybe (\case DiffusionServerTrace st -> Just st @@ -1538,7 +1542,6 @@ prop_peer_selection_action_trace_coverage defaultBearerInfo diffScript = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo defaultBearerInfo) diffScript - iosimTracer events :: [PeerSelectionActionsTrace NtNAddr NtNVersion] events = mapMaybe (\case DiffusionPeerSelectionActionsTrace st -> Just st @@ -1597,7 +1600,6 @@ prop_peer_selection_trace_coverage defaultBearerInfo diffScript = let sim :: forall s . IOSim s Void sim = diffusionSimulation (toBearerInfo defaultBearerInfo) diffScript - iosimTracer events :: [TracePeerSelection Cardano.ExtraState PeerTrustable @@ -2815,7 +2817,11 @@ prop_diffusion_target_established_local ioSimTrace traceNumber = id promotionOpportunities - in counterexample + in + -- counterexample + -- (List.intercalate "\n" + -- (map (show . uncurry WithTime) $ eventsToList events)) + counterexample ("\nSignal key: (local root peers, est. local peers, in progress promotions, " ++ "recent failures, opportunities, ignored too long)\n" ) @@ -2997,7 +3003,10 @@ prop_diffusion_target_active_below ioSimTrace traceNumber = id promotionOpportunities - in counterexample + in + -- counterexample + -- (List.intercalate "\n" $ map (show . uncurry WithTime) $ Signal.eventsToList events) $ + counterexample ("\nSignal key: (local, established peers, active peers, " ++ "recent failures, opportunities, is node running, ignored too long)") $ signalProperty 20 show @@ -3166,12 +3175,13 @@ prop_diffusion_target_active_local_below ioSimTrace traceNumber = id promotionOpportunities - in counterexample + in + -- counterexample + -- (List.intercalate "\n" $ + -- map (show . uncurry WithTime) $ Signal.eventsToList events) $ + counterexample ("\nSignal key: (local, established peers, active peers, " ++ "recent failures, opportunities, ignored too long)") $ - -- counterexample - -- (List.intercalate "\n" $ map show $ Signal.eventsToList events) $ - signalProperty 20 show (\(_,_,_,_,_,toolong) -> Set.null toolong) ((,,,,,) <$> (LocalRootPeers.toGroupSets <$> govLocalRootPeersSig) @@ -3308,7 +3318,7 @@ prop_diffusion_async_demotions ioSimTrace traceNumber = lastTime = fst . last $ evsList - in counterexample (unlines $ map show evsList) + in counterexample (unlines $ map (show . uncurry WithTime) evsList) $ classifySimulatedTime lastTime $ classifyNumberOfEvents (length evsList) $ verify_async_demotions ev @@ -3534,11 +3544,11 @@ prop_diffusion_target_active_local_above ioSimTrace traceNumber = id demotionOpportunities - in counterexample + in + -- counterexample (List.intercalate "\n" $ map (show . uncurry WithTime) $ Signal.eventsToList events) $ + counterexample ("\nSignal key: (local peers, active peers, " ++ "demotion opportunities, ignored too long)") $ - --counterexample (List.intercalate "\n" $ map show $ Signal.eventsToList events) $ - signalProperty 20 show (\(_,_,_,toolong) -> Set.null toolong) ((,,,) <$> (LocalRootPeers.toGroupSets <$> govLocalRootPeersSig) @@ -3975,7 +3985,6 @@ prop_unit_reconnect = sim = diffusionSimulation (toBearerInfo (absNoAttenuation { abiInboundAttenuation = SpeedAttenuation SlowSpeed (Time 20) 1000 } )) diffScript - iosimTracer events :: [Events (WithName NtNAddr DiffusionTestTrace)] events = Trace.toList @@ -4272,7 +4281,6 @@ unit_peer_sharing = let sim :: forall s. IOSim s Void sim = diffusionSimulation (toBearerInfo absNoAttenuation) script - iosimTracer -- TODO: we need `CardanoTracePeerSelection addr` type alias! events :: Map NtNAddr [TracePeerSelection Cardano.ExtraState @@ -4862,7 +4870,7 @@ unit_local_root_diffusion_mode :: DiffusionMode unit_local_root_diffusion_mode diffusionMode = -- this is a unit test withMaxSuccess 1 $ - let sim = diffusionSimulation (toBearerInfo absNoAttenuation) script iosimTracer + let sim = diffusionSimulation (toBearerInfo absNoAttenuation) script -- list of negotiated version data events :: [NtNVersionData] diff --git a/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet/Simulation.hs b/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet/Simulation.hs index 2f3b4888247..bb54b757666 100644 --- a/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet/Simulation.hs +++ b/cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet/Simulation.hs @@ -1,4 +1,5 @@ {-# LANGUAGE BlockArguments #-} +{-# LANGUAGE DerivingVia #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE LambdaCase #-} @@ -28,7 +29,6 @@ module Test.Cardano.Network.Diffusion.Testnet.Simulation -- * Tracing , DiffusionTestTrace (..) , ppDiffusionTestTrace - , iosimTracer -- * Re-exports , TestAddress (..) , RelayAccessPoint (..) @@ -48,7 +48,7 @@ import Control.Monad.Class.MonadThrow import Control.Monad.Class.MonadTime.SI import Control.Monad.Class.MonadTimer.SI import Control.Monad.Fix -import Control.Monad.IOSim (IOSim, traceM) +import Control.Monad.IOSim (IOSim) import Control.Tracer (Tracer (..), contramap, nullTracer, traceWith) import Data.Bifunctor (first) @@ -998,18 +998,18 @@ ppDiffusionTestTrace (DiffusionDNSTrace tr) = show tr ppDiffusionTestTrace (DiffusionMuxTrace tr) = show tr --- | A debug tracer which embeds events in DiffusionTestTrace. +-- | Run an arbitrary topology in `IOSim`. -- -iosimTracer :: forall s. - Tracer (IOSim s) (WithTime (WithName NtNAddr DiffusionTestTrace)) -iosimTracer = - Tracer traceM - <> Tracer (\WithTime { wtEvent = WithName { wnName, wnEvent } } -> - -- don't log time, it's in the trace - say $ ppNtNAddr wnName ++ " @ " ++ ppDiffusionTestTrace wnEvent) - --- | Run an arbitrary topology diffusionSimulation + :: BearerInfo + -> DiffusionScript + -> IOSim s Void +diffusionSimulation bearerInfo diffusionScript = + diffusionSimulationM bearerInfo diffusionScript dynamicTracer + +-- | Run an arbitrary topology in a generic monad `m`. +-- +diffusionSimulationM :: forall m. ( Alternative (STM m) , MonadAsync m , MonadDelay m @@ -1032,7 +1032,7 @@ diffusionSimulation -> Tracer m (WithTime (WithName NtNAddr DiffusionTestTrace)) -- ^ timed trace of nodes in the system -> m Void -diffusionSimulation +diffusionSimulationM defaultBearerInfo (DiffusionScript simArgs dnsMapScript nodeArgs) nodeTracer = do @@ -1046,11 +1046,11 @@ diffusionSimulation dnsMapVar <- fromLazyTVar <$> playTimedScript nullTracer dnsMapScript withAsyncAll (zipWith - (\(args, commands) i -> do - labelThisThread ("ctrl-" ++ ppNtNAddr (naAddr args)) - runCommand ntnSnocket ntcSnocket dnsMapVar simArgs args connStateIdSupply i Nothing commands) + (\(args, commands) nodeId -> do + labelThisThread ("ctrl-" ++ show nodeId) + runCommand ntnSnocket ntcSnocket dnsMapVar simArgs args connStateIdSupply nodeId Nothing commands) nodeArgs - [1..]) + [NodeId 1..]) $ \nodes -> do (_, x) <- waitAny nodes return x @@ -1070,7 +1070,7 @@ diffusionSimulation -> SimArgs -- ^ Simulation arguments needed in order to run a simulation -> NodeArgs -- ^ Simulation arguments needed in order to run a single node -> CM.ConnStateIdSupply m - -> Int + -> NodeId -> Maybe ( Async m Void , StrictTVar m [( HotValency , WarmValency @@ -1081,8 +1081,8 @@ diffusionSimulation -> [Command] -- ^ List of commands/actions to perform for a single node -> m Void runCommand ntnSocket ntcSocket dnsMapVar sArgs nArgs@NodeArgs { naAddr } - connStateIdSupply i hostAndLRP cmds = do - traceWith (diffSimTracer naAddr) . TrSay $ "node-" <> show i + connStateIdSupply nodeId hostAndLRP cmds = do + traceWith (diffSimTracer naAddr) . TrSay $ show nodeId ++ " @ " ++ ppNtNAddr naAddr runCommand' hostAndLRP cmds where runCommand' Nothing [] = do @@ -1101,7 +1101,7 @@ diffusionSimulation threadDelay delay traceWith (diffSimTracer naAddr) TrJoiningNetwork lrpVar <- newTVarIO $ naLocalRootPeers nArgs - withAsync (runNode sArgs nArgs ntnSocket ntcSocket connStateIdSupply lrpVar dnsMapVar i) $ \nodeAsync -> + withAsync (runNode sArgs nArgs ntnSocket ntcSocket connStateIdSupply lrpVar dnsMapVar nodeId) $ \nodeAsync -> runCommand' (Just (nodeAsync, lrpVar)) cs runCommand' _ (JoinNetwork _:_) = error "runCommand: Impossible happened" @@ -1135,7 +1135,7 @@ diffusionSimulation , Map RelayAccessPoint (LocalRootConfig PeerTrustable) )] -> StrictTVar m MockDNSMap - -> Int + -> NodeId -> m Void runNode SimArgs { saSlot = bgaSlotDuration @@ -1162,7 +1162,8 @@ diffusionSimulation ntcSnocket connStateIdSupply lrpVar - dMapVar i = do + dMapVar + nodeId = do chainSyncExitVar <- newTVarIO chainSyncExitOnBlockNo ledgerPeersVar <- initScript' ledgerPeers onlyOutboundConnectionsStateVar <- newTVarIO UntrustedState @@ -1308,7 +1309,7 @@ diffusionSimulation , Node.aTxs = txs } - tracers = mkTracers addr i + tracers = mkTracers addr nodeId requestPublicRootPeers' = requestPublicRootPeersImpl (Diffusion.dtTracePublicRootPeersTracer tracers) @@ -1424,11 +1425,11 @@ diffusionSimulation diffSimTracer ntnAddr = contramap DiffusionSimulationTrace . tracerWithName ntnAddr . tracerWithTime - $ nodeTracer <> sayTracer + $ nodeTracer mkTracers :: NtNAddr - -> Int + -> NodeId -> Diffusion.Tracers NtNAddr NtNVersion NtNVersionData NtCAddr NtCVersion NtCVersionData Cardano.ExtraState @@ -1437,17 +1438,24 @@ diffusionSimulation (Cardano.ExtraPeerSelectionSetsWithSizes NtNAddr) Cardano.ExtraTrace m - mkTracers ntnAddr i = - let sayTracer' = Tracer \msg -> say $ "(node-" <> show i <> ")" <> show msg - -- toggle and uncomment interesting sayTracer' below - nodeTracer' = if True then nodeTracer <> sayTracer' else nodeTracer in - + mkTracers ntnAddr nodeId = + let sayTracer' :: Show event => Tracer m event + sayTracer' = Tracer $ \event -> + -- time of events is added in `testWithIOSim` and + -- `testWithIOSimPOR` + say $ show nodeId ++ " @ " ++ show event + + nodeTracer' = nodeTracer + <> sayTracer' + -- DEBUG TIP: comment `sayTracer'` out to reduce noise and + -- enable it below in one of the specific tracers + in Diffusion.nullTracers { -- Diffusion.dtMuxTracer = contramap -- DiffusionMuxTrace -- . tracerWithName ntnAddr -- . tracerWithTime - -- $ nodeTracer' -- <> sayTracer', + -- $ nodeTracer Diffusion.dtTraceLocalRootPeersTracer = contramap DiffusionLocalRootPeerTrace . tracerWithName ntnAddr @@ -1480,8 +1488,8 @@ diffusionSimulation . tracerWithName ntnAddr . tracerWithTime $ nodeTracer' -- <> sayTracer' - , Diffusion.dtTracePeerSelectionCounters = nullTracer - , Diffusion.dtTraceChurnCounters = nullTracer + , Diffusion.dtTracePeerSelectionCounters = nullTracer -- <> sayTracer' + , Diffusion.dtTraceChurnCounters = nullTracer -- <> sayTracer' , Diffusion.dtPeerSelectionActionsTracer = contramap DiffusionPeerSelectionActionsTrace . tracerWithName ntnAddr @@ -1501,25 +1509,25 @@ diffusionSimulation -- * through `traceTVar` installed in `newMutableConnState` -- * the `dtConnectionManagerTransitionTracer` $ nodeTracer' -- <> sayTracer' - , Diffusion.dtServerTracer = contramap - DiffusionServerTrace - . tracerWithName ntnAddr - . tracerWithTime - $ nodeTracer' -- <> sayTracer' - , Diffusion.dtInboundGovernorTracer = contramap - DiffusionInboundGovernorTrace - . tracerWithName ntnAddr - . tracerWithTime - $ nodeTracer' -- <> sayTracer' + , Diffusion.dtServerTracer = contramap + DiffusionServerTrace + . tracerWithName ntnAddr + . tracerWithTime + $ nodeTracer' -- <> sayTracer' + , Diffusion.dtInboundGovernorTracer = contramap + DiffusionInboundGovernorTrace + . tracerWithName ntnAddr + . tracerWithTime + $ nodeTracer' -- <> sayTracer' , Diffusion.dtInboundGovernorTransitionTracer = contramap DiffusionInboundGovernorTransitionTrace . tracerWithName ntnAddr . tracerWithTime $ nodeTracer' -- <> sayTracer' - , Diffusion.dtLocalConnectionManagerTracer = nullTracer - , Diffusion.dtLocalServerTracer = nullTracer - , Diffusion.dtLocalInboundGovernorTracer = nullTracer + , Diffusion.dtLocalConnectionManagerTracer = nullTracer -- <> sayTracer' + , Diffusion.dtLocalServerTracer = nullTracer -- <> sayTracer' + , Diffusion.dtLocalInboundGovernorTracer = nullTracer -- <> sayTracer' , Diffusion.dtDnsTracer = contramap DiffusionDNSTrace . tracerWithName ntnAddr . tracerWithTime @@ -1544,6 +1552,13 @@ timeLimitsPingPong = ProtocolTimeLimits $ \case -- Utils -- +newtype NodeId = NodeId Int + deriving Enum via Int + deriving (Ord, Eq) + +instance Show NodeId where + show (NodeId n) = "node-" ++ show n + withAsyncAll :: MonadAsync m => [m a] -> ([Async m a] -> m b) -> m b withAsyncAll xs0 action = go [] xs0 where diff --git a/ouroboros-network/changelog.d/20251007_150356_coot_net_sim_tracer.md b/ouroboros-network/changelog.d/20251007_150356_coot_net_sim_tracer.md new file mode 100644 index 00000000000..aeedab97d0d --- /dev/null +++ b/ouroboros-network/changelog.d/20251007_150356_coot_net_sim_tracer.md @@ -0,0 +1,6 @@ +### Non-Breaking + +- `PublicPeerSelectionState`: added `Show` instance. +- `showSignalValue`: cleaner counterexample output. +- `Test.Ouroboros.Network.Utils.dynamicTracer`: added, using `IOSim`'s `traceM` API. + diff --git a/ouroboros-network/lib/Ouroboros/Network/PeerSelection/Governor/Types.hs b/ouroboros-network/lib/Ouroboros/Network/PeerSelection/Governor/Types.hs index 30edf06971c..09c5e3717fc 100644 --- a/ouroboros-network/lib/Ouroboros/Network/PeerSelection/Governor/Types.hs +++ b/ouroboros-network/lib/Ouroboros/Network/PeerSelection/Governor/Types.hs @@ -772,6 +772,7 @@ newtype PublicPeerSelectionState peeraddr = PublicPeerSelectionState { availableToShare :: Set peeraddr } + deriving Show emptyPublicPeerSelectionState :: Ord peeraddr => PublicPeerSelectionState peeraddr diff --git a/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Data/Signal.hs b/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Data/Signal.hs index ce96e7bdcd0..c0870f87168 100644 --- a/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Data/Signal.hs +++ b/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Data/Signal.hs @@ -541,12 +541,12 @@ signalProperty atMost showSignalValue p = | n < atMost = go (n+1) ( Deque.snoc (t,x) recent) txs | otherwise = go n ((Deque.tail . Deque.snoc (t,x)) recent) txs - go !_ !recent ((t, x) : _) = counterexample details False + go !_ !recent ((Time t, x) : _) = counterexample details False where details = unlines [ "Last " ++ show atMost ++ " signal values:" - , unlines [ show t' ++ "\t: " ++ showSignalValue x' - | (t',x') <- Deque.toList recent ] + , unlines [ show t' ++ "\t@ " ++ showSignalValue x' + | (Time t',x') <- Deque.toList recent ] , "Property violated at: " ++ show t , "Invalid signal value:" , showSignalValue x diff --git a/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Utils.hs b/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Utils.hs index 4a0bc844fa0..593f997d8f8 100644 --- a/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Utils.hs +++ b/ouroboros-network/tests-lib/lib/Test/Ouroboros/Network/Utils.hs @@ -36,6 +36,7 @@ module Test.Ouroboros.Network.Utils , debugTracer , debugTracerG , sayTracer + , dynamicTracer -- * Tasty Utils , nightlyTest , ignoreTest @@ -185,6 +186,8 @@ data WithName name event = WithName { instance (Show name, Show event) => Show (WithName name event) where show (WithName name ev) = "#" <> show name <> " % " <> show ev +-- NOTE: one shouldn't use it in `sayTracer`, use +-- `selectTraceEventsSayWithTime` instead. data WithTime event = WithTime { wtTime :: Time, wtEvent :: event @@ -277,6 +280,9 @@ debugTracerG = Tracer (\msg -> getCurrentTime >>= say . show . (,msg)) <> Tracer traceM -- <> Tracer Debug.traceShowM +dynamicTracer :: Typeable a => Tracer (IOSim s) a +dynamicTracer = Tracer traceM + -- -- Nightly tests -- diff --git a/ouroboros-network/tests/lib/Test/Ouroboros/Network/BlockFetch.hs b/ouroboros-network/tests/lib/Test/Ouroboros/Network/BlockFetch.hs index 4bccc937775..ae548e88ecc 100644 --- a/ouroboros-network/tests/lib/Test/Ouroboros/Network/BlockFetch.hs +++ b/ouroboros-network/tests/lib/Test/Ouroboros/Network/BlockFetch.hs @@ -23,7 +23,6 @@ import Data.Map qualified as Map import Data.Maybe (mapMaybe) import Data.Set (Set) import Data.Set qualified as Set -import Data.Typeable (Typeable) import Control.Concurrent.Class.MonadSTM.Strict import Control.Exception (AssertionFailed (..), throw) @@ -33,7 +32,7 @@ import Control.Monad.Class.MonadFork import Control.Monad.Class.MonadThrow import Control.Monad.Class.MonadTimer.SI import Control.Monad.IOSim -import Control.Tracer (Tracer (Tracer), contramap, nullTracer) +import Control.Tracer (contramap, nullTracer) import Ouroboros.Network.ControlMessage (ControlMessage (..)) import Ouroboros.Network.DeltaQ @@ -1002,11 +1001,3 @@ prop_comparePeerGSVEq salt p (PeerGSVT a) aActive = let peerSet = if aActive then Set.singleton p else Set.empty in comparePeerGSV peerSet salt (a, p) (a, p) === EQ - - --- --- Trace utils --- - -dynamicTracer :: Typeable a => Tracer (IOSim s) a -dynamicTracer = Tracer traceM diff --git a/ouroboros-network/tests/lib/Test/Ouroboros/Network/Diffusion/Node/Kernel.hs b/ouroboros-network/tests/lib/Test/Ouroboros/Network/Diffusion/Node/Kernel.hs index 6ab63cd8955..e4beaea489c 100644 --- a/ouroboros-network/tests/lib/Test/Ouroboros/Network/Diffusion/Node/Kernel.hs +++ b/ouroboros-network/tests/lib/Test/Ouroboros/Network/Diffusion/Node/Kernel.hs @@ -322,7 +322,8 @@ data NodeKernel header block s txid m = NodeKernel { :: SharedTxStateVar m NtNAddr txid (Tx txid) } -newNodeKernel :: ( MonadSTM m +newNodeKernel :: ( MonadTraceSTM m + , MonadLabelledSTM m , Strict.MonadMVar m , RandomGen rng , Eq txid @@ -333,6 +334,8 @@ newNodeKernel :: ( MonadSTM m -> m (NodeKernel header block rng txid m) newNodeKernel psRng txSeed txs = do publicStateVar <- makePublicPeerSelectionStateVar + labelTVarIO publicStateVar "public-peer-selection-state-var" + traceTVarIO publicStateVar (\_ a -> return $ TraceString (show a)) NodeKernel <$> newTVarIO Map.empty <*> newTVarIO (ChainProducerState Chain.Genesis Map.empty 0) @@ -422,6 +425,8 @@ withNodeKernelThread , MonadFork m , MonadThrow m , MonadThrow (STM m) + , MonadTraceSTM m + , MonadLabelledSTM m , Strict.MonadMVar m , HasFullHeader block , RandomGen seed