Skip to content

Commit 38d989c

Browse files
committed
temp commit for Cian
1 parent a10de36 commit 38d989c

2 files changed

Lines changed: 187 additions & 54 deletions

File tree

tests/integration/gm_gaia_health_test.go

Lines changed: 185 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,84 +4,87 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
sdk "github.com/cosmos/cosmos-sdk/types"
87
"os"
98
"os/exec"
109
"path/filepath"
1110
"testing"
11+
"time"
1212

13+
"cosmossdk.io/math"
1314
"github.com/celestiaorg/tastora/framework/docker"
1415
"github.com/celestiaorg/tastora/framework/docker/container"
1516
"github.com/celestiaorg/tastora/framework/docker/cosmos"
16-
cfgutil "github.com/celestiaorg/tastora/framework/testutil/config"
17-
servercfg "github.com/cosmos/cosmos-sdk/server/config"
17+
"github.com/celestiaorg/tastora/framework/docker/dataavailability"
18+
"github.com/celestiaorg/tastora/framework/testutil/sdkacc"
19+
"github.com/celestiaorg/tastora/framework/types"
20+
sdk "github.com/cosmos/cosmos-sdk/types"
1821
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
1922
"github.com/cosmos/cosmos-sdk/x/auth"
2023
"github.com/cosmos/cosmos-sdk/x/bank"
24+
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
25+
"github.com/moby/moby/client"
2126
"github.com/stretchr/testify/require"
2227
)
2328

