{-# OPTIONS_GHC -Wno-orphans #-}
module Test.Ouroboros.Network.PeerSelection.PublicRootPeers
( arbitraryPublicRootPeers
, tests
) where
import Data.Map.Strict (Map)
import Data.Map.Strict qualified as Map
import Data.Set (Set)
import Data.Set qualified as Set
import Ouroboros.Network.PeerSelection.PublicRootPeers (PublicRootPeers)
import Ouroboros.Network.PeerSelection.PublicRootPeers qualified as PublicRootPeers
import Test.Ouroboros.Network.PeerSelection.Instances
import Test.Ouroboros.Network.Utils (ShrinkCarefully, prop_shrink_nonequal,
prop_shrink_valid)
import Ouroboros.Network.PeerSelection.PeerAdvertise (PeerAdvertise)
import Ouroboros.Network.PeerSelection.PublicRootPeers (PublicRootPeers (..))
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"
[ TestName -> [TestTree] -> TestTree
testGroup TestName
"PublicRootPeers"
[ TestName -> (PublicRootPeers PeerAddr -> Property) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"arbitrary" PublicRootPeers PeerAddr -> Property
prop_arbitrary_PublicRootPeers
, TestName
-> (Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Set PeerAddr -> Set PeerAddr -> Bool)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"fromMapAndSet" Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Set PeerAddr -> Set PeerAddr -> Bool
prop_fromMapAndSet
, TestName
-> (Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Set PeerAddr -> Set PeerAddr -> Bool)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"fromMapAndSet'" Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Set PeerAddr -> Set PeerAddr -> Bool
prop_fromMapAndSet'
, TestName -> (PublicRootPeers PeerAddr -> Bool) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"fromToMapAndSet" PublicRootPeers PeerAddr -> Bool
prop_fromToMapAndSet
, TestName
-> (PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr -> Bool)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"merge" PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr -> Bool
prop_merge
, TestName
-> (PublicRootPeers PeerAddr -> PeerAddr -> PeerAdvertise -> Bool)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"insertPublicConfigPeer" PublicRootPeers PeerAddr -> PeerAddr -> PeerAdvertise -> Bool
prop_insertPublicConfigPeer
, TestName
-> (PublicRootPeers PeerAddr -> PeerAddr -> Bool) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"insertBootstrapPeer" PublicRootPeers PeerAddr -> PeerAddr -> Bool
prop_insertBootstrapPeer
, TestName
-> (PublicRootPeers PeerAddr -> PeerAddr -> Bool) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"insertLedgerPeer" PublicRootPeers PeerAddr -> PeerAddr -> Bool
prop_insertLedgerPeer
, TestName
-> (PublicRootPeers PeerAddr -> PeerAddr -> Bool) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"insertBigLedgerPeer" PublicRootPeers PeerAddr -> PeerAddr -> Bool
prop_insertBigLedgerPeer
, TestName -> (PeerAddr -> PeerAdvertise -> Bool) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"fromPeers" PeerAddr -> PeerAdvertise -> Bool
prop_fromPeers
, TestName
-> (ShrinkCarefully (PublicRootPeers PeerAddr) -> Property)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"shrink" ShrinkCarefully (PublicRootPeers PeerAddr) -> Property
prop_shrink_PublicRootPeers
]
]
arbitraryPublicRootPeers :: Ord peeraddr
=> Set peeraddr -> Gen (PublicRootPeers peeraddr)
arbitraryPublicRootPeers :: forall peeraddr.
Ord peeraddr =>
Set peeraddr -> Gen (PublicRootPeers peeraddr)
arbitraryPublicRootPeers Set peeraddr
peeraddrs = do
let peersSize :: Int
peersSize = Set peeraddr -> Int
forall a. Set a -> Int
Set.size Set peeraddr
peeraddrs
(Set peeraddr
publicConfigPeers, Set peeraddr
otherPeers) = Int -> Set peeraddr -> (Set peeraddr, Set peeraddr)
forall a. Int -> Set a -> (Set a, Set a)
Set.splitAt (Int
peersSize Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2) Set peeraddr
peeraddrs
(Set peeraddr
bootstrapPeers, Set peeraddr
ledgerPeers) = Int -> Set peeraddr -> (Set peeraddr, Set peeraddr)
forall a. Int -> Set a -> (Set a, Set a)
Set.splitAt (Set peeraddr -> Int
forall a. Set a -> Int
Set.size Set peeraddr
otherPeers Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2) Set peeraddr
otherPeers
(Set peeraddr
normalLedgerPeers, Set peeraddr
bigLedgerPeers) = Int -> Set peeraddr -> (Set peeraddr, Set peeraddr)
forall a. Int -> Set a -> (Set a, Set a)
Set.splitAt (Set peeraddr -> Int
forall a. Set a -> Int
Set.size Set peeraddr
ledgerPeers Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2) Set peeraddr
ledgerPeers
advertiseInfo <- Int -> Gen PeerAdvertise -> Gen [PeerAdvertise]
forall a. Int -> Gen a -> Gen [a]
vectorOf (Set peeraddr -> Int
forall a. Set a -> Int
Set.size Set peeraddr
publicConfigPeers) Gen PeerAdvertise
forall a. Arbitrary a => Gen a
arbitrary
let publicConfigPeersMap = [(peeraddr, PeerAdvertise)] -> Map peeraddr PeerAdvertise
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
([(peeraddr, PeerAdvertise)] -> Map peeraddr PeerAdvertise)
-> [(peeraddr, PeerAdvertise)] -> Map peeraddr PeerAdvertise
forall a b. (a -> b) -> a -> b
$ [peeraddr] -> [PeerAdvertise] -> [(peeraddr, PeerAdvertise)]
forall a b. [a] -> [b] -> [(a, b)]
zip (Set peeraddr -> [peeraddr]
forall a. Set a -> [a]
Set.toList Set peeraddr
publicConfigPeers) [PeerAdvertise]
advertiseInfo
return (PublicRootPeers.fromMapAndSet publicConfigPeersMap bootstrapPeers normalLedgerPeers bigLedgerPeers)
instance (Arbitrary peeraddr, Ord peeraddr) =>
Arbitrary (PublicRootPeers peeraddr) where
arbitrary :: Gen (PublicRootPeers peeraddr)
arbitrary = do
peeraddrs <- Gen (Set peeraddr)
forall a. Arbitrary a => Gen a
arbitrary
arbitraryPublicRootPeers peeraddrs
shrink :: PublicRootPeers peeraddr -> [PublicRootPeers peeraddr]
shrink (PublicRootPeers Map peeraddr PeerAdvertise
pp Set peeraddr
bsp Set peeraddr
lp Set peeraddr
blp) =
Map peeraddr PeerAdvertise
-> Set peeraddr
-> Set peeraddr
-> Set peeraddr
-> PublicRootPeers peeraddr
forall peeraddr.
Ord peeraddr =>
Map peeraddr PeerAdvertise
-> Set peeraddr
-> Set peeraddr
-> Set peeraddr
-> PublicRootPeers peeraddr
PublicRootPeers.fromMapAndSet (Map peeraddr PeerAdvertise
-> Set peeraddr
-> Set peeraddr
-> Set peeraddr
-> PublicRootPeers peeraddr)
-> [Map peeraddr PeerAdvertise]
-> [Set peeraddr
-> Set peeraddr -> Set peeraddr -> PublicRootPeers peeraddr]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map peeraddr PeerAdvertise -> [Map peeraddr PeerAdvertise]
forall a. Arbitrary a => a -> [a]
shrink Map peeraddr PeerAdvertise
pp
[Set peeraddr
-> Set peeraddr -> Set peeraddr -> PublicRootPeers peeraddr]
-> [Set peeraddr]
-> [Set peeraddr -> Set peeraddr -> PublicRootPeers peeraddr]
forall a b. [a -> b] -> [a] -> [b]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Set peeraddr -> [Set peeraddr]
forall a. Arbitrary a => a -> [a]
shrink Set peeraddr
bsp
[Set peeraddr -> Set peeraddr -> PublicRootPeers peeraddr]
-> [Set peeraddr] -> [Set peeraddr -> PublicRootPeers peeraddr]
forall a b. [a -> b] -> [a] -> [b]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Set peeraddr -> [Set peeraddr]
forall a. Arbitrary a => a -> [a]
shrink Set peeraddr
lp
[Set peeraddr -> PublicRootPeers peeraddr]
-> [Set peeraddr] -> [PublicRootPeers peeraddr]
forall a b. [a -> b] -> [a] -> [b]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Set peeraddr -> [Set peeraddr]
forall a. Arbitrary a => a -> [a]
shrink Set peeraddr
blp
prop_arbitrary_PublicRootPeers :: PublicRootPeers PeerAddr -> Property
prop_arbitrary_PublicRootPeers :: PublicRootPeers PeerAddr -> Property
prop_arbitrary_PublicRootPeers = Bool -> Property
forall prop. Testable prop => prop -> Property
property (Bool -> Property)
-> (PublicRootPeers PeerAddr -> Bool)
-> PublicRootPeers PeerAddr
-> Property
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant
prop_shrink_PublicRootPeers :: ShrinkCarefully (PublicRootPeers PeerAddr) -> Property
prop_shrink_PublicRootPeers :: ShrinkCarefully (PublicRootPeers PeerAddr) -> Property
prop_shrink_PublicRootPeers ShrinkCarefully (PublicRootPeers PeerAddr)
x =
(PublicRootPeers PeerAddr -> Bool)
-> ShrinkCarefully (PublicRootPeers PeerAddr) -> Property
forall a prop.
(Arbitrary a, Show a, Testable prop) =>
(a -> prop) -> ShrinkCarefully a -> Property
prop_shrink_valid PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant ShrinkCarefully (PublicRootPeers PeerAddr)
x
Property -> Property -> Property
forall prop1 prop2.
(Testable prop1, Testable prop2) =>
prop1 -> prop2 -> Property
.&&. ShrinkCarefully (PublicRootPeers PeerAddr) -> Property
forall a.
(Arbitrary a, Eq a, Show a) =>
ShrinkCarefully a -> Property
prop_shrink_nonequal ShrinkCarefully (PublicRootPeers PeerAddr)
x
prop_fromMapAndSet :: Map PeerAddr PeerAdvertise
-> Set PeerAddr
-> Set PeerAddr
-> Set PeerAddr
-> Bool
prop_fromMapAndSet :: Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Set PeerAddr -> Set PeerAddr -> Bool
prop_fromMapAndSet Map PeerAddr PeerAdvertise
pp Set PeerAddr
bsp Set PeerAddr
lp = PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant
(PublicRootPeers PeerAddr -> Bool)
-> (Set PeerAddr -> PublicRootPeers PeerAddr)
-> Set PeerAddr
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map PeerAddr PeerAdvertise
-> Set PeerAddr
-> Set PeerAddr
-> Set PeerAddr
-> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
Map peeraddr PeerAdvertise
-> Set peeraddr
-> Set peeraddr
-> Set peeraddr
-> PublicRootPeers peeraddr
PublicRootPeers.fromMapAndSet Map PeerAddr PeerAdvertise
pp Set PeerAddr
bsp Set PeerAddr
lp
prop_fromToMapAndSet :: PublicRootPeers PeerAddr -> Bool
prop_fromToMapAndSet :: PublicRootPeers PeerAddr -> Bool
prop_fromToMapAndSet prp :: PublicRootPeers PeerAddr
prp@(PublicRootPeers Map PeerAddr PeerAdvertise
pp Set PeerAddr
bsp Set PeerAddr
lp Set PeerAddr
blp) =
Map PeerAddr PeerAdvertise
-> Set PeerAddr
-> Set PeerAddr
-> Set PeerAddr
-> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
Map peeraddr PeerAdvertise
-> Set peeraddr
-> Set peeraddr
-> Set peeraddr
-> PublicRootPeers peeraddr
PublicRootPeers.fromMapAndSet Map PeerAddr PeerAdvertise
pp Set PeerAddr
bsp Set PeerAddr
lp Set PeerAddr
blp PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== PublicRootPeers PeerAddr
prp
prop_fromMapAndSet' :: Map PeerAddr PeerAdvertise
-> Set PeerAddr
-> Set PeerAddr
-> Set PeerAddr
-> Bool
prop_fromMapAndSet' :: Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Set PeerAddr -> Set PeerAddr -> Bool
prop_fromMapAndSet' Map PeerAddr PeerAdvertise
pp Set PeerAddr
bsp Set PeerAddr
lp Set PeerAddr
blp =
let pp' :: Map PeerAddr PeerAdvertise
pp' = Map PeerAddr PeerAdvertise
-> Set PeerAddr -> Map PeerAddr PeerAdvertise
forall k a. Ord k => Map k a -> Set k -> Map k a
Map.withoutKeys Map PeerAddr PeerAdvertise
pp (Set PeerAddr
bsp Set PeerAddr -> Set PeerAddr -> Set PeerAddr
forall a. Semigroup a => a -> a -> a
<> Set PeerAddr
lp Set PeerAddr -> Set PeerAddr -> Set PeerAddr
forall a. Semigroup a => a -> a -> a
<> Set PeerAddr
blp)
bsp' :: Set PeerAddr
bsp' = Set PeerAddr -> Set PeerAddr -> Set PeerAddr
forall a. Ord a => Set a -> Set a -> Set a
Set.difference Set PeerAddr
bsp (Set PeerAddr
lp Set PeerAddr -> Set PeerAddr -> Set PeerAddr
forall a. Semigroup a => a -> a -> a
<> Set PeerAddr
blp)
lp' :: Set PeerAddr
lp' = Set PeerAddr -> Set PeerAddr -> Set PeerAddr
forall a. Ord a => Set a -> Set a -> Set a
Set.difference Set PeerAddr
lp Set PeerAddr
blp
prp :: PublicRootPeers PeerAddr
prp = Map PeerAddr PeerAdvertise
-> Set PeerAddr
-> Set PeerAddr
-> Set PeerAddr
-> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
Map peeraddr PeerAdvertise
-> Set peeraddr
-> Set peeraddr
-> Set peeraddr
-> PublicRootPeers peeraddr
PublicRootPeers.fromMapAndSet Map PeerAddr PeerAdvertise
pp' Set PeerAddr
bsp' Set PeerAddr
lp' Set PeerAddr
blp
in PublicRootPeers PeerAddr -> Map PeerAddr PeerAdvertise
forall peeraddr.
PublicRootPeers peeraddr -> Map peeraddr PeerAdvertise
PublicRootPeers.getPublicConfigPeers PublicRootPeers PeerAddr
prp Map PeerAddr PeerAdvertise -> Map PeerAddr PeerAdvertise -> Bool
forall a. Eq a => a -> a -> Bool
== Map PeerAddr PeerAdvertise
pp'
Bool -> Bool -> Bool
&& PublicRootPeers PeerAddr -> Set PeerAddr
forall peeraddr. PublicRootPeers peeraddr -> Set peeraddr
PublicRootPeers.getBootstrapPeers PublicRootPeers PeerAddr
prp Set PeerAddr -> Set PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== Set PeerAddr
bsp'
Bool -> Bool -> Bool
&& PublicRootPeers PeerAddr -> Set PeerAddr
forall peeraddr. PublicRootPeers peeraddr -> Set peeraddr
PublicRootPeers.getLedgerPeers PublicRootPeers PeerAddr
prp Set PeerAddr -> Set PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== Set PeerAddr
lp'
Bool -> Bool -> Bool
&& PublicRootPeers PeerAddr -> Set PeerAddr
forall peeraddr. PublicRootPeers peeraddr -> Set peeraddr
PublicRootPeers.getBigLedgerPeers PublicRootPeers PeerAddr
prp Set PeerAddr -> Set PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== Set PeerAddr
blp
prop_merge :: PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr -> Bool
prop_merge :: PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr -> Bool
prop_merge PublicRootPeers PeerAddr
prp = PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant
(PublicRootPeers PeerAddr -> Bool)
-> (PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr)
-> PublicRootPeers PeerAddr
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PublicRootPeers PeerAddr
-> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall a. Semigroup a => a -> a -> a
<> PublicRootPeers PeerAddr
prp)
prop_insertPublicConfigPeer :: PublicRootPeers PeerAddr
-> PeerAddr
-> PeerAdvertise
-> Bool
prop_insertPublicConfigPeer :: PublicRootPeers PeerAddr -> PeerAddr -> PeerAdvertise -> Bool
prop_insertPublicConfigPeer PublicRootPeers PeerAddr
prp PeerAddr
p PeerAdvertise
pa =
PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant (PeerAddr
-> PeerAdvertise
-> PublicRootPeers PeerAddr
-> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr
-> PeerAdvertise
-> PublicRootPeers peeraddr
-> PublicRootPeers peeraddr
PublicRootPeers.insertPublicConfigPeer PeerAddr
p PeerAdvertise
pa PublicRootPeers PeerAddr
prp)
prop_insertBootstrapPeer :: PublicRootPeers PeerAddr
-> PeerAddr
-> Bool
prop_insertBootstrapPeer :: PublicRootPeers PeerAddr -> PeerAddr -> Bool
prop_insertBootstrapPeer PublicRootPeers PeerAddr
prp PeerAddr
p =
PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant (PeerAddr -> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr -> PublicRootPeers peeraddr -> PublicRootPeers peeraddr
PublicRootPeers.insertBootstrapPeer PeerAddr
p PublicRootPeers PeerAddr
prp)
prop_insertLedgerPeer :: PublicRootPeers PeerAddr
-> PeerAddr
-> Bool
prop_insertLedgerPeer :: PublicRootPeers PeerAddr -> PeerAddr -> Bool
prop_insertLedgerPeer PublicRootPeers PeerAddr
prp PeerAddr
p =
PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant (PeerAddr -> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr -> PublicRootPeers peeraddr -> PublicRootPeers peeraddr
PublicRootPeers.insertLedgerPeer PeerAddr
p PublicRootPeers PeerAddr
prp)
prop_insertBigLedgerPeer :: PublicRootPeers PeerAddr
-> PeerAddr
-> Bool
prop_insertBigLedgerPeer :: PublicRootPeers PeerAddr -> PeerAddr -> Bool
prop_insertBigLedgerPeer PublicRootPeers PeerAddr
prp PeerAddr
p =
PublicRootPeers PeerAddr -> Bool
forall peeraddr. Ord peeraddr => PublicRootPeers peeraddr -> Bool
PublicRootPeers.invariant (PeerAddr -> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr -> PublicRootPeers peeraddr -> PublicRootPeers peeraddr
PublicRootPeers.insertBigLedgerPeer PeerAddr
p PublicRootPeers PeerAddr
prp)
prop_fromPeers :: PeerAddr
-> PeerAdvertise
-> Bool
prop_fromPeers :: PeerAddr -> PeerAdvertise -> Bool
prop_fromPeers PeerAddr
peer PeerAdvertise
peerAdvertise =
let insertPP :: PublicRootPeers PeerAddr
insertPP = PeerAddr
-> PeerAdvertise
-> PublicRootPeers PeerAddr
-> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr
-> PeerAdvertise
-> PublicRootPeers peeraddr
-> PublicRootPeers peeraddr
PublicRootPeers.insertPublicConfigPeer PeerAddr
peer PeerAdvertise
peerAdvertise PublicRootPeers PeerAddr
forall peeraddr. PublicRootPeers peeraddr
PublicRootPeers.empty
insertBSP :: PublicRootPeers PeerAddr
insertBSP = PeerAddr -> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr -> PublicRootPeers peeraddr -> PublicRootPeers peeraddr
PublicRootPeers.insertBootstrapPeer PeerAddr
peer PublicRootPeers PeerAddr
forall peeraddr. PublicRootPeers peeraddr
PublicRootPeers.empty
insertLP :: PublicRootPeers PeerAddr
insertLP = PeerAddr -> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr -> PublicRootPeers peeraddr -> PublicRootPeers peeraddr
PublicRootPeers.insertLedgerPeer PeerAddr
peer PublicRootPeers PeerAddr
forall peeraddr. PublicRootPeers peeraddr
PublicRootPeers.empty
insertBLP :: PublicRootPeers PeerAddr
insertBLP = PeerAddr -> PublicRootPeers PeerAddr -> PublicRootPeers PeerAddr
forall peeraddr.
Ord peeraddr =>
peeraddr -> PublicRootPeers peeraddr -> PublicRootPeers peeraddr
PublicRootPeers.insertBigLedgerPeer PeerAddr
peer PublicRootPeers PeerAddr
forall peeraddr. PublicRootPeers peeraddr
PublicRootPeers.empty
in PublicRootPeers PeerAddr -> Map PeerAddr PeerAdvertise
forall peeraddr.
PublicRootPeers peeraddr -> Map peeraddr PeerAdvertise
PublicRootPeers.getPublicConfigPeers PublicRootPeers PeerAddr
insertPP Map PeerAddr PeerAdvertise -> Map PeerAddr PeerAdvertise -> Bool
forall a. Eq a => a -> a -> Bool
== PeerAddr -> PeerAdvertise -> Map PeerAddr PeerAdvertise
forall k a. k -> a -> Map k a
Map.singleton PeerAddr
peer PeerAdvertise
peerAdvertise
Bool -> Bool -> Bool
&& PublicRootPeers PeerAddr -> Set PeerAddr
forall peeraddr. PublicRootPeers peeraddr -> Set peeraddr
PublicRootPeers.getBootstrapPeers PublicRootPeers PeerAddr
insertBSP Set PeerAddr -> Set PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== PeerAddr -> Set PeerAddr
forall a. a -> Set a
Set.singleton PeerAddr
peer
Bool -> Bool -> Bool
&& PublicRootPeers PeerAddr -> Set PeerAddr
forall peeraddr. PublicRootPeers peeraddr -> Set peeraddr
PublicRootPeers.getLedgerPeers PublicRootPeers PeerAddr
insertLP Set PeerAddr -> Set PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== PeerAddr -> Set PeerAddr
forall a. a -> Set a
Set.singleton PeerAddr
peer
Bool -> Bool -> Bool
&& PublicRootPeers PeerAddr -> Set PeerAddr
forall peeraddr. PublicRootPeers peeraddr -> Set peeraddr
PublicRootPeers.getBigLedgerPeers PublicRootPeers PeerAddr
insertBLP Set PeerAddr -> Set PeerAddr -> Bool
forall a. Eq a => a -> a -> Bool
== PeerAddr -> Set PeerAddr
forall a. a -> Set a
Set.singleton PeerAddr
peer