66 "os"
77 "os/exec"
88 "path/filepath"
9+ "strings"
910 "testing"
1011 "time"
1112
@@ -30,7 +31,7 @@ func TestGaiaGM_Health(t *testing.T) {
3031 repoRoot := projectRoot (t )
3132 ctx := context .Background ()
3233
33- evnodeVersion := getenvDefault ("EVNODE_VERSION" , "v1.0.0-beta.2.0.20250917144924-05372840f308 " )
34+ evnodeVersion := getenvDefault ("EVNODE_VERSION" , "v1.0.0-beta.4 " )
3435 igniteVersion := getenvDefault ("IGNITE_VERSION" , "v29.3.1" )
3536 igniteEvolveApp := getenvDefault ("IGNITE_EVOLVE_APP_VERSION" , "main" )
3637 celestiaAppVersion := getenvDefault ("CELESTIA_APP_VERSION" , "v4.0.10" )
@@ -87,8 +88,9 @@ func TestGaiaGM_Health(t *testing.T) {
8788 WithImage (gmImg ).
8889 WithChainID ("gm" ).
8990 WithBinaryName ("gmd" ).
90- WithEnv ("BLST_PORTABLE=1" ).
9191 WithAdditionalStartArgs (
92+ "--rollkit.node.aggregator" ,
93+ "--rollkit.da.address" , "http://local-da:7980" ,
9294 "--rpc.laddr" , "tcp://0.0.0.0:26757" ,
9395 "--grpc.address" , "0.0.0.0:9190" ,
9496 "--api.enable" ,
@@ -97,18 +99,105 @@ func TestGaiaGM_Health(t *testing.T) {
9799 ).
98100 WithNode (evd .NewNodeBuilder ().
99101 WithAggregator (true ).
100- WithPostInit (func (ctx context.Context , node * evd.Node ) error {
101- clientToml := []byte ("[client]\n node = \" tcp://127.0.0.1:26757\" \n " )
102- return node .WriteFile (ctx , "config/client.toml" , clientToml )
103- }).
104102 Build ()).
105103 Build (ctx )
106104 require .NoError (t , err )
107105
108106 require .NoError (t , chainA .Start (ctx ))
109107
110108 gmNode := evChain .GetNodes ()[0 ]
109+
110+ // Execute ignite evolve init (uses default home directory)
111+ gmNode .WithInitOverride (
112+ []string {
113+ "ignite" , "evolve" , "init" ,
114+ },
115+ )
111116 require .NoError (t , gmNode .Init (ctx ))
117+
118+ // Get the default gmd home directory
119+ gmHomeOut , _ , err := gmNode .Exec (ctx , gmNode .Logger , []string {"gmd" , "config" , "home" }, nil )
120+ require .NoError (t , err )
121+ gmHome := strings .TrimSpace (string (gmHomeOut ))
122+
123+ // Ensure client.toml has the correct RPC node (like init-gm.sh does)
124+ clientTomlPath := fmt .Sprintf ("%s/config/client.toml" , gmHome )
125+ clientTomlCmd := []string {"sh" , "-c" , fmt .Sprintf (`
126+ if [ -f "%s" ]; then
127+ sed -i 's|^node *=.*|node = "tcp://127.0.0.1:26757"|' "%s"
128+ else
129+ mkdir -p %s/config
130+ cat > "%s" <<'EOF'
131+ [client]
132+ node = "tcp://127.0.0.1:26757"
133+ EOF
134+ fi` , clientTomlPath , clientTomlPath , gmHome , clientTomlPath )}
135+ _ , _ , err = gmNode .Exec (ctx , gmNode .Logger , clientTomlCmd , nil )
136+ require .NoError (t , err )
137+
138+ // Add validator key using standard mnemonic
139+ mnemonic := "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
140+
141+ // Debug: Check what files exist before key creation
142+ t .Log ("=== DEBUG: Checking files before key creation ===" )
143+ lsBeforeCmd := []string {"sh" , "-c" , fmt .Sprintf ("ls -la %s/ || echo 'directory does not exist'" , gmHome )}
144+ lsBeforeOutput , _ , _ := gmNode .Exec (ctx , gmNode .Logger , lsBeforeCmd , nil )
145+ t .Logf ("Files in %s before key creation:\n %s" , gmHome , string (lsBeforeOutput ))
146+
147+ // Use exactly the same command format as init-gm.sh script
148+ // Echo mnemonic and pipe to gmd keys add with same parameter order as working script
149+ cmd := []string {"sh" , "-c" , fmt .Sprintf (`echo "%s" | gmd keys add validator --keyring-backend test --home %s --recover --hd-path "m/44'/118'/0'/0/0"` , mnemonic , gmHome )}
150+ keysAddOutput , keysAddStderr , err := gmNode .Exec (ctx , gmNode .Logger , cmd , nil )
151+ t .Logf ("Keys add output:\n STDOUT: %s\n STDERR: %s" , string (keysAddOutput ), string (keysAddStderr ))
152+ require .NoError (t , err )
153+
154+ // Debug: Check what files exist after key creation
155+ t .Log ("=== DEBUG: Checking files after key creation ===" )
156+ lsAfterCmd := []string {"sh" , "-c" , fmt .Sprintf ("ls -la %s/ && echo '--- keyring files ---' && ls -la %s/keyring-test-* 2>/dev/null || echo 'no keyring files found'" , gmHome , gmHome )}
157+ lsAfterOutput , _ , _ := gmNode .Exec (ctx , gmNode .Logger , lsAfterCmd , nil )
158+ t .Logf ("Files in %s after key creation:\n %s" , gmHome , string (lsAfterOutput ))
159+
160+ // Debug: Try to list keys first
161+ t .Log ("=== DEBUG: Trying to list keys ===" )
162+ listKeysCmd := []string {"gmd" , "keys" , "list" , "--keyring-backend" , "test" , "--home" , gmHome }
163+ listOutput , listStderr , listErr := gmNode .Exec (ctx , gmNode .Logger , listKeysCmd , nil )
164+ t .Logf ("Keys list output:\n STDOUT: %s\n STDERR: %s\n Error: %v" , string (listOutput ), string (listStderr ), listErr )
165+
166+ // Extract validator address directly from keys add output since keys show might not work
167+ var validatorAddr string
168+ lines := strings .Split (string (keysAddOutput ), "\n " )
169+ for _ , line := range lines {
170+ if strings .Contains (line , "address:" ) {
171+ // Extract address from "- address: gm19rl4cm2hmr8afy4kldpxz3fka4jguq0aj3w9ku"
172+ parts := strings .Split (strings .TrimSpace (line ), " " )
173+ if len (parts ) >= 2 {
174+ validatorAddr = parts [1 ]
175+ break
176+ }
177+ }
178+ }
179+ require .NotEmpty (t , validatorAddr , "Could not extract validator address from keys add output" )
180+ t .Logf ("Extracted validator address from keys add output: %s" , validatorAddr )
181+
182+ // Try keys show anyway to see what happens
183+ t .Log ("=== DEBUG: Trying keys show anyway ===" )
184+ getAddrCmd := []string {"gmd" , "keys" , "show" , "validator" , "-a" , "--keyring-backend" , "test" , "--home" , gmHome }
185+ validatorAddrBytes , getAddrStderr , getAddrErr := gmNode .Exec (ctx , gmNode .Logger , getAddrCmd , nil )
186+ t .Logf ("Keys show output:\n STDOUT: %s\n STDERR: %s\n Error: %v" , string (validatorAddrBytes ), string (getAddrStderr ), getAddrErr )
187+
188+ if getAddrErr == nil {
189+ showAddr := strings .TrimSpace (string (validatorAddrBytes ))
190+ t .Logf ("Keys show address: %s" , showAddr )
191+ if showAddr != validatorAddr {
192+ t .Logf ("WARNING: Address mismatch! keys add: %s, keys show: %s" , validatorAddr , showAddr )
193+ }
194+ }
195+
196+ // Add genesis account
197+ addGenesisCmd := []string {"gmd" , "--home" , gmHome , "genesis" , "add-genesis-account" , validatorAddr , "100000000stake,10000token" }
198+ _ , _ , err = gmNode .Exec (ctx , gmNode .Logger , addGenesisCmd , nil )
199+ require .NoError (t , err )
200+
112201 require .NoError (t , gmNode .Start (ctx ))
113202
114203 t .Log ("Esperando celestia-app altura >= 1..." )
@@ -139,15 +228,27 @@ func waitForHeight(t *testing.T, ctx context.Context, chain types.Chain, minHeig
139228 t .Helper ()
140229 deadline := time .Now ().Add (timeout )
141230 var last int64
231+ var lastErr error
142232 for time .Now ().Before (deadline ) {
143233 h , err := chain .Height (ctx )
144234 if err == nil && h >= minHeight {
235+ t .Logf ("Successfully reached height %d" , h )
145236 return
146237 }
238+ if err != nil {
239+ lastErr = err
240+ t .Logf ("Error getting height: %v" , err )
241+ } else {
242+ t .Logf ("Current height: %d, waiting for: %d" , h , minHeight )
243+ }
147244 last = h
148245 time .Sleep (3 * time .Second )
149246 }
150- require .FailNowf (t , "height timeout" , "chain did not reach height %d (last=%d) within %s" , minHeight , last , timeout )
247+ if lastErr != nil {
248+ require .FailNowf (t , "height timeout" , "chain did not reach height %d (last=%d) within %s, last error: %v" , minHeight , last , timeout , lastErr )
249+ } else {
250+ require .FailNowf (t , "height timeout" , "chain did not reach height %d (last=%d) within %s" , minHeight , last , timeout )
251+ }
151252}
152253
153254func projectRoot (t * testing.T ) string {
0 commit comments