diff --git a/.github/workflows/framework-golden-tests.yml b/.github/workflows/framework-golden-tests.yml index 54feabf9a..b54e7113a 100644 --- a/.github/workflows/framework-golden-tests.yml +++ b/.github/workflows/framework-golden-tests.yml @@ -22,6 +22,10 @@ jobs: config: smoke.toml count: 1 timeout: 10m + - name: TestAptosSmoke + config: smoke_aptos.toml + count: 1 + timeout: 10m - name: TestSolanaSmoke config: smoke_solana.toml count: 1 diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md index a046e06fd..832177f23 100644 --- a/book/src/SUMMARY.md +++ b/book/src/SUMMARY.md @@ -2,50 +2,51 @@ - [Overview](./overview.md) - [Framework](./framework/overview.md) - - [Getting Started](./framework/getting_started.md) - - [Your First Test](./framework/first_test.md) - - [Connecting Chainlink Node](./framework/connecting_chainlink_node.md) - - [Connecting Chainlink Node (Multiple networks)]() - - [NodeSet Environment](./framework/nodeset_environment.md) - - [NodeSet with Capabilities](./framework/nodeset_capabilities.md) - - [NodeSet (Local Docker builds)](./framework/nodeset_docker_rebuild.md) - - [NodeSet Compat Environment](./framework/nodeset_compatibility.md) - - [Creating your own components](./developing/developing_components.md) - - [Fork Testing](./framework/fork.md) - - [Quick Contracts Deployment](./framework/quick_deployment.md) - - [Verifying Contracts](./framework/verify.md) - - [NodeSet with External Blockchain]() - - [CLI](./framework/cli.md) - - [Configuration](./framework/configuration.md) - - [Test Configuration](./framework/test_configuration_overrides.md) - - [Exposing Components](framework/components/state.md) - - [Debugging Tests](framework/components/debug.md) - - [Components Cleanup](framework/components/cleanup.md) - - [Components Caching](framework/components/caching.md) - - [Mocking Services](framework/components/mocking.md) - - [Copying Files](framework/copying_files.md) - - [External Environment](framework/components/external.md) - - [Troubleshooting](framework/components/troubleshooting.md) - - [Secrets]() - - [Observability Stack](framework/observability/observability_stack.md) - - [Metrics](framework/observability/metrics.md) - - [Logs](framework/observability/logs.md) - - [Profiling](framework/observability/profiling.md) - - [Traces]() - - [Blockscout](framework/observability/blockscout.md) - - [Components](framework/components/overview.md) - - [Blockchains](framework/components/blockchains/overview.md) - - [EVM](framework/components/blockchains/evm.md) - - [Solana](framework/components/blockchains/solana.md) - - [Optimism Stack]() - - [Arbitrum Stack]() - - [Chainlink](framework/components/chainlink.md) - - [Node](framework/components/chainlink/node.md) - - [NodeSet](framework/components/chainlink/nodeset.md) - - [Clients]() - - [Chainlink]() - - [RPC]() - - [Loki]() + - [Getting Started](./framework/getting_started.md) + - [Your First Test](./framework/first_test.md) + - [Connecting Chainlink Node](./framework/connecting_chainlink_node.md) + - [Connecting Chainlink Node (Multiple networks)]() + - [NodeSet Environment](./framework/nodeset_environment.md) + - [NodeSet with Capabilities](./framework/nodeset_capabilities.md) + - [NodeSet (Local Docker builds)](./framework/nodeset_docker_rebuild.md) + - [NodeSet Compat Environment](./framework/nodeset_compatibility.md) + - [Creating your own components](./developing/developing_components.md) + - [Fork Testing](./framework/fork.md) + - [Quick Contracts Deployment](./framework/quick_deployment.md) + - [Verifying Contracts](./framework/verify.md) + - [NodeSet with External Blockchain]() + - [CLI](./framework/cli.md) + - [Configuration](./framework/configuration.md) + - [Test Configuration](./framework/test_configuration_overrides.md) + - [Exposing Components](framework/components/state.md) + - [Debugging Tests](framework/components/debug.md) + - [Components Cleanup](framework/components/cleanup.md) + - [Components Caching](framework/components/caching.md) + - [Mocking Services](framework/components/mocking.md) + - [Copying Files](framework/copying_files.md) + - [External Environment](framework/components/external.md) + - [Troubleshooting](framework/components/troubleshooting.md) + - [Secrets]() + - [Observability Stack](framework/observability/observability_stack.md) + - [Metrics](framework/observability/metrics.md) + - [Logs](framework/observability/logs.md) + - [Profiling](framework/observability/profiling.md) + - [Traces]() + - [Blockscout](framework/observability/blockscout.md) + - [Components](framework/components/overview.md) + - [Blockchains](framework/components/blockchains/overview.md) + - [EVM](framework/components/blockchains/evm.md) + - [Solana](framework/components/blockchains/solana.md) + - [Aptos](framework/components/blockchains/aptos.md) + - [Optimism Stack]() + - [Arbitrum Stack]() + - [Chainlink](framework/components/chainlink.md) + - [Node](framework/components/chainlink/node.md) + - [NodeSet](framework/components/chainlink/nodeset.md) + - [Clients]() + - [Chainlink]() + - [RPC]() + - [Loki]() - [Testing Maturity Model](framework/testing.md) - [Smoke]() - [Performance]() @@ -103,7 +104,9 @@ - [Sentinel](./libs/sentinel.md) --- + - [Releasing modules](releasing_modules.md) + --- - [CTFv1 (Discouraged)](lib.md) @@ -135,5 +138,7 @@ - [Third party apps]() - [Test helpers](lib/docker/test_helpers.md) - [Logging](lib/logging.md) + --- + - [Build info](build_info.md) diff --git a/book/src/framework/components/blockchains/aptos.md b/book/src/framework/components/blockchains/aptos.md new file mode 100644 index 000000000..0af8378c8 --- /dev/null +++ b/book/src/framework/components/blockchains/aptos.md @@ -0,0 +1,73 @@ +# Aptos Blockchain Client + +You need to turn `Rosetta` off to use this image! Image doesn't work with `OrbStack` currently. + +Docker Desktop + +![img.png](rosetta-settings.png) + +Default image is `aptoslabs/tools:aptos-node-v1.18.0` + +API is available on [localhost:8080](http://localhost:8080/v1) + +## Configuration + +```toml +[blockchain_a] + type = "aptos" + image = "aptoslabs/tools:aptos-node-v1.18.0" # or aptoslabs/tools:nightly + contracts_dir = "$your_dir" +``` + +## Usage + +```golang +package examples + +import ( + "github.com/go-resty/resty/v2" + "github.com/smartcontractkit/chainlink-testing-framework/framework" + "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" + "github.com/stretchr/testify/require" + "testing" +) + +type CfgAptos struct { + BlockchainA *blockchain.Input `toml:"blockchain_a" validate:"required"` +} + +func TestAptosSmoke(t *testing.T) { + in, err := framework.Load[CfgAptos](t) + require.NoError(t, err) + + bc, err := blockchain.NewBlockchainNetwork(in.BlockchainA) + require.NoError(t, err) + + // execute any additional commands, to deploy contracts or set up + // network is already funded, here are the keys + _ = blockchain.DefaultAptosAccount + _ = blockchain.DefaultAptosPrivateKey + + _, err = framework.ExecContainer(bc.ContainerName, []string{"ls", "-lah"}) + require.NoError(t, err) + + t.Run("test something", func(t *testing.T) { + // use internal URL to connect Chainlink nodes + _ = bc.Nodes[0].DockerInternalHTTPUrl + // use host URL to interact + _ = bc.Nodes[0].HostHTTPUrl + r := resty.New().SetBaseURL(bc.Nodes[0].HostHTTPUrl).EnableTrace() + _, err := r.R().Get("/v1/transactions") + require.NoError(t, err) + }) +} +``` + +## Test Private Keys + +Default account is already funded with `100000000 Octas` + +``` + Account: 0xa337b42bd0eecf8fb59ee5929ea4541904b3c35a642040223f3d26ab57f59d6e + PrivateKey: 0xd477c65f88ed9e6d4ec6e2014755c3cfa3e0c44e521d0111a02868c5f04c41d4 +``` diff --git a/book/src/framework/components/blockchains/rosetta-settings.png b/book/src/framework/components/blockchains/rosetta-settings.png new file mode 100644 index 000000000..dd8504f9e Binary files /dev/null and b/book/src/framework/components/blockchains/rosetta-settings.png differ diff --git a/framework/.changeset/v0.4.3.md b/framework/.changeset/v0.4.3.md new file mode 100644 index 000000000..237942b08 --- /dev/null +++ b/framework/.changeset/v0.4.3.md @@ -0,0 +1 @@ +- Add Aptos network support \ No newline at end of file diff --git a/framework/components/blockchain/aptos.go b/framework/components/blockchain/aptos.go new file mode 100644 index 000000000..99bb20e9d --- /dev/null +++ b/framework/components/blockchain/aptos.go @@ -0,0 +1,103 @@ +package blockchain + +import ( + "context" + "fmt" + "github.com/docker/docker/api/types/container" + "github.com/smartcontractkit/chainlink-testing-framework/framework" + "github.com/testcontainers/testcontainers-go" + "github.com/testcontainers/testcontainers-go/wait" + "path/filepath" +) + +var ( + DefaultAptosAccount = "0xa337b42bd0eecf8fb59ee5929ea4541904b3c35a642040223f3d26ab57f59d6e" + DefaultAptosPrivateKey = "0xd477c65f88ed9e6d4ec6e2014755c3cfa3e0c44e521d0111a02868c5f04c41d4" +) + +func defaultAptos(in *Input) { + if in.Image == "" { + in.Image = "aptoslabs/tools:aptos-node-v1.18.0" + } + if in.Port != "" { + framework.L.Warn().Msg("'port' field is set but only default port can be used: 8080") + } + in.Port = "8080" +} + +func newAptos(in *Input) (*Output, error) { + defaultAptos(in) + ctx := context.Background() + containerName := framework.DefaultTCName("blockchain-node") + + absPath, err := filepath.Abs(in.ContractsDir) + if err != nil { + return nil, err + } + + bindPort := fmt.Sprintf("%s/tcp", in.Port) + + req := testcontainers.ContainerRequest{ + Image: in.Image, + ExposedPorts: []string{in.Port}, + WaitingFor: wait.ForLog("Faucet is ready"), + Name: containerName, + Labels: framework.DefaultTCLabels(), + Networks: []string{framework.DefaultNetworkName}, + NetworkAliases: map[string][]string{ + framework.DefaultNetworkName: {containerName}, + }, + HostConfigModifier: func(h *container.HostConfig) { + h.PortBindings = framework.MapTheSamePort(bindPort) + }, + ImagePlatform: "linux/amd64", + Cmd: []string{ + "aptos", + "node", + "run-local-testnet", + "--with-faucet", + "--force-restart", + "--bind-to", + "0.0.0.0", + }, + Files: []testcontainers.ContainerFile{ + { + HostFilePath: absPath, + ContainerFilePath: "/", + }, + }, + } + + c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ + ContainerRequest: req, + Started: true, + }) + if err != nil { + return nil, err + } + host, err := c.Host(ctx) + if err != nil { + return nil, err + } + cmdStr := []string{"aptos", "init", "--network=local", "--assume-yes", fmt.Sprintf("--private-key=%s", DefaultAptosPrivateKey)} + _, err = framework.ExecContainer(containerName, cmdStr) + if err != nil { + return nil, err + } + fundCmd := []string{"aptos", "account", "fund-with-faucet", "--account", DefaultAptosAccount} + _, err = framework.ExecContainer(containerName, fundCmd) + if err != nil { + return nil, err + } + return &Output{ + UseCache: true, + Family: "aptos", + ContainerName: containerName, + Nodes: []*Node{ + { + HostHTTPUrl: fmt.Sprintf("http://%s:%s", host, in.Port), + DockerInternalHTTPUrl: fmt.Sprintf("http://%s:%s", containerName, in.Port), + }, + }, + }, nil +} diff --git a/framework/components/blockchain/blockchain.go b/framework/components/blockchain/blockchain.go index bf8da961c..32b23dbfb 100644 --- a/framework/components/blockchain/blockchain.go +++ b/framework/components/blockchain/blockchain.go @@ -8,7 +8,7 @@ import ( // Input is a blockchain network configuration params type Input struct { // Common EVM fields - Type string `toml:"type" validate:"required,oneof=anvil geth besu solana" envconfig:"net_type"` + Type string `toml:"type" validate:"required,oneof=anvil geth besu solana aptos" envconfig:"net_type"` Image string `toml:"image"` PullImage bool `toml:"pull_image"` Port string `toml:"port"` @@ -47,8 +47,6 @@ type Node struct { } // NewBlockchainNetwork this is an abstraction that can spin up various blockchain network simulators -// - Anvil -// - Geth func NewBlockchainNetwork(in *Input) (*Output, error) { if in.Out != nil && in.Out.UseCache { return in.Out, nil @@ -64,6 +62,8 @@ func NewBlockchainNetwork(in *Input) (*Output, error) { out, err = newBesu(in) case "solana": out, err = newSolana(in) + case "aptos": + out, err = newAptos(in) default: return nil, fmt.Errorf("blockchain type is not supported or empty, must be 'anvil' or 'geth'") } diff --git a/framework/docker.go b/framework/docker.go index 8b75c323a..b8d7cd43f 100644 --- a/framework/docker.go +++ b/framework/docker.go @@ -271,3 +271,52 @@ func BuildImage(dctx, dfile, nameAndTag string) error { return runCommand("docker", "build", "-t", nameAndTag, "-f", dfilePath, dctx) } } + +// ExecContainer executes a command inside a running container by name and returns the combined stdout/stderr. +func ExecContainer(containerName string, command []string) (string, error) { + L.Info().Strs("Command", command).Str("ContainerName", containerName).Msg("Executing command") + p, err := tc.NewDockerProvider() + if err != nil { + return "", err + } + ctx := context.Background() + containers, err := p.Client().ContainerList(ctx, container.ListOptions{ + All: true, + }) + if err != nil { + return "", fmt.Errorf("failed to list containers: %w", err) + } + var containerID string + for _, cont := range containers { + for _, name := range cont.Names { + if name == "/"+containerName { + containerID = cont.ID + break + } + } + } + if containerID == "" { + return "", fmt.Errorf("container with name '%s' not found", containerName) + } + + execConfig := container.ExecOptions{ + Cmd: command, + AttachStdout: true, + AttachStderr: true, + } + execID, err := p.Client().ContainerExecCreate(ctx, containerID, execConfig) + if err != nil { + return "", fmt.Errorf("failed to create exec instance: %w", err) + } + resp, err := p.Client().ContainerExecAttach(ctx, execID.ID, container.ExecStartOptions{}) + if err != nil { + return "", fmt.Errorf("failed to attach to exec instance: %w", err) + } + defer resp.Close() + output, err := io.ReadAll(resp.Reader) + if err != nil { + return "", fmt.Errorf("failed to read exec output: %w", err) + } + L.Info().Str("Output", string(output)).Msg("Command output") + return string(output), nil +} diff --git a/framework/examples/myproject/go.mod b/framework/examples/myproject/go.mod index d2331dd9a..7db17b0b0 100644 --- a/framework/examples/myproject/go.mod +++ b/framework/examples/myproject/go.mod @@ -17,7 +17,7 @@ require ( github.com/smartcontractkit/chainlink-testing-framework/seth v1.50.10 github.com/smartcontractkit/chainlink-testing-framework/wasp v1.50.2 github.com/stretchr/testify v1.10.0 - github.com/testcontainers/testcontainers-go v0.34.0 + github.com/testcontainers/testcontainers-go v0.35.0 ) require ( @@ -128,7 +128,7 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/mux v1.8.0 // indirect + github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/grafana/dskit v0.0.0-20231120170505-765e343eda4f // indirect github.com/grafana/gomemcache v0.0.0-20231023152154-6947259a0586 // indirect diff --git a/framework/examples/myproject/go.sum b/framework/examples/myproject/go.sum index b7fd8a463..07ca66256 100644 --- a/framework/examples/myproject/go.sum +++ b/framework/examples/myproject/go.sum @@ -494,8 +494,8 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gophercloud/gophercloud v1.5.0 h1:cDN6XFCLKiiqvYpjQLq9AiM7RDRbIC9450WpPH+yvXo= github.com/gophercloud/gophercloud v1.5.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grafana/dskit v0.0.0-20231120170505-765e343eda4f h1:gyojr97YeWZ70pKNakWv5/tKwBHuLy3icnIeCo9gQr4= @@ -897,8 +897,8 @@ github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKt github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= -github.com/testcontainers/testcontainers-go v0.34.0/go.mod h1:6P/kMkQe8yqPHfPWNulFGdFHTD8HB2vLq/231xY2iPQ= +github.com/testcontainers/testcontainers-go v0.35.0 h1:uADsZpTKFAtp8SLK+hMwSaa+X+JiERHtd4sQAFmXeMo= +github.com/testcontainers/testcontainers-go v0.35.0/go.mod h1:oEVBj5zrfJTrgjwONs1SsRbnBtH9OKl+IGl3UMcr2B4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= diff --git a/framework/examples/myproject/smoke_aptos.toml b/framework/examples/myproject/smoke_aptos.toml new file mode 100644 index 000000000..4013d2d6b --- /dev/null +++ b/framework/examples/myproject/smoke_aptos.toml @@ -0,0 +1,2 @@ +[blockchain_a] + type = "aptos" diff --git a/framework/examples/myproject/smoke_aptos_test.go b/framework/examples/myproject/smoke_aptos_test.go new file mode 100644 index 000000000..f560979ec --- /dev/null +++ b/framework/examples/myproject/smoke_aptos_test.go @@ -0,0 +1,39 @@ +package examples + +import ( + "github.com/go-resty/resty/v2" + "github.com/smartcontractkit/chainlink-testing-framework/framework" + "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" + "github.com/stretchr/testify/require" + "testing" +) + +type CfgAptos struct { + BlockchainA *blockchain.Input `toml:"blockchain_a" validate:"required"` +} + +func TestAptosSmoke(t *testing.T) { + in, err := framework.Load[CfgAptos](t) + require.NoError(t, err) + + bc, err := blockchain.NewBlockchainNetwork(in.BlockchainA) + require.NoError(t, err) + + // execute any additional commands, to deploy contracts or set up + // network is already funded, here are the keys + _ = blockchain.DefaultAptosAccount + _ = blockchain.DefaultAptosPrivateKey + + _, err = framework.ExecContainer(bc.ContainerName, []string{"ls", "-lah"}) + require.NoError(t, err) + + t.Run("test something", func(t *testing.T) { + // use internal URL to connect Chainlink nodes + _ = bc.Nodes[0].DockerInternalHTTPUrl + // use host URL to interact + _ = bc.Nodes[0].HostHTTPUrl + r := resty.New().SetBaseURL(bc.Nodes[0].HostHTTPUrl).EnableTrace() + _, err := r.R().Get("/v1/transactions") + require.NoError(t, err) + }) +} diff --git a/framework/examples/myproject/smoke_solana_test.go b/framework/examples/myproject/smoke_solana_test.go index 052fa4740..33fba92a4 100644 --- a/framework/examples/myproject/smoke_solana_test.go +++ b/framework/examples/myproject/smoke_solana_test.go @@ -22,7 +22,7 @@ func TestSolanaSmoke(t *testing.T) { require.NoError(t, err) t.Run("test something", func(t *testing.T) { - // use internal URL to connect chainlink nodes + // use internal URL to connect Chainlink nodes _ = bc.Nodes[0].DockerInternalHTTPUrl // use host URL to deploy contracts c := client.NewClient(bc.Nodes[0].HostHTTPUrl) diff --git a/framework/examples/myproject_cll/go.mod b/framework/examples/myproject_cll/go.mod index a87cba612..06c3c0b0f 100644 --- a/framework/examples/myproject_cll/go.mod +++ b/framework/examples/myproject_cll/go.mod @@ -75,7 +75,6 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect @@ -100,7 +99,7 @@ require ( github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/supranational/blst v0.3.13 // indirect - github.com/testcontainers/testcontainers-go v0.34.0 // indirect + github.com/testcontainers/testcontainers-go v0.35.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect diff --git a/framework/examples/myproject_cll/go.sum b/framework/examples/myproject_cll/go.sum index c318b1be7..59b3f6f82 100644 --- a/framework/examples/myproject_cll/go.sum +++ b/framework/examples/myproject_cll/go.sum @@ -280,8 +280,8 @@ github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKt github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= -github.com/testcontainers/testcontainers-go v0.34.0/go.mod h1:6P/kMkQe8yqPHfPWNulFGdFHTD8HB2vLq/231xY2iPQ= +github.com/testcontainers/testcontainers-go v0.35.0 h1:uADsZpTKFAtp8SLK+hMwSaa+X+JiERHtd4sQAFmXeMo= +github.com/testcontainers/testcontainers-go v0.35.0/go.mod h1:oEVBj5zrfJTrgjwONs1SsRbnBtH9OKl+IGl3UMcr2B4= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= diff --git a/framework/go.mod b/framework/go.mod index 648fdf35d..27af4a9c6 100644 --- a/framework/go.mod +++ b/framework/go.mod @@ -22,7 +22,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.33.0 github.com/stretchr/testify v1.9.0 - github.com/testcontainers/testcontainers-go v0.34.0 + github.com/testcontainers/testcontainers-go v0.35.0 github.com/urfave/cli/v2 v2.27.5 golang.org/x/sync v0.10.0 gopkg.in/guregu/null.v4 v4.0.0 @@ -90,7 +90,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/goccy/go-json v0.10.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/gorilla/websocket v1.4.2 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/holiman/uint256 v1.3.1 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.4 // indirect @@ -104,6 +104,7 @@ require ( github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect @@ -120,6 +121,9 @@ require ( github.com/opencontainers/image-spec v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -142,7 +146,7 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect golang.org/x/arch v0.11.0 // indirect golang.org/x/crypto v0.32.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect + golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect golang.org/x/net v0.30.0 // indirect golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect diff --git a/framework/go.sum b/framework/go.sum index 0ed90e3bf..bb1480f51 100644 --- a/framework/go.sum +++ b/framework/go.sum @@ -217,8 +217,8 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= @@ -273,8 +273,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zk github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= @@ -319,15 +319,15 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -371,8 +371,8 @@ github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKt github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= -github.com/testcontainers/testcontainers-go v0.34.0/go.mod h1:6P/kMkQe8yqPHfPWNulFGdFHTD8HB2vLq/231xY2iPQ= +github.com/testcontainers/testcontainers-go v0.35.0 h1:uADsZpTKFAtp8SLK+hMwSaa+X+JiERHtd4sQAFmXeMo= +github.com/testcontainers/testcontainers-go v0.35.0/go.mod h1:oEVBj5zrfJTrgjwONs1SsRbnBtH9OKl+IGl3UMcr2B4= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= @@ -415,8 +415,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=