Skip to content

Commit

Permalink
Added dns reslution tests
Browse files Browse the repository at this point in the history
Added new TraceLocalRootGroups to track local root peer group updates
after a successful DNS lookup. This Trace is important for testing
purposes as well.

Added localRootPeersProvider test environment and tests

Added tests and mocks for publicRootPeersProvider and
resolveDomainAddresses.

Code styling and refactoring
  • Loading branch information
bolt12 committed May 14, 2021
1 parent 49076db commit d633172
Show file tree
Hide file tree
Showing 4 changed files with 488 additions and 3 deletions.
3 changes: 2 additions & 1 deletion ouroboros-network/ouroboros-network.cabal
Expand Up @@ -269,7 +269,7 @@ test-suite test
Test.Ouroboros.Network.PeerSelection
Test.Ouroboros.Network.PeerSelection.Instances
Test.Ouroboros.Network.PeerSelection.LocalRootPeers
Test.Ouroboros.Network.PeerSelection.RootPeerDNS
Test.Ouroboros.Network.PeerSelection.RootPeersDNS
Test.Ouroboros.Network.PeerSelection.Json
Test.Ouroboros.Network.PeerSelection.MockEnvironment
Test.Ouroboros.Network.PeerSelection.PeerGraph
Expand Down Expand Up @@ -313,6 +313,7 @@ test-suite test
tasty-hunit,
tasty-quickcheck,
text,
time,

cardano-binary,
cardano-prelude,
Expand Down
Expand Up @@ -384,6 +384,8 @@ data TraceLocalRootPeers exception =
-- ^ 'Int' is the configured valency for the local producer groups
| TraceLocalRootWaiting DomainAddress DiffTime
| TraceLocalRootResult DomainAddress [(IPv4, DNS.TTL)]
| TraceLocalRootGroups (Seq (Int, Map Socket.SockAddr PeerAdvertise))
-- ^ This traces the results of the local root peer provider
| TraceLocalRootFailure DomainAddress (DNSorIOError exception)
--TODO: classify DNS errors, config error vs transitory
deriving Show
Expand Down Expand Up @@ -449,6 +451,7 @@ localRootPeersProvider tracer
RelayDomain {} -> False
)

traceWith tracer (TraceLocalRootGroups rootPeersGroups)
atomically $
writeTVar rootPeersGroupsVar rootPeersGroups

Expand Down Expand Up @@ -516,7 +519,7 @@ localRootPeersProvider tracer
case reply of
Left err -> go rrNext (ttlForDnsError err ttl)
Right results -> do
atomically $ do
tmpTracer <- atomically $ do
rootPeersGroups <- readTVar rootPeersGroupsVar
let (target, entry) = rootPeersGroups `Seq.index` index
resultsMap = Map.fromList (map fst results)
Expand All @@ -532,10 +535,14 @@ localRootPeersProvider tracer
tmpTracer =
contramap (const $ TraceLocalRootGroups rootPeersGroups')
tracer

-- Only overwrite if it changed:
when (entry /= resultsMap) $
writeTVar rootPeersGroupsVar rootPeersGroups'

return tmpTracer

traceWith tmpTracer ()
go rrNext (ttlForResults (map snd results))


Expand Down
Expand Up @@ -48,6 +48,7 @@ import Ouroboros.Network.PeerSelection.RootPeersDNS

import Test.Ouroboros.Network.PeerSelection.Instances
import qualified Test.Ouroboros.Network.PeerSelection.LocalRootPeers
import qualified Test.Ouroboros.Network.PeerSelection.RootPeersDNS
import qualified Test.Ouroboros.Network.PeerSelection.Json
import Test.Ouroboros.Network.PeerSelection.MockEnvironment hiding (tests)
import qualified Test.Ouroboros.Network.PeerSelection.MockEnvironment
Expand All @@ -63,6 +64,7 @@ tests :: TestTree
tests =
testGroup "Ouroboros.Network.PeerSelection"
[ Test.Ouroboros.Network.PeerSelection.LocalRootPeers.tests
, Test.Ouroboros.Network.PeerSelection.RootPeersDNS.tests
, Test.Ouroboros.Network.PeerSelection.MockEnvironment.tests
, testGroup "basic"
[ testProperty "has output" prop_governor_hasoutput
Expand Down Expand Up @@ -1917,7 +1919,7 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains =
tracer :: Show a => Tracer IO a
tracer = Tracer (BS.putStrLn . BS.pack . show)

dnsActions :: DNSActions ResolvConf DNS.Resolver IOException IO
dnsActions :: DNSActions DNS.Resolver IOException IO
dnsActions = DNSActions {
dnsResolverResource = resolverResource,
dnsAsyncResolverResource = asyncResolverResource,
Expand Down

0 comments on commit d633172

Please sign in to comment.