7
7
8
8
module Test.Cardano.Node.Gen
9
9
( genNetworkTopology
10
+ , genNetworkTopologyEncoding
10
11
, genNodeHostIPv4Address
11
12
, genNodeHostIPv6Address
12
13
, genNodeHostIPAddress
@@ -16,6 +17,11 @@ module Test.Cardano.Node.Gen
16
17
, genNodeSetup
17
18
) where
18
19
20
+ import qualified Data.Aeson as Aeson
21
+ import qualified Data.Aeson.KeyMap as Aeson.KeyMap
22
+ import qualified Data.Vector as Vector
23
+ import qualified Data.ByteString.Lazy as LBS
24
+
19
25
import Cardano.Prelude
20
26
21
27
import Cardano.Node.Configuration.TopologyP2P (NetworkTopology (.. ), PublicRootPeers (.. ),
@@ -46,6 +52,53 @@ genNetworkTopology =
46
52
<*> genUseLedger
47
53
]
48
54
55
+ -- | Generate valid encodings of p2p topology files
56
+ --
57
+ genNetworkTopologyEncoding :: Gen LBS. ByteString
58
+ genNetworkTopologyEncoding = Aeson. encode <$> genNetworkTopologyValue
59
+
60
+ -- | Generate a Aeson.Object which encodes a p2p topology.
61
+ --
62
+ genNetworkTopologyValue :: Gen Aeson. Object
63
+ genNetworkTopologyValue =
64
+ (\ a b c -> Aeson.KeyMap. fromList
65
+ [ (" LocalRoots" , Aeson. Array . Vector. fromList $ a)
66
+ , (" PublicRoots" , Aeson. Array . Vector. fromList $ b)
67
+ , (" useLedgerAfter" , Aeson. Number . fromIntegral $ c)
68
+ ]
69
+ ) <$> Gen. list (Range. constantFrom 0 0 10 ) genLocalRootsValue
70
+ <*> Gen. list (Range. constantFrom 0 0 10 ) genPublicRootsValue
71
+ <*> Gen. int (Range. constantFrom 0 0 100 )
72
+ where
73
+ genLocalRootsValue :: Gen Aeson. Value
74
+ genLocalRootsValue =
75
+ (\ a b c -> Aeson. Object $ Aeson.KeyMap. fromList
76
+ [ (" accessPoints" , Aeson. Array . Vector. fromList $ a)
77
+ , (" advertise" , Aeson. Bool b)
78
+ , (" valency" , Aeson. Number (fromIntegral c))
79
+ ]
80
+ ) <$> Gen. list (Range. constantFrom 0 0 10 ) genAccessPointValue
81
+ <*> Gen. bool
82
+ <*> Gen. int (Range. constantFrom 0 0 100 )
83
+
84
+ genPublicRootsValue :: Gen Aeson. Value
85
+ genPublicRootsValue =
86
+ (\ a b -> Aeson. Object $ Aeson.KeyMap. fromList
87
+ [ (" accessPoints" , Aeson. Array . Vector. fromList $ a)
88
+ , (" advertise" , Aeson. Bool b)
89
+ ]
90
+ ) <$> Gen. list (Range. constantFrom 0 0 10 ) genAccessPointValue
91
+ <*> Gen. bool
92
+
93
+ genAccessPointValue :: Gen Aeson. Value
94
+ genAccessPointValue =
95
+ (\ a -> Aeson. Object $ Aeson.KeyMap. fromList
96
+ [ (" address" , Aeson. String (show $ naHostAddress a))
97
+ , (" port" , Aeson. Number (fromIntegral $ naPort a))
98
+ ]
99
+ ) <$> genNodeIPAddress
100
+
101
+
49
102
genNodeAddress' :: Gen addr -> Gen (NodeAddress' addr )
50
103
genNodeAddress' genAddr =
51
104
NodeAddress
0 commit comments