Skip to content

Commit

Permalink
outbound-governor: fixed a bootstrap peer test
Browse files Browse the repository at this point in the history
Fixed the `prop_governor_only_bootstrap_peers_in_clean_state` test.

Clean state is a state in which we are required to use bootstrap peers:
the outbound governor enters clean state as soon as
* `requiresBootstrapPeers` returns `True`; and
* it only uses bootstrap peers.
It leaves the clean state when `requiresBootstrapPeers` changes value to
`False`.

It turns out we also need to get known and trusted peers as a single
event, otherwise they might get out of sync which results in a false
positive.
  • Loading branch information
coot committed Apr 25, 2024
1 parent 72ab43c commit f34bb46
Showing 1 changed file with 25 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ tests =
prop_governor_no_non_trustable_peers_before_caught_up_state
, testProperty "node only use bootstrap peers if in sensitive state"
prop_governor_stops_using_bootstrap_peers
, testProperty "node never uses non-trustable peers after clean state"
prop_governor_only_bootstrap_peers_after_clean_state
, testProperty "node never uses non-trustable peers in clean state"
prop_governor_only_bootstrap_peers_in_clean_state
, testProperty "node uses ledger peers in non-sensitive mode"
prop_governor_uses_ledger_peers
]
Expand Down Expand Up @@ -3265,8 +3265,11 @@ prop_governor_no_non_trustable_peers_before_caught_up_state env =
Set.null
keepNonTrustablePeersTooLong

prop_governor_only_bootstrap_peers_after_clean_state :: GovernorMockEnvironment -> Property
prop_governor_only_bootstrap_peers_after_clean_state env =
-- NOTE: the clean state is defined as a state in which we require bootstrap
-- peers and the governor set the `hasOnlyBootstrapPeers` flag.
--
prop_governor_only_bootstrap_peers_in_clean_state :: GovernorMockEnvironment -> Property
prop_governor_only_bootstrap_peers_in_clean_state env =
let events = Signal.eventsFromListUpToTime (Time (10 * 60 * 60))
. selectPeerSelectionTraceEvents
. runGovernorInMockEnvironment
Expand All @@ -3280,15 +3283,15 @@ prop_governor_only_bootstrap_peers_after_clean_state env =
govLedgerStateJudgement =
selectGovState (Governor.ledgerStateJudgement) events

govKnownPeers :: Signal (Set PeerAddr)
govKnownPeers =
selectGovState (KnownPeers.toSet . Governor.knownPeers) events

govTrustedPeers :: Signal (Set PeerAddr)
govTrustedPeers =
govKnownAndTrustedPeers :: Signal (Set PeerAddr, Set PeerAddr)
govKnownAndTrustedPeers =
selectGovState
(\st -> LocalRootPeers.keysSet (LocalRootPeers.clampToTrustable (Governor.localRootPeers st))
<> PublicRootPeers.getBootstrapPeers (Governor.publicRootPeers st)
(\st ->
( KnownPeers.toSet (Governor.knownPeers st)
,
LocalRootPeers.keysSet (LocalRootPeers.clampToTrustable (Governor.localRootPeers st))
<> PublicRootPeers.getBootstrapPeers (Governor.publicRootPeers st)
)
) events

govHasOnlyBootstrapPeers :: Signal Bool
Expand All @@ -3299,29 +3302,27 @@ prop_governor_only_bootstrap_peers_after_clean_state env =
isInCleanState =
fmap (not . Set.null)
$ Signal.keyedUntil
(\(_, _, ubp, lsj, hp) ->
(\(_, ubp, lsj, hp) ->
if hp && requiresBootstrapPeers ubp lsj
then Set.singleton ()
else Set.empty
)
(\(_, _, ubp, lsj, hp) ->
if not hp || not (requiresBootstrapPeers ubp lsj)
(\(_, ubp, lsj, _hp) ->
if not (requiresBootstrapPeers ubp lsj)
then Set.singleton ()
else Set.empty
)
(const False)
((,,,,) <$> govKnownPeers
<*> govTrustedPeers
<*> govUseBootstrapPeers
<*> govLedgerStateJudgement
<*> govHasOnlyBootstrapPeers
((,,,) <$> govKnownAndTrustedPeers
<*> govUseBootstrapPeers
<*> govLedgerStateJudgement
<*> govHasOnlyBootstrapPeers
)

in signalProperty 20 show
(\(b, kp, tp) -> (b && Set.null (Set.difference kp tp)) || not b)
((,,) <$> isInCleanState
<*> govKnownPeers
<*> govTrustedPeers
(\(b, (kp, tp)) -> (b && Set.null (Set.difference kp tp)) || not b)
((,) <$> isInCleanState
<*> govKnownAndTrustedPeers
)

-- | This test checks that if the node is not in a sensitive state it will not
Expand Down

0 comments on commit f34bb46

Please sign in to comment.