29+
// TestGMChainEmpty is an empty test case using the DockerIntegrationTestSuite
30+
func (s *DockerIntegrationTestSuite) TestGMChainEmpty() {
31+
s.T().Log("Running empty GM chain test")
32+
s.T().Log("Celestia chain created successfully")
33+
s.T().Log("Bridge node created successfully")
34+
s.T().Log("Evolve chain created successfully")
35+
s.T().Log("Test completed - all infrastructure is working")
36+
}
37+
2438
func TestGaiaGM_Health(t *testing.T) {
2539
if testing.Short() {
2640
t.Skip("skipping due to short mode")
2741
}
2842

29-
repoRoot := projectRoot(t)
3043
ctx := context.Background()
3144

32-
evnodeVersion := getenvDefault("EVNODE_VERSION", "v1.0.0-beta.4")
33-
igniteVersion := getenvDefault("IGNITE_VERSION", "v29.3.1")
34-
igniteEvolveApp := getenvDefault("IGNITE_EVOLVE_APP_VERSION", "main")
35-
celestiaAppVersion := getenvDefault("CELESTIA_APP_VERSION", "v4.0.10")
36-
37-
dockerBuild(t, repoRoot,
38-
filepath.Join(repoRoot, "./tests/integration/docker/Dockerfile.gm"),
39-
"evabci/gm:local",
40-
map[string]string{
41-
"IGNITE_VERSION": igniteVersion,
42-
"IGNITE_EVOLVE_APP_VERSION": igniteEvolveApp,
43-
"EVNODE_VERSION": evnodeVersion,
44-
},
45-
)
45+
/* evnodeVersion := getenvDefault("EVNODE_VERSION", "v1.0.0-beta.4")
46+
igniteVersion := getenvDefault("IGNITE_VERSION", "v29.3.1")
47+
igniteEvolveApp := getenvDefault("IGNITE_EVOLVE_APP_VERSION", "main")
4648
49+
dockerBuild(t, projectRoot(t),
50+
filepath.Join(projectRoot(t), "./tests/integration/docker/Dockerfile.gm"),
51+
"evabci/gm:local",
52+
map[string]string{
53+
"IGNITE_VERSION": igniteVersion,
54+
"IGNITE_EVOLVE_APP_VERSION": igniteEvolveApp,
55+
"EVNODE_VERSION": evnodeVersion,
56+
},
57+
)
58+
*/
4759
dockerClient, networkID := docker.DockerSetup(t)
4860

49-
chainAImg := container.NewImage("ghcr.io/celestiaorg/celestia-app", celestiaAppVersion, "10001:10001")
50-
encCfg := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}, bank.AppModuleBasic{})
51-
chainA, err := cosmos.NewChainBuilderWithTestName(t, t.Name()).
52-
WithDockerClient(dockerClient).
53-
WithDockerNetworkID(networkID).
54-
WithImage(chainAImg).
55-
WithName("celestia-app").
56-
WithChainID("celestia-local").
57-
WithBinaryName("celestia-appd").
58-
WithBech32Prefix("celestia").
59-
WithDenom("utia").
60-
WithGasPrices("0.000001utia").
61-
WithEncodingConfig(&encCfg).
62-
WithAdditionalStartArgs(
63-
"--force-no-bbr",
64-
"--grpc.enable",
65-
"--grpc.address", "0.0.0.0:9090",
66-
"--rpc.grpc_laddr=tcp://0.0.0.0:9098",
67-
"--timeout-commit", "1s",
68-
).
69-
WithEnv("BLST_PORTABLE=1").
70-
WithNode(cosmos.NewChainNodeConfigBuilder().Build()).
71-
WithPostInit(func(ctx context.Context, node *cosmos.ChainNode) error {
72-
return cfgutil.Modify(ctx, node, "config/app.toml", func(cfg *servercfg.Config) {
73-
cfg.MinGasPrices = "0.000001utia"
74-
cfg.GRPC.Enable = true
75-
cfg.GRPC.Address = "0.0.0.0:9090"
76-
cfg.API.Enable = true
77-
})
78-
}).
79-
Build(ctx)
61+
// Create Celestia chain for DA
62+
t.Log("Creating Celestia app chain...")
63+
celestiaChain := CreateCelestiaChain(ctx, t, dockerClient, networkID)
64+
t.Log("Celestia app chain started")
65+
66+
// Create DA network with bridge node
67+
t.Log("Creating DA network with bridge node...")
68+
bridgeNode := CreateDANetwork(ctx, t, dockerClient, networkID, celestiaChain)
69+
t.Log("Bridge node started")
70+
71+
// Get DA connection details
72+
authToken, err := bridgeNode.GetAuthToken()
73+
require.NoError(t, err)
74+
75+
bridgeNetworkInfo, err := bridgeNode.GetNetworkInfo(ctx)
8076
require.NoError(t, err)
77+
bridgeRPCAddress := bridgeNetworkInfo.Internal.RPCAddress()
78+
79+
daAddress := fmt.Sprintf("http://%s", bridgeRPCAddress)
80+
t.Logf("DA address: %s", daAddress)
8181

82-
err = chainA.Start(ctx)
82+
celestiaHeight, err := celestiaChain.Height(ctx)
8383
require.NoError(t, err)
8484

