Skip to content

Commit 4044620

Browse files
committed
test(e2e): work in progress
1 parent 8a058b6 commit 4044620

File tree

4 files changed

+80
-14
lines changed

4 files changed

+80
-14
lines changed

test/e2e/runner/perturb.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,25 @@ func PerturbNode(ctx context.Context, node *e2e.Node, perturbation e2e.Perturbat
108108
return nil, fmt.Errorf("unexpected perturbation %q", perturbation)
109109
}
110110

111-
status, err := waitForNode(ctx, node, 0, 20*time.Second)
112-
if err != nil {
113-
return nil, err
111+
if node.Mode == e2e.ModeSeed {
112+
// Seed nodes don't have RPC, use simple wait
113+
err = waitForSeedNode(ctx, node, 20*time.Second)
114+
if err != nil {
115+
return nil, err
116+
}
117+
logger.Info("perturb node",
118+
"msg",
119+
log.NewLazySprintf("Seed node %v recovered", node.Name))
120+
return nil, nil // Return nil status for seed nodes since they don't have RPC
121+
} else {
122+
// Regular nodes use RPC status check
123+
status, err := waitForNode(ctx, node, 0, 20*time.Second)
124+
if err != nil {
125+
return nil, err
126+
}
127+
logger.Info("perturb node",
128+
"msg",
129+
log.NewLazySprintf("Node %v recovered at height %v", node.Name, status.SyncInfo.LatestBlockHeight))
130+
return status, nil
114131
}
115-
logger.Info("perturb node",
116-
"msg",
117-
log.NewLazySprintf("Node %v recovered at height %v", node.Name, status.SyncInfo.LatestBlockHeight))
118-
return status, nil
119132
}

test/e2e/runner/rpc.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"net"
78
"time"
89

910
rpchttp "github.com/cometbft/cometbft/rpc/client/http"
@@ -132,3 +133,34 @@ func waitForAllNodes(ctx context.Context, testnet *e2e.Testnet, height int64, ti
132133

133134
return lastHeight, nil
134135
}
136+
137+
// waitForSeedNode waits for a seed node's P2P port to become available.
138+
// Since seed nodes don't have RPC endpoints, we check P2P connectivity.
139+
func waitForSeedNode(ctx context.Context, node *e2e.Node, timeout time.Duration) error {
140+
logger.Info("Waiting for seed node P2P port", "node", node.Name)
141+
142+
deadline := time.Now().Add(timeout)
143+
ticker := time.NewTicker(500 * time.Millisecond)
144+
defer ticker.Stop()
145+
146+
for {
147+
select {
148+
case <-ctx.Done():
149+
return ctx.Err()
150+
case <-ticker.C:
151+
if time.Now().After(deadline) {
152+
return fmt.Errorf("timed out waiting for seed node %v P2P port after %v", node.Name, timeout)
153+
}
154+
155+
// Try to connect to the P2P port
156+
addr := node.AddressP2P(false)
157+
conn, err := net.DialTimeout("tcp", addr, time.Second)
158+
if err == nil && conn != nil {
159+
conn.Close()
160+
logger.Info("Seed node P2P port available", "node", node.Name, "addr", addr)
161+
return nil
162+
}
163+
// Continue trying if connection failed
164+
}
165+
}
166+
}

test/e2e/runner/setup.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ func MakeConfig(node *e2e.Node) (*config.Config, error) {
227227
case e2e.ModeSeed:
228228
cfg.P2P.SeedMode = true
229229
cfg.P2P.PexReactor = true
230+
// Disable RPC for seed nodes as per ADR-052
231+
cfg.RPC.ListenAddress = ""
230232
case e2e.ModeFull, e2e.ModeLight:
231233
// Don't need to do anything, since we're using a dummy privval key by default.
232234
default:

test/e2e/runner/start.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,16 @@ func Start(ctx context.Context, testnet *e2e.Testnet, p infra.Provider) error {
5252
return err
5353
}
5454
for _, node := range nodesAtZero {
55-
if _, err := waitForNode(ctx, node, 0, 15*time.Second); err != nil {
56-
return err
55+
if node.Mode == e2e.ModeSeed {
56+
// Seed nodes don't have RPC, use simple wait
57+
if err := waitForSeedNode(ctx, node, 15*time.Second); err != nil {
58+
return err
59+
}
60+
} else {
61+
// Regular nodes use RPC status check
62+
if _, err := waitForNode(ctx, node, 0, 15*time.Second); err != nil {
63+
return err
64+
}
5765
}
5866
if node.PrometheusProxyPort > 0 {
5967
logger.Info("start", "msg",
@@ -123,12 +131,23 @@ func Start(ctx context.Context, testnet *e2e.Testnet, p infra.Provider) error {
123131
if err != nil {
124132
return err
125133
}
126-
status, err := waitForNode(ctx, node, node.StartAt, 3*time.Minute)
127-
if err != nil {
128-
return err
134+
if node.Mode == e2e.ModeSeed {
135+
// Seed nodes don't have RPC, use simple wait
136+
err = waitForSeedNode(ctx, node, 3*time.Minute)
137+
if err != nil {
138+
return err
139+
}
140+
logger.Info("start", "msg", log.NewLazySprintf("Seed node %v started",
141+
node.Name))
142+
} else {
143+
// Regular nodes use RPC status check
144+
status, err := waitForNode(ctx, node, node.StartAt, 3*time.Minute)
145+
if err != nil {
146+
return err
147+
}
148+
logger.Info("start", "msg", log.NewLazySprintf("Node %v up on http://%s:%v at height %v",
149+
node.Name, node.ExternalIP, node.ProxyPort, status.SyncInfo.LatestBlockHeight))
129150
}
130-
logger.Info("start", "msg", log.NewLazySprintf("Node %v up on http://%s:%v at height %v",
131-
node.Name, node.ExternalIP, node.ProxyPort, status.SyncInfo.LatestBlockHeight))
132151
}
133152

134153
return nil

0 commit comments

Comments
 (0)