github.com/ava-labs/subnet-evm@v0.6.4/tests/load/load_test.go (about) 1 // Copyright (C) 2023, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package load 5 6 import ( 7 "fmt" 8 "os" 9 "os/exec" 10 "path/filepath" 11 "strings" 12 "testing" 13 14 ginkgo "github.com/onsi/ginkgo/v2" 15 16 "github.com/onsi/gomega" 17 18 "github.com/stretchr/testify/require" 19 20 "github.com/ethereum/go-ethereum/log" 21 22 "github.com/ava-labs/avalanchego/ids" 23 "github.com/ava-labs/avalanchego/tests/fixture/e2e" 24 "github.com/ava-labs/avalanchego/tests/fixture/tmpnet" 25 "github.com/ava-labs/avalanchego/utils/set" 26 27 "github.com/ava-labs/subnet-evm/tests" 28 "github.com/ava-labs/subnet-evm/tests/utils" 29 ) 30 31 const ( 32 // The load test requires 5 nodes 33 nodeCount = 5 34 35 subnetAName = "load-subnet-a" 36 ) 37 38 var ( 39 flagVars *e2e.FlagVars 40 repoRootPath = tests.GetRepoRootPath("tests/load") 41 ) 42 43 func init() { 44 // Configures flags used to configure tmpnet 45 flagVars = e2e.RegisterFlags() 46 } 47 48 func TestE2E(t *testing.T) { 49 gomega.RegisterFailHandler(ginkgo.Fail) 50 ginkgo.RunSpecs(t, "subnet-evm small load simulator test suite") 51 } 52 53 var _ = ginkgo.Describe("[Load Simulator]", ginkgo.Ordered, func() { 54 require := require.New(ginkgo.GinkgoT()) 55 56 var env *e2e.TestEnvironment 57 58 ginkgo.BeforeAll(func() { 59 genesisPath := filepath.Join(repoRootPath, "tests/load/genesis/genesis.json") 60 61 nodes := utils.NewTmpnetNodes(nodeCount) 62 63 env = e2e.NewTestEnvironment( 64 flagVars, 65 utils.NewTmpnetNetwork( 66 "subnet-evm-small-load", 67 nodes, 68 tmpnet.FlagsMap{}, 69 utils.NewTmpnetSubnet(subnetAName, genesisPath, utils.DefaultChainConfig, nodes...), 70 ), 71 ) 72 }) 73 74 ginkgo.It("basic subnet load test", ginkgo.Label("load"), func() { 75 network := env.GetNetwork() 76 77 subnet := network.GetSubnet(subnetAName) 78 require.NotNil(subnet) 79 blockchainID := subnet.Chains[0].ChainID 80 81 nodeURIs := tmpnet.GetNodeURIs(network.Nodes) 82 validatorIDs := set.NewSet[ids.NodeID](len(subnet.ValidatorIDs)) 83 validatorIDs.Add(subnet.ValidatorIDs...) 84 rpcEndpoints := make([]string, 0, len(nodeURIs)) 85 for _, nodeURI := range nodeURIs { 86 if !validatorIDs.Contains(nodeURI.NodeID) { 87 continue 88 } 89 rpcEndpoints = append(rpcEndpoints, fmt.Sprintf("%s/ext/bc/%s/rpc", nodeURI.URI, blockchainID)) 90 } 91 commaSeparatedRPCEndpoints := strings.Join(rpcEndpoints, ",") 92 err := os.Setenv("RPC_ENDPOINTS", commaSeparatedRPCEndpoints) 93 require.NoError(err) 94 95 log.Info("Running load simulator...", "rpcEndpoints", commaSeparatedRPCEndpoints) 96 cmd := exec.Command("./scripts/run_simulator.sh") 97 cmd.Dir = repoRootPath 98 log.Info("Running load simulator script", "cmd", cmd.String()) 99 100 out, err := cmd.CombinedOutput() 101 fmt.Printf("\nCombined output:\n\n%s\n", string(out)) 102 require.NoError(err) 103 }) 104 })