{-# LANGUAGE NamedFieldPuns #-} {-# OPTIONS_GHC -Wno-orphans #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeApplications #-} module Test.Ouroboros.Network.PeerSelection.Cardano.LocalRootPeers (tests) where import Data.Map.Strict qualified as Map import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable) import Ouroboros.Network.PeerSelection.State.LocalRootPeers (LocalRootPeers (..)) import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers import Test.Ouroboros.Network.PeerSelection.Cardano.Instances () import Test.Ouroboros.Network.PeerSelection.Instances (PeerAddr) import Test.Ouroboros.Network.PeerSelection.LocalRootPeers () import Test.QuickCheck import Test.Tasty (TestTree, testGroup) import Test.Tasty.QuickCheck (testProperty) tests :: TestTree tests :: TestTree tests = TestName -> [TestTree] -> TestTree testGroup TestName "Ouroboros.Network.PeerSelection.Cardano" [ TestName -> [TestTree] -> TestTree testGroup TestName "LocalRootPeers" [ TestName -> (LocalRootPeers PeerTrustable PeerAddr -> Property) -> TestTree forall a. Testable a => TestName -> a -> TestTree testProperty TestName "clampToTrustable" LocalRootPeers PeerTrustable PeerAddr -> Property prop_clampToTrustable ] ] prop_clampToTrustable :: LocalRootPeers PeerTrustable PeerAddr -> Property prop_clampToTrustable :: LocalRootPeers PeerTrustable PeerAddr -> Property prop_clampToTrustable LocalRootPeers PeerTrustable PeerAddr localRootPeers = let trustedPeers :: Set PeerAddr trustedPeers = LocalRootPeers PeerTrustable PeerAddr -> Set PeerAddr forall extraFlags peeraddr. LocalRootPeers extraFlags peeraddr -> Set peeraddr LocalRootPeers.keysSet (LocalRootPeers PeerTrustable PeerAddr -> Set PeerAddr) -> LocalRootPeers PeerTrustable PeerAddr -> Set PeerAddr forall a b. (a -> b) -> a -> b $ LocalRootPeers PeerTrustable PeerAddr -> LocalRootPeers PeerTrustable PeerAddr forall peeraddr. Ord peeraddr => LocalRootPeers PeerTrustable peeraddr -> LocalRootPeers PeerTrustable peeraddr LocalRootPeers.clampToTrustable LocalRootPeers PeerTrustable PeerAddr localRootPeers in TestName -> Bool -> Property forall prop. Testable prop => TestName -> prop -> Property counterexample (Map PeerAddr (LocalRootConfig PeerTrustable) -> TestName forall a. Show a => a -> TestName show (Map PeerAddr (LocalRootConfig PeerTrustable) -> TestName) -> Map PeerAddr (LocalRootConfig PeerTrustable) -> TestName forall a b. (a -> b) -> a -> b $ Map PeerAddr (LocalRootConfig PeerTrustable) -> Set PeerAddr -> Map PeerAddr (LocalRootConfig PeerTrustable) forall k a. Ord k => Map k a -> Set k -> Map k a Map.restrictKeys (LocalRootPeers PeerTrustable PeerAddr -> Map PeerAddr (LocalRootConfig PeerTrustable) forall extraFlags peeraddr. LocalRootPeers extraFlags peeraddr -> Map peeraddr (LocalRootConfig extraFlags) LocalRootPeers.toMap LocalRootPeers PeerTrustable PeerAddr localRootPeers) Set PeerAddr trustedPeers) (Bool -> Property) -> Bool -> Property forall a b. (a -> b) -> a -> b $ (PeerAddr -> Bool) -> Set PeerAddr -> Bool forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool all (PeerAddr -> LocalRootPeers PeerTrustable PeerAddr -> Bool forall peeraddr. Ord peeraddr => peeraddr -> LocalRootPeers PeerTrustable peeraddr -> Bool `LocalRootPeers.isPeerTrustable` LocalRootPeers PeerTrustable PeerAddr localRootPeers) Set PeerAddr trustedPeers