85+
t.Logf("DA start height: %d", celestiaHeight)
86+
87+
t.Log("Creating GM chain connected to DA network...")
8588
sdk.GetConfig().SetBech32PrefixForAccount("gm", "gmpub")
8689
gmImg := container.NewImage("evabci/gm", "local", "1000:1000")
8790
gmChain, err := cosmos.NewChainBuilder(t).
@@ -92,13 +95,22 @@ func TestGaiaGM_Health(t *testing.T) {
9295
WithChainID("gm").
9396
WithBinaryName("gmd").
9497
WithAdditionalStartArgs(
95-
"--rollkit.node.aggregator",
96-
"--rollkit.da.address", "http://local-da:7980",
98+
"--evnode.node.aggregator",
99+
"--evnode.signer.passphrase", "12345678",
100+
"--evnode.da.address", daAddress,
101+
"--evnode.da.gas_price", "0.000001",
102+
"--evnode.da.auth_token", authToken,
103+
"--evnode.rpc.address", "0.0.0.0:7331",
104+
"--evnode.da.namespace", "ev-header",
105+
"--evnode.da.data_namespace", "ev-data",
106+
"--evnode.da.start_height", fmt.Sprintf("%d", celestiaHeight),
107+
"--evnode.p2p.listen_address", "/ip4/0.0.0.0/tcp/36656",
97108
"--rpc.laddr", "tcp://0.0.0.0:26757",
98109
"--grpc.address", "0.0.0.0:9190",
99110
"--api.enable",
100111
"--api.address", "tcp://0.0.0.0:1417",
101112
"--minimum-gas-prices", "0.001stake",
113+
"--log_level", "*:info",
102114
).
103115
WithNode(cosmos.NewChainNodeConfigBuilder().
104116
WithPostInit(AddSingleSequencer).
@@ -108,6 +120,7 @@ func TestGaiaGM_Health(t *testing.T) {
108120

109121
err = gmChain.Start(ctx)
110122
require.NoError(t, err)
123+
t.Log("GM chain started and connected to DA network")
111124

112125
// evChain, err := evd.NewChainBuilder(t).
113126
// WithDockerClient(dockerClient).
@@ -298,3 +311,123 @@ func AddSingleSequencer(ctx context.Context, node *cosmos.ChainNode) error {
298311
}
299312
return node.WriteFile(ctx, "config/genesis.json", updatedGenesis)
300313
}
314+
315+
// CreateCelestiaChain sets up a Celestia app chain for DA
316+
func CreateCelestiaChain(ctx context.Context, t *testing.T, dockerClient *client.Client, networkID string) *cosmos.Chain {
317+
testEncCfg := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}, bank.AppModuleBasic{})
318+
celestia, err := cosmos.NewChainBuilder(t).
319+
WithEncodingConfig(&testEncCfg).
320+
WithDockerClient(dockerClient).
321+
WithDockerNetworkID(networkID).
322+
WithImage(container.NewImage(celestiaAppRepo, celestiaAppTag, "10001:10001")).
323+
WithAdditionalStartArgs(
324+
"--force-no-bbr",
325+
"--grpc.enable",
326+
"--grpc.address", "0.0.0.0:9090",
327+
"--rpc.grpc_laddr=tcp://0.0.0.0:9098",
328+
"--timeout-commit", "1s",
329+
"--minimum-gas-prices", "0.000001utia",
330+
).
331+
WithNode(cosmos.NewChainNodeConfigBuilder().Build()).
332+
Build(ctx)
333+
334+
require.NoError(t, err)
335+
336+
err = celestia.Start(ctx)
337+
require.NoError(t, err)
338+
return celestia
339+
}
340+
341+
// CreateDANetwork sets up the DA network with bridge node
342+
func CreateDANetwork(ctx context.Context, t *testing.T, dockerClient *client.Client, networkID string, celestiaChain *cosmos.Chain) *dataavailability.Node {
343+
// Build DA network with bridge node
344+
daNetwork, err := dataavailability.NewNetworkBuilder(t).
345+
WithDockerClient(dockerClient).
346+
WithDockerNetworkID(networkID).
347+
WithImage(container.NewImage(celestiaNodeRepo, celestiaNodeTag, "10001:10001")).
348+
WithNode(dataavailability.NewNodeBuilder().
349+
WithNodeType(types.BridgeNode).
350+
Build()).
351+
Build(ctx)
352+
require.NoError(t, err)
353+
354+
genesisHash, err := getGenesisHash(ctx, celestiaChain)
355+
require.NoError(t, err)
356+
357+
bridgeNodes := daNetwork.GetNodesByType(types.BridgeNode)
358+
require.NotEmpty(t, bridgeNodes, "no bridge nodes available")
359+
360+
bridgeNode := bridgeNodes[0]
361+
362+
chainID := celestiaChain.GetChainID()
363+
networkInfo, err := celestiaChain.GetNodes()[0].GetNetworkInfo(ctx)
364+
require.NoError(t, err)
365+
celestiaNodeHostname := networkInfo.Internal.Hostname
366+
367+
err = bridgeNode.Start(ctx,
368+
dataavailability.WithChainID(chainID),
369+
dataavailability.WithAdditionalStartArguments("--p2p.network", chainID, "--core.ip", celestiaNodeHostname, "--rpc.addr", "0.0.0.0", "--keyring.keyname", "my-key"),
370+
dataavailability.WithEnvironmentVariables(map[string]string{
371+
"CELESTIA_CUSTOM": types.BuildCelestiaCustomEnvVar(chainID, genesisHash, ""),
372+
"P2P_NETWORK": chainID,
373+
}),
374+
)
375+
require.NoError(t, err)
376+
377+
// Fund the bridge node DA wallet to enable blob submission
378+
fundBridgeNodeWallet(ctx, t, celestiaChain, bridgeNode)
379+
380+
return bridgeNode
381+
}
382+
383+
// sendFunds sends funds from one wallet to another using bank transfer
384+
func sendFunds(ctx context.Context, chain *cosmos.Chain, fromWallet, toWallet *types.Wallet, amount sdk.Coins, nodeIdx int) error {
385+
fromAddress, err := sdkacc.AddressFromWallet(fromWallet)
386+
if err != nil {
387+
return fmt.Errorf("failed to get sender address: %w", err)
388+
}
389+
390+
toAddress, err := sdkacc.AddressFromWallet(toWallet)
391+
if err != nil {
392+
return fmt.Errorf("failed to get destination address: %w", err)
393+
}
394+
395+
chainNode := chain.GetNodes()[nodeIdx]
396+
cosmosChainNode, ok := chainNode.(*cosmos.ChainNode)
397+
if !ok {
398+
return fmt.Errorf("chainNode is not a cosmos.ChainNode")
399+
}
400+
broadcaster := cosmos.NewBroadcasterForNode(chain, cosmosChainNode)
401+
402+
time.Sleep(30 * time.Second)
403+
404+
msg := banktypes.NewMsgSend(fromAddress, toAddress, amount)
405+
resp, err := broadcaster.BroadcastMessages(ctx, fromWallet, msg)
406+
if err != nil {
407+
return fmt.Errorf("failed to broadcast transaction: %w", err)
408+
}
409+
410+
if resp.Code != 0 {
411+
return fmt.Errorf("transaction failed with code %d: %s", resp.Code, resp.RawLog)
412+
}
413+
414+
return nil
415+
}
416+
417+
// fundBridgeNodeWallet funds the bridge node's DA wallet for blob submission
418+
func fundBridgeNodeWallet(ctx context.Context, t *testing.T, celestiaChain *cosmos.Chain, bridgeNode *dataavailability.Node) {
419+
// hack to get around global, need to set the address prefix before use.
420+
sdk.GetConfig().SetBech32PrefixForAccount("celestia", "celestiapub")
421+
422+
t.Log("Funding bridge node DA wallet...")
423+
fundingWallet := celestiaChain.GetFaucetWallet()
424+
425+
// Get the bridge node's wallet
426+
bridgeWallet, err := bridgeNode.GetWallet()
427+
require.NoError(t, err)
428+
429+
// fund the bridge node wallet
430+
daFundingAmount := sdk.NewCoins(sdk.NewCoin("utia", math.NewInt(10_000_000)))
431+
err = sendFunds(ctx, celestiaChain, fundingWallet, bridgeWallet, daFundingAmount, 0)
432+
require.NoError(t, err)
433+
}

tests/integration/testsuite_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ func (s *DockerIntegrationTestSuite) SetupTest() {
5959
s.bridgeNode = s.CreateDANetwork(ctx)
6060
s.T().Log("Bridge node started")
6161

62-
s.evolveChain = s.CreateEvolveChain(ctx)
63-
s.T().Log("Evolve chain started")
62+
/* s.evolveChain = s.CreateEvolveChain(ctx)
63+
s.T().Log("Evolve chain started")*/
6464
}
6565

6666
// CreateCelestiaChain sets up a Celestia app chain for DA and stores it in the suite

0 commit comments

Comments
 (0)