Skip to content

Commit 14451ea

Browse files
authoredDec 27, 2023
Merge pull request #1224 from input-output-hk/fix-smoke-tests
Wait for cardano-node sync
2 parents f15b322 + e6fcb0e commit 14451ea

File tree

13 files changed

+65
-48
lines changed

13 files changed

+65
-48
lines changed
 

‎hydra-cluster/bench/Bench/EndToEnd.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import Hydra.Prelude
66
import Test.Hydra.Prelude
77

88
import Bench.Summary (Summary (..), makeQuantiles)
9-
import CardanoClient (awaitTransaction, submitTransaction, submitTx)
10-
import CardanoNode (RunningNode (..), withCardanoNodeDevnet)
9+
import CardanoClient (RunningNode (..), awaitTransaction, submitTransaction, submitTx)
10+
import CardanoNode (withCardanoNodeDevnet)
1111
import Control.Concurrent.Class.MonadSTM (
1212
MonadSTM (readTVarIO),
1313
check,

‎hydra-cluster/exe/hydra-cluster/Main.hs

-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ module Main where
22

33
import Hydra.Prelude
44

5-
import CardanoClient (waitForFullySynchronized)
65
import CardanoNode (withCardanoNodeDevnet, withCardanoNodeOnKnownNetwork)
76
import Hydra.Cluster.Faucet (publishHydraScriptsAs)
87
import Hydra.Cluster.Fixture (Actor (Faucet))
@@ -25,7 +24,6 @@ run options =
2524
case knownNetwork of
2625
Just network ->
2726
withCardanoNodeOnKnownNetwork fromCardanoNode workDir network $ \node -> do
28-
waitForFullySynchronized fromCardanoNode node
2927
publishOrReuseHydraScripts tracer node
3028
>>= singlePartyHeadFullLifeCycle tracer workDir node
3129
Nothing ->

‎hydra-cluster/src/CardanoClient.hs

+27-3
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ import Hydra.Cardano.Api hiding (Block)
1515
import Hydra.Chain.CardanoClient
1616

1717
import Cardano.Api.UTxO qualified as UTxO
18+
import Cardano.Ledger.Core (PParams)
1819
import Cardano.Slotting.Time (RelativeTime (getRelativeTime), diffRelativeTime, toRelativeTime)
19-
import CardanoNode (NodeLog (..), RunningNode (..))
20+
import Data.Fixed (Centi)
2021
import Data.Map qualified as Map
22+
import Hydra.Cardano.Api qualified as Api
2123
import Hydra.Chain.CardanoClient qualified as CardanoClient
2224
import Hydra.Logging (Tracer, traceWith)
2325

@@ -164,13 +166,35 @@ mkGenesisTx networkId pparams signingKey initialAmount recipients =
164166
TxOutDatumNone
165167
ReferenceScriptNone
166168

169+
data RunningNode = RunningNode
170+
{ nodeSocket :: SocketPath
171+
, networkId :: NetworkId
172+
, pparams :: PParams Api.LedgerEra
173+
}
174+
175+
-- Logging
176+
177+
data NodeLog
178+
= MsgNodeCmdSpec Text
179+
| MsgCLI [Text]
180+
| MsgCLIStatus Text Text
181+
| MsgCLIRetry Text
182+
| MsgCLIRetryResult Text Int
183+
| MsgNodeStarting {stateDirectory :: FilePath}
184+
| MsgSocketIsReady FilePath
185+
| MsgSynchronizing {percentDone :: Centi}
186+
| MsgNodeIsReady
187+
deriving stock (Eq, Show, Generic)
188+
deriving anyclass (ToJSON, FromJSON)
189+
167190
-- | Wait until the node is fully caught up with the network. This can take a
168191
-- while!
169192
waitForFullySynchronized ::
170193
Tracer IO NodeLog ->
171-
RunningNode ->
194+
NetworkId ->
195+
SocketPath ->
172196
IO ()
173-
waitForFullySynchronized tracer RunningNode{nodeSocket, networkId} = do
197+
waitForFullySynchronized tracer networkId nodeSocket = do
174198
systemStart <- querySystemStart networkId nodeSocket QueryTip
175199
check systemStart
176200
where

‎hydra-cluster/src/CardanoNode.hs

+9-26
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ module CardanoNode where
44

55
import Hydra.Prelude
66

7-
import Cardano.Ledger.Core (PParams)
7+
import CardanoClient (NodeLog (..), RunningNode (..), waitForFullySynchronized)
88
import Control.Lens ((?~), (^?!))
99
import Control.Tracer (Tracer, traceWith)
1010
import Data.Aeson (Value (String), (.=))
1111
import Data.Aeson qualified as Aeson
1212
import Data.Aeson.Lens (atKey, key, _Number)
13-
import Data.Fixed (Centi)
1413
import Data.Text qualified as Text
1514
import Data.Time.Clock.POSIX (posixSecondsToUTCTime, utcTimeToPOSIXSeconds)
1615
import Hydra.Cardano.Api (AsType (AsPaymentKey), File (..), NetworkId, PaymentKey, SigningKey, SocketPath, VerificationKey, generateSigningKey, getVerificationKey)
@@ -40,12 +39,6 @@ type Port = Int
4039
newtype NodeId = NodeId Int
4140
deriving newtype (Eq, Show, Num, ToJSON, FromJSON)
4241

43-
data RunningNode = RunningNode
44-
{ nodeSocket :: SocketPath
45-
, networkId :: NetworkId
46-
, pparams :: PParams Api.LedgerEra
47-
}
48-
4942
-- | Configuration parameters for a single node devnet
5043
data DevnetConfig = DevnetConfig
5144
{ stateDirectory :: FilePath
@@ -121,7 +114,7 @@ withCardanoNodeDevnet ::
121114
IO a
122115
withCardanoNodeDevnet tracer stateDirectory action = do
123116
args <- setupCardanoDevnet stateDirectory
124-
withCardanoNode tracer stateDirectory args $ \nodeSocket -> do
117+
withCardanoNode tracer stateDirectory args networkId $ \nodeSocket -> do
125118
traceWith tracer MsgNodeIsReady
126119
pparams <- queryProtocolParameters networkId nodeSocket QueryTip
127120
let rn =
@@ -147,7 +140,7 @@ withCardanoNodeOnKnownNetwork ::
147140
withCardanoNodeOnKnownNetwork tracer workDir knownNetwork action = do
148141
copyKnownNetworkFiles
149142
networkId <- readNetworkId
150-
withCardanoNode tracer workDir args $ \nodeSocket -> do
143+
withCardanoNode tracer workDir args networkId $ \nodeSocket -> do
151144
traceWith tracer MsgNodeIsReady
152145
pparams <- queryProtocolParameters networkId nodeSocket QueryTip
153146
let rn =
@@ -279,9 +272,10 @@ withCardanoNode ::
279272
Tracer IO NodeLog ->
280273
FilePath ->
281274
CardanoNodeArgs ->
275+
NetworkId ->
282276
(SocketPath -> IO a) ->
283277
IO a
284-
withCardanoNode tr stateDirectory args@CardanoNodeArgs{nodeSocket} action = do
278+
withCardanoNode tr stateDirectory args@CardanoNodeArgs{nodeSocket} networkId action = do
285279
traceWith tr $ MsgNodeCmdSpec (show $ cmdspec process)
286280
traceWith tr $ MsgNodeStarting{stateDirectory}
287281
withLogFile logFilePath $ \out -> do
@@ -306,6 +300,10 @@ withCardanoNode tr stateDirectory args@CardanoNodeArgs{nodeSocket} action = do
306300
waitForNode = do
307301
let nodeSocketPath = File socketPath
308302
waitForSocket nodeSocketPath
303+
-- we wait for synchronization since otherwise we will receive a query
304+
-- exception when trying to obtain pparams and the era is not the one we
305+
-- expect.
306+
_ <- waitForFullySynchronized tr networkId nodeSocketPath
309307
traceWith tr $ MsgSocketIsReady $ unFile nodeSocketPath
310308
action nodeSocketPath
311309

@@ -416,21 +414,6 @@ data ProcessHasExited = ProcessHasExited Text ExitCode
416414

417415
instance Exception ProcessHasExited
418416

419-
-- Logging
420-
421-
data NodeLog
422-
= MsgNodeCmdSpec Text
423-
| MsgCLI [Text]
424-
| MsgCLIStatus Text Text
425-
| MsgCLIRetry Text
426-
| MsgCLIRetryResult Text Int
427-
| MsgNodeStarting {stateDirectory :: FilePath}
428-
| MsgSocketIsReady FilePath
429-
| MsgSynchronizing {percentDone :: Centi}
430-
| MsgNodeIsReady
431-
deriving stock (Eq, Show, Generic)
432-
deriving anyclass (ToJSON, FromJSON)
433-
434417
--
435418
-- Helpers
436419
--

‎hydra-cluster/src/Hydra/Cluster/Faucet.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Cardano.Api.UTxO qualified as UTxO
88
import Cardano.Ledger.Core (PParams)
99
import CardanoClient (
1010
QueryPoint (QueryTip),
11+
RunningNode (..),
1112
SubmitTransactionException,
1213
awaitTransaction,
1314
buildAddress,
@@ -18,7 +19,6 @@ import CardanoClient (
1819
submitTransaction,
1920
waitForPayment,
2021
)
21-
import CardanoNode (RunningNode (..))
2222
import Control.Exception (IOException)
2323
import Control.Monad.Class.MonadThrow (Handler (Handler), catches)
2424
import Control.Tracer (Tracer, traceWith)

‎hydra-cluster/src/Hydra/Cluster/Scenarios.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import Test.Hydra.Prelude
88

99
import Cardano.Api.UTxO qualified as UTxO
1010
import CardanoClient (
11+
NodeLog,
1112
QueryPoint (QueryTip),
13+
RunningNode (..),
1214
buildTransaction,
1315
queryTip,
1416
queryUTxOFor,
1517
submitTx,
1618
)
17-
import CardanoNode (NodeLog, RunningNode (..))
1819
import Control.Concurrent.Async (mapConcurrently_)
1920
import Control.Lens ((^?))
2021
import Data.Aeson (Value, object, (.=))

‎hydra-cluster/test/Test/CardanoClientSpec.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module Test.CardanoClientSpec where
33
import Hydra.Prelude
44
import Test.Hydra.Prelude
55

6-
import CardanoClient (QueryPoint (..), queryGenesisParameters)
7-
import CardanoNode (RunningNode (..), withCardanoNodeDevnet)
6+
import CardanoClient (QueryPoint (..), RunningNode (..), queryGenesisParameters)
7+
import CardanoNode (withCardanoNodeDevnet)
88
import Data.Aeson ((.:))
99
import Data.Aeson qualified as Aeson
1010
import Hydra.Cardano.Api (GenesisParameters (..))

‎hydra-cluster/test/Test/CardanoNodeSpec.hs

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ import Hydra.Prelude
44
import Test.Hydra.Prelude
55

66
import CardanoNode (
7-
RunningNode (..),
87
getCardanoNodeVersion,
98
withCardanoNodeDevnet,
109
)
1110

12-
import CardanoClient (queryTipSlotNo)
11+
import CardanoClient (RunningNode (..), queryTipSlotNo)
1312
import Hydra.Cardano.Api (NetworkId (Testnet), NetworkMagic (NetworkMagic), unFile)
1413
import Hydra.Logging (showLogsOnFailure)
1514
import System.Directory (doesFileExist)

‎hydra-cluster/test/Test/ChainObserverSpec.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module Test.ChainObserverSpec where
99
import Hydra.Prelude
1010
import Test.Hydra.Prelude
1111

12-
import CardanoClient (submitTx)
13-
import CardanoNode (NodeLog, RunningNode (..), withCardanoNodeDevnet)
12+
import CardanoClient (NodeLog, RunningNode (..), submitTx)
13+
import CardanoNode (withCardanoNodeDevnet)
1414
import Control.Concurrent.Class.MonadSTM (modifyTVar', newTVarIO, readTVarIO)
1515
import Control.Exception (IOException)
1616
import Control.Lens ((^?))

‎hydra-cluster/test/Test/DirectChainSpec.hs

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ import Test.Hydra.Prelude
77

88
import Cardano.Api.UTxO (UTxO' (UTxO, toMap))
99
import CardanoClient (
10+
NodeLog,
1011
QueryPoint (QueryTip),
12+
RunningNode (..),
1113
buildAddress,
1214
queryTip,
1315
queryUTxO,
1416
submitTx,
1517
waitForUTxO,
1618
)
17-
import CardanoNode (NodeLog, RunningNode (..), withCardanoNodeDevnet)
19+
import CardanoNode (withCardanoNodeDevnet)
1820
import Control.Concurrent.STM (newEmptyTMVarIO, takeTMVar)
1921
import Control.Concurrent.STM.TMVar (putTMVar)
2022
import Hydra.Cardano.Api (

‎hydra-cluster/test/Test/EndToEndSpec.hs

+12-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,18 @@ import Hydra.Prelude
77
import Test.Hydra.Prelude
88

99
import Cardano.Api.UTxO qualified as UTxO
10-
import CardanoClient (QueryPoint (..), queryEpochNo, queryGenesisParameters, queryTip, queryTipSlotNo, submitTx, waitForUTxO)
10+
import CardanoClient (
11+
QueryPoint (..),
12+
RunningNode (..),
13+
queryEpochNo,
14+
queryGenesisParameters,
15+
queryTip,
16+
queryTipSlotNo,
17+
submitTx,
18+
waitForUTxO,
19+
)
1120
import CardanoNode (
1221
CardanoNodeArgs (..),
13-
RunningNode (..),
1422
forkIntoConwayInEpoch,
1523
setupCardanoDevnet,
1624
unsafeDecodeJsonFile,
@@ -522,7 +530,7 @@ spec = around (showLogsOnFailure "EndToEndSpec") $ do
522530
withClusterTempDir "unsupported-era" $ \tmpDir -> do
523531
args <- setupCardanoDevnet tmpDir
524532
forkIntoConwayInEpoch tmpDir args 1
525-
withCardanoNode (contramap FromCardanoNode tracer) tmpDir args $ \nodeSocket -> do
533+
withCardanoNode (contramap FromCardanoNode tracer) tmpDir args defaultNetworkId $ \nodeSocket -> do
526534
let pparams = defaultPParams
527535
let node = RunningNode{nodeSocket, networkId = defaultNetworkId, pparams}
528536
hydraScriptsTxId <- publishHydraScriptsAs node Faucet
@@ -542,7 +550,7 @@ spec = around (showLogsOnFailure "EndToEndSpec") $ do
542550
withClusterTempDir "unsupported-era-startup" $ \tmpDir -> do
543551
args <- setupCardanoDevnet tmpDir
544552
forkIntoConwayInEpoch tmpDir args 1
545-
withCardanoNode (contramap FromCardanoNode tracer) tmpDir args $ \nodeSocket -> do
553+
withCardanoNode (contramap FromCardanoNode tracer) tmpDir args defaultNetworkId $ \nodeSocket -> do
546554
let pparams = defaultPParams
547555
let node = RunningNode{nodeSocket, networkId = defaultNetworkId, pparams}
548556
hydraScriptsTxId <- publishHydraScriptsAs node Faucet

‎hydra-cluster/test/Test/Hydra/Cluster/FaucetSpec.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ module Test.Hydra.Cluster.FaucetSpec where
33
import Hydra.Prelude
44
import Test.Hydra.Prelude
55

6-
import CardanoNode (RunningNode (..), withCardanoNodeDevnet)
6+
import CardanoClient (RunningNode (..))
7+
import CardanoNode (withCardanoNodeDevnet)
78
import Control.Concurrent.Async (replicateConcurrently_)
89
import Hydra.Cardano.Api (AssetId (AdaAssetId), selectAsset, txOutValue)
910
import Hydra.Chain.CardanoClient (QueryPoint (..), queryUTxOFor)

‎hydra-tui/test/Hydra/TUISpec.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import Hydra.Prelude
77
import Test.Hydra.Prelude
88

99
import Blaze.ByteString.Builder.Char8 (writeChar)
10-
import CardanoNode (NodeLog, RunningNode (..), withCardanoNodeDevnet)
10+
import CardanoClient (NodeLog, RunningNode (..))
11+
import CardanoNode (withCardanoNodeDevnet)
1112
import Control.Concurrent.Class.MonadSTM (newTQueueIO, readTQueue, tryReadTQueue, writeTQueue)
1213
import Data.ByteString qualified as BS
1314
import Graphics.Vty (

0 commit comments

Comments
 (0)
Please sign in to comment.