From 48b3ec4a535e54652a909d538ffb512acc8cef27 Mon Sep 17 00:00:00 2001 From: Armando Santos Date: Mon, 2 Oct 2023 15:46:40 +0100 Subject: [PATCH 1/4] Updates ouroboros-network to fix PeerSharing --- ..._armandoifsantos_fix_peerSharing_handshake.md | 15 +++++++++++++++ .../Cardano/Tools/ImmDBServer/Diffusion.hs | 2 +- .../Cardano/Tools/ImmDBServer/MiniProtocols.hs | 6 +++--- ..._armandoifsantos_fix_peerSharing_handshake.md | 16 ++++++++++++++++ .../Ouroboros/Consensus/Network/NodeToNode.hs | 8 ++++---- .../Ouroboros/Consensus/Node.hs | 13 +++++++------ .../Test/ThreadNet/Network.hs | 4 ++-- 7 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 ouroboros-consensus-cardano/changelog.d/20231002_154149_armandoifsantos_fix_peerSharing_handshake.md create mode 100644 ouroboros-consensus-diffusion/changelog.d/20231002_154502_armandoifsantos_fix_peerSharing_handshake.md diff --git a/ouroboros-consensus-cardano/changelog.d/20231002_154149_armandoifsantos_fix_peerSharing_handshake.md b/ouroboros-consensus-cardano/changelog.d/20231002_154149_armandoifsantos_fix_peerSharing_handshake.md new file mode 100644 index 0000000000..59fb057713 --- /dev/null +++ b/ouroboros-consensus-cardano/changelog.d/20231002_154149_armandoifsantos_fix_peerSharing_handshake.md @@ -0,0 +1,15 @@ + + + +### Non-Breaking + +- Updates dependency on `ouroboros-network-api` to `0.6.0`. diff --git a/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/Diffusion.hs b/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/Diffusion.hs index d294aa20cb..edcf89e551 100644 --- a/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/Diffusion.hs +++ b/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/Diffusion.hs @@ -28,7 +28,7 @@ import Ouroboros.Network.ErrorPolicy (nullErrorPolicies) import Ouroboros.Network.IOManager (withIOManager) import Ouroboros.Network.Mux import qualified Ouroboros.Network.NodeToNode as N2N -import Ouroboros.Network.PeerSelection.PeerSharing +import Ouroboros.Network.PeerSelection.PeerSharing.Codec (decodeRemoteAddress, encodeRemoteAddress) import qualified Ouroboros.Network.Snocket as Snocket import Ouroboros.Network.Socket (configureSocket) diff --git a/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/MiniProtocols.hs b/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/MiniProtocols.hs index 2a900fd84b..33cbed13ad 100644 --- a/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/MiniProtocols.hs +++ b/ouroboros-consensus-cardano/src/unstable-cardano-tools/Cardano/Tools/ImmDBServer/MiniProtocols.hs @@ -67,8 +67,8 @@ immDBServer :: , SupportedNetworkProtocolVersion blk ) => CodecConfig blk - -> (addr -> CBOR.Encoding) - -> (forall s . CBOR.Decoder s addr) + -> (NodeToNodeVersion -> addr -> CBOR.Encoding) + -> (NodeToNodeVersion -> forall s . CBOR.Decoder s addr) -> ImmutableDB m blk -> NetworkMagic -> Versions NodeToNodeVersion NodeToNodeVersionData @@ -90,7 +90,7 @@ immDBServer codecCfg encAddr decAddr immDB networkMagic = do stdVersionDataNTN networkMagic N2N.InitiatorOnlyDiffusionMode - NoPeerSharing + PeerSharingDisabled } application :: diff --git a/ouroboros-consensus-diffusion/changelog.d/20231002_154502_armandoifsantos_fix_peerSharing_handshake.md b/ouroboros-consensus-diffusion/changelog.d/20231002_154502_armandoifsantos_fix_peerSharing_handshake.md new file mode 100644 index 0000000000..3d40209a22 --- /dev/null +++ b/ouroboros-consensus-diffusion/changelog.d/20231002_154502_armandoifsantos_fix_peerSharing_handshake.md @@ -0,0 +1,16 @@ + + + +### Breaking + +- Adds `NodeToNodeVersion` to the arguments of `defaultCodecs` and `runWith` functions. + diff --git a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Network/NodeToNode.hs b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Network/NodeToNode.hs index efa3921b8d..cc4eb2dce7 100644 --- a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Network/NodeToNode.hs +++ b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Network/NodeToNode.hs @@ -278,12 +278,12 @@ defaultCodecs :: forall m blk addr. ) => CodecConfig blk -> BlockNodeToNodeVersion blk - -> (addr -> CBOR.Encoding) - -> (forall s . CBOR.Decoder s addr) + -> (NodeToNodeVersion -> addr -> CBOR.Encoding) + -> (NodeToNodeVersion -> forall s . CBOR.Decoder s addr) -> NodeToNodeVersion -> Codecs blk addr DeserialiseFailure m ByteString ByteString ByteString ByteString ByteString ByteString ByteString -defaultCodecs ccfg version encAddr decAddr _nodeToNodeVersion = Codecs { +defaultCodecs ccfg version encAddr decAddr nodeToNodeVersion = Codecs { cChainSyncCodec = codecChainSync enc @@ -325,7 +325,7 @@ defaultCodecs ccfg version encAddr decAddr _nodeToNodeVersion = Codecs { , cKeepAliveCodec = codecKeepAlive_v2 - , cPeerSharingCodec = codecPeerSharing encAddr decAddr + , cPeerSharingCodec = codecPeerSharing (encAddr nodeToNodeVersion) (decAddr nodeToNodeVersion) } where p :: Proxy blk diff --git a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs index 1560e0ef11..4fd56d6581 100644 --- a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs +++ b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs @@ -118,8 +118,9 @@ import Ouroboros.Network.PeerSelection.LedgerPeers (LedgerPeersConsensusInterface (..)) import Ouroboros.Network.PeerSelection.PeerMetric (PeerMetrics, newPeerMetric, reportMetric) -import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing, - decodeRemoteAddress, encodeRemoteAddress) +import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing) +import Ouroboros.Network.PeerSelection.PeerSharing.Codec + (encodeRemoteAddress, decodeRemoteAddress) import Ouroboros.Network.Protocol.Limits (shortWait) import Ouroboros.Network.Protocol.PeerSharing.Type (PeerSharingAmount) import Ouroboros.Network.RethrowPolicy @@ -309,8 +310,8 @@ runWith :: forall m addrNTN addrNTC versionDataNTN versionDataNTC blk p2p. , NetworkAddr addrNTN ) => RunNodeArgs m addrNTN addrNTC blk p2p - -> (addrNTN -> CBOR.Encoding) - -> (forall s . CBOR.Decoder s addrNTN) + -> (NodeToNodeVersion -> addrNTN -> CBOR.Encoding) + -> (NodeToNodeVersion -> forall s . CBOR.Decoder s addrNTN) -> LowLevelRunNodeArgs m addrNTN addrNTC versionDataNTN versionDataNTC blk p2p -> m () runWith RunNodeArgs{..} encAddrNtN decAddrNtN LowLevelRunNodeArgs{..} = @@ -420,8 +421,8 @@ runWith RunNodeArgs{..} encAddrNtN decAddrNtN LowLevelRunNodeArgs{..} = :: NodeKernelArgs m addrNTN (ConnectionId addrNTC) blk -> NodeKernel m addrNTN (ConnectionId addrNTC) blk -> PeerMetrics m addrNTN - -> (addrNTN -> CBOR.Encoding) - -> (forall s . CBOR.Decoder s addrNTN) + -> (NodeToNodeVersion -> addrNTN -> CBOR.Encoding) + -> (NodeToNodeVersion -> forall s . CBOR.Decoder s addrNTN) -> BlockNodeToNodeVersion blk -> (PeerSharingAmount -> m [addrNTN]) -- ^ Peer Sharing result computation callback diff --git a/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs b/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs index 0fc7cee78f..5283414396 100644 --- a/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs +++ b/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs @@ -1097,7 +1097,7 @@ runThreadNetwork systemTime ThreadNetworkArgs NTN.cPeerSharingCodec NTN.identityCodecs } where - binaryProtocolCodecs = NTN.defaultCodecs (configCodec cfg) blockVersion encodeNodeId decodeNodeId ntnVersion + binaryProtocolCodecs = NTN.defaultCodecs (configCodec cfg) blockVersion (const encodeNodeId) (const decodeNodeId) ntnVersion -- | Sum of 'CodecFailure' (from @identityCodecs@) and 'DeserialiseFailure' -- (from @defaultCodecs@). @@ -1347,7 +1347,7 @@ directedEdgeInner registry clock (version, blockVersion) (cfg, calcMessageDelay) _ -> pure () where codec = - NTN.cChainSyncCodec $ NTN.defaultCodecs cfg blockVersion encodeNodeId decodeNodeId version + NTN.cChainSyncCodec $ NTN.defaultCodecs cfg blockVersion (const encodeNodeId) (const decodeNodeId) version -- | Variant of 'createConnectChannels' with intermediate queues for -- delayed-but-in-order messages From 583207202243b5c47677967676670b6bf7abe9c0 Mon Sep 17 00:00:00 2001 From: Armando Santos Date: Wed, 11 Oct 2023 11:07:28 +0100 Subject: [PATCH 2/4] Update dependencies --- cabal.project | 5 +- flake.lock | 62 ++++++++++++------- .../ouroboros-consensus-cardano.cabal | 2 +- .../ouroboros-consensus-diffusion.cabal | 8 +-- ouroboros-consensus/ouroboros-consensus.cabal | 4 +- 5 files changed, 50 insertions(+), 31 deletions(-) diff --git a/cabal.project b/cabal.project index ec0d0e5397..8565ae0107 100644 --- a/cabal.project +++ b/cabal.project @@ -14,9 +14,9 @@ repository cardano-haskell-packages -- update either of these. index-state: -- Bump this if you need newer packages from Hackage - , hackage.haskell.org 2023-08-02T14:18:01Z + , hackage.haskell.org 2023-11-07T14:32:35Z -- Bump this if you need newer packages from CHaP - , cardano-haskell-packages 2023-10-26T00:00:00Z + , cardano-haskell-packages 2023-11-03T12:09:05Z packages: ouroboros-consensus @@ -31,3 +31,4 @@ tests: true benchmarks: true import: ./asserts.cabal + diff --git a/flake.lock b/flake.lock index 3f1b8b02bc..1c6613e195 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "CHaP": { "flake": false, "locked": { - "lastModified": 1698276970, - "narHash": "sha256-OKdThNlVH/5OMYa/BdOZ53NSHwm/A8NzalwRGsmIyv4=", + "lastModified": 1699014040, + "narHash": "sha256-Be4mtEsXIQbjy9c4AtZ6dIKDjEfArZ/D1qEkdhdsB8o=", "owner": "input-output-hk", "repo": "cardano-haskell-packages", - "rev": "1eafa034282bb8abcdd5e43fea48ab0315997804", + "rev": "653fe92c94baff7e89a9ff199a7bdcdadbd3fc1b", "type": "github" }, "original": { @@ -185,14 +185,14 @@ "type": "github" } }, - "ghc980": { + "ghc98X": { "flake": false, "locked": { - "lastModified": 1692910316, - "narHash": "sha256-Qv8I3GzzIIN32RTEKI38BW5nO1f7j6Xm+dDeDUyYZWo=", + "lastModified": 1696643148, + "narHash": "sha256-E02DfgISH7EvvNAu0BHiPvl1E5FGMDi0pWdNZtIBC9I=", "ref": "ghc-9.8", - "rev": "249aa8193e4c5c1ee46ce29b39d2fffa57de7904", - "revCount": 61566, + "rev": "443e870d977b1ab6fc05f47a9a17bc49296adbd6", + "revCount": 61642, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" @@ -207,11 +207,11 @@ "ghc99": { "flake": false, "locked": { - "lastModified": 1695427505, - "narHash": "sha256-j0hXl6uEI+Uwf37z3WLuQZN4S0XqGtiepELv2Gl2aHU=", + "lastModified": 1697054644, + "narHash": "sha256-kKarOuXUaAH3QWv7ASx+gGFMHaHKe0pK5Zu37ky2AL4=", "ref": "refs/heads/master", - "rev": "b8e4fe2318798185228fb5f8214ba2384ac95b4f", - "revCount": 61951, + "rev": "f383a242c76f90bcca8a4d7ee001dcb49c172a9a", + "revCount": 62040, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" @@ -225,11 +225,11 @@ "hackageNix": { "flake": false, "locked": { - "lastModified": 1696897370, - "narHash": "sha256-650XzXDHx98os6VAjNvlDNmOv2FMXO6h2DkcZUd0qok=", + "lastModified": 1699316521, + "narHash": "sha256-WnSX8htpCWu9AFymD6pIO/42UPmeRKsefQ9ANLO9kRE=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "cc114a9a1fadc3bd883476497b2ab09608735f79", + "rev": "3c77651bc68c1a186bc47c58c6b5885610371135", "type": "github" }, "original": { @@ -247,7 +247,7 @@ "cardano-shell": "cardano-shell", "flake-compat": "flake-compat_2", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk", - "ghc980": "ghc980", + "ghc98X": "ghc98X", "ghc99": "ghc99", "hackage": [ "hackageNix" @@ -256,6 +256,7 @@ "hls-2.0": "hls-2.0", "hls-2.2": "hls-2.2", "hls-2.3": "hls-2.3", + "hls-2.4": "hls-2.4", "hpc-coveralls": "hpc-coveralls", "hydra": "hydra", "iserv-proxy": "iserv-proxy", @@ -274,11 +275,11 @@ "stackage": "stackage" }, "locked": { - "lastModified": 1696938432, - "narHash": "sha256-OmRJCHUhgPphfzBegfL6MF30A+ui5rloWSf6h2/PO5k=", + "lastModified": 1699361090, + "narHash": "sha256-VCU2LGbNDfYl9nq08NNe5hEuVspFIRdG3XNc9Dw92t4=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "f9ae9f1e8479d31f43eda55efc28b3a44495d63e", + "rev": "ab435f0db929bd0cba145aa3bb52f5bba1bd9445", "type": "github" }, "original": { @@ -355,6 +356,23 @@ "type": "github" } }, + "hls-2.4": { + "flake": false, + "locked": { + "lastModified": 1696939266, + "narHash": "sha256-VOMf5+kyOeOmfXTHlv4LNFJuDGa7G3pDnOxtzYR40IU=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "362fdd1293efb4b82410b676ab1273479f6d17ee", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "2.4.0.0", + "repo": "haskell-language-server", + "type": "github" + } + }, "hpc-coveralls": { "flake": false, "locked": { @@ -683,11 +701,11 @@ "stackage": { "flake": false, "locked": { - "lastModified": 1696896539, - "narHash": "sha256-dr7SiY6c+KndtOHaxWIT1t4XDM2Kx9LdDZzM1Uk4oFM=", + "lastModified": 1699315744, + "narHash": "sha256-0xEqO5sQMEqZ/lJ3eTu8PDPPPzihNtAV9jPzl1EgIdU=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "0ba46ba4a66fa51aa4699d52e07ab03c349f7303", + "rev": "d0c681637ff5921b12f6ed0772e393a31b495b16", "type": "github" }, "original": { diff --git a/ouroboros-consensus-cardano/ouroboros-consensus-cardano.cabal b/ouroboros-consensus-cardano/ouroboros-consensus-cardano.cabal index 0837bdfdd1..b70f7067b6 100644 --- a/ouroboros-consensus-cardano/ouroboros-consensus-cardano.cabal +++ b/ouroboros-consensus-cardano/ouroboros-consensus-cardano.cabal @@ -140,7 +140,7 @@ library , nothunks , ouroboros-consensus ^>=0.13 , ouroboros-consensus-protocol ^>=0.6.0.0 - , ouroboros-network-api ^>=0.5.1 + , ouroboros-network-api ^>=0.6.0 , serialise ^>=0.2 , small-steps , sop-core ^>=0.5 diff --git a/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal b/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal index 6ebbbcafe4..6bb99a248c 100644 --- a/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal +++ b/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal @@ -77,10 +77,10 @@ library , io-classes ^>=1.2 , mtl , ouroboros-consensus ^>=0.13 - , ouroboros-network ^>=0.9.1 - , ouroboros-network-api ^>=0.5.1 - , ouroboros-network-framework ^>=0.9 - , ouroboros-network-protocols ^>=0.5.2 + , ouroboros-network ^>=0.10.0 + , ouroboros-network-api ^>=0.6.0 + , ouroboros-network-framework ^>=0.10 + , ouroboros-network-protocols ^>=0.6.0 , random , serialise ^>=0.2 , si-timers ^>=1.2 diff --git a/ouroboros-consensus/ouroboros-consensus.cabal b/ouroboros-consensus/ouroboros-consensus.cabal index 9cc4d8c590..40b1513361 100644 --- a/ouroboros-consensus/ouroboros-consensus.cabal +++ b/ouroboros-consensus/ouroboros-consensus.cabal @@ -261,9 +261,9 @@ library , measures , mtl , nothunks ^>=0.1.2 - , ouroboros-network-api ^>=0.5.1 + , ouroboros-network-api ^>=0.6.0 , ouroboros-network-mock ^>=0.1.0.1 - , ouroboros-network-protocols ^>=0.5 + , ouroboros-network-protocols ^>=0.6 , psqueues ^>=0.2.3 , quiet ^>=0.2 , semialign >=1.1 From 710ed2511843723564e9b915897de898777f7474 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Fri, 10 Nov 2023 11:00:37 +0100 Subject: [PATCH 3/4] Constraint nothunks --- cabal.project | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cabal.project b/cabal.project index 8565ae0107..dfe48d5117 100644 --- a/cabal.project +++ b/cabal.project @@ -32,3 +32,7 @@ benchmarks: true import: ./asserts.cabal +constraints: + -- Plutus is incompatible with 0.1.5 because of the NoThunks (Identity a) + -- instance, once they fix that we shall remove this constraint. + nothunks == 0.1.4 From 6c74d8b54ae2ca7148622aed113ab7cfb41381a2 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Fri, 10 Nov 2023 12:20:57 +0100 Subject: [PATCH 4/4] Add idle timeouts --- .../ouroboros-consensus-diffusion.cabal | 6 +++--- .../Ouroboros/Consensus/Node.hs | 3 ++- .../unstable-diffusion-testlib/Test/ThreadNet/Network.hs | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal b/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal index 6bb99a248c..346d93069f 100644 --- a/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal +++ b/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal @@ -65,10 +65,10 @@ library , Ouroboros.Consensus.Node.NetworkProtocolVersion build-depends: - , base >=4.14 && <4.19 - , bytestring >=0.10 && <0.12 + , base >=4.14 && <4.19 + , bytestring >=0.10 && <0.12 , cborg ^>=0.2.2 - , containers >=0.5 && <0.7 + , containers >=0.5 && <0.7 , contra-tracer , deepseq , filepath diff --git a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs index 4fd56d6581..911d6a972d 100644 --- a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs +++ b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs @@ -120,7 +120,7 @@ import Ouroboros.Network.PeerSelection.PeerMetric (PeerMetrics, newPeerMetric, reportMetric) import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing) import Ouroboros.Network.PeerSelection.PeerSharing.Codec - (encodeRemoteAddress, decodeRemoteAddress) + (decodeRemoteAddress, encodeRemoteAddress) import Ouroboros.Network.Protocol.Limits (shortWait) import Ouroboros.Network.Protocol.PeerSharing.Type (PeerSharingAmount) import Ouroboros.Network.RethrowPolicy @@ -740,6 +740,7 @@ stdChainSyncTimeout = do { canAwaitTimeout = shortWait , intersectTimeout = shortWait , mustReplyTimeout + , idleTimeout = Just 3673 } stdVersionDataNTN :: NetworkMagic diff --git a/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs b/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs index 5283414396..e8543daa1d 100644 --- a/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs +++ b/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs @@ -1014,6 +1014,7 @@ runThreadNetwork systemTime ThreadNetworkArgs { canAwaitTimeout = waitForever , intersectTimeout = waitForever , mustReplyTimeout = waitForever + , idleTimeout = waitForever }) nullMetric -- The purpose of this test is not testing protocols, so