From a752fca30b3f1b109d33130627a4fb2bb5ce008a Mon Sep 17 00:00:00 2001 From: Daniel Olshansky Date: Sat, 27 Apr 2024 18:14:25 -0700 Subject: [PATCH] [Testing] Supplier staking E2E test (#498) --- Makefile | 4 ++++ e2e/tests/init_test.go | 32 ++++++++++++++++++++++++++++++-- e2e/tests/stake_supplier.feature | 28 ++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 e2e/tests/stake_supplier.feature diff --git a/Makefile b/Makefile index 1e501f2b9..ad52ee2b9 100644 --- a/Makefile +++ b/Makefile @@ -322,6 +322,10 @@ test_e2e: test_e2e_env ## Run all E2E tests test_e2e_app: go test -v ./e2e/tests/... -tags=e2e,test --features-path=stake_app.feature +.PHONY: test_e2e_supplier +test_e2e_supplier: + go test -v ./e2e/tests/... -tags=e2e,test --features-path=stake_supplier.feature + .PHONY: test_e2e_gateway test_e2e_gateway: go test -v ./e2e/tests/... -tags=e2e,test --features-path=stake_gateway.feature diff --git a/e2e/tests/init_test.go b/e2e/tests/init_test.go index 2f5e7d68e..ea859cb41 100644 --- a/e2e/tests/init_test.go +++ b/e2e/tests/init_test.go @@ -24,6 +24,7 @@ import ( "github.com/pokt-network/poktroll/app" "github.com/pokt-network/poktroll/testutil/testclient" + "github.com/pokt-network/poktroll/testutil/yaml" apptypes "github.com/pokt-network/poktroll/x/application/types" prooftypes "github.com/pokt-network/poktroll/x/proof/types" sessiontypes "github.com/pokt-network/poktroll/x/session/types" @@ -219,14 +220,16 @@ func (s *suite) TheUserStakesAWithUpoktFromTheAccount(actorType string, amount i func (s *suite) TheUserStakesAWithUpoktForServiceFromTheAccount(actorType string, amount int64, serviceId, accName string) { // Create a temporary config file - configPathPattern := fmt.Sprintf("%s_stake_config_*.yaml", accName) + configPathPattern := fmt.Sprintf("%s_stake_config.yaml", accName) configFile, err := os.CreateTemp("", configPathPattern) require.NoError(s, err, "error creating config file in %q", path.Join(os.TempDir(), configPathPattern)) - configContent := fmt.Sprintf("stake_amount: %d upokt\nservice_ids:\n - %s", amount, serviceId) + // Write the config content to the file + configContent := s.getConfigFileContent(amount, actorType, serviceId) _, err = configFile.Write([]byte(configContent)) require.NoError(s, err, "error writing config file %q", configFile.Name()) + // Prepare the command arguments args := []string{ "tx", actorType, @@ -248,6 +251,31 @@ func (s *suite) TheUserStakesAWithUpoktForServiceFromTheAccount(actorType string s.pocketd.result = res } +func (s *suite) getConfigFileContent(amount int64, actorType, serviceId string) string { + var configContent string + switch actorType { + case "application": + configContent = fmt.Sprintf(` + stake_amount: %dupokt + service_ids: + - %s`, + amount, serviceId) + case "supplier": + configContent = fmt.Sprintf(` + stake_amount: %dupokt + services: + - service_id: %s + endpoints: + - publicly_exposed_url: http://relayminer:8545 + rpc_type: json_rpc`, + amount, serviceId) + default: + s.Fatalf("unknown actor type %s", actorType) + } + fmt.Println(yaml.NormalizeYAMLIndentation(configContent)) + return yaml.NormalizeYAMLIndentation(configContent) +} + func (s *suite) TheUserUnstakesAFromTheAccount(actorType string, accName string) { args := []string{ "tx", diff --git a/e2e/tests/stake_supplier.feature b/e2e/tests/stake_supplier.feature new file mode 100644 index 000000000..fc7776c64 --- /dev/null +++ b/e2e/tests/stake_supplier.feature @@ -0,0 +1,28 @@ +Feature: Stake Supplier Namespace + + Scenario: User can stake a Supplier + Given the user has the pocketd binary installed + And the "supplier" for account "supplier2" is not staked + # Stake with 1 uPOKT more than the current stake used in genesis to make + # the transaction succeed. + And the account "supplier2" has a balance greater than "1000070" uPOKT + When the user stakes a "supplier" with "1000070" uPOKT for "anvil" service from the account "supplier2" + Then the user should be able to see standard output containing "txhash:" + And the user should be able to see standard output containing "code: 0" + And the pocketd binary should exit without error + # TODO_TECHDEBT(@Olshansk, @red-0ne): Replace these time-based waits with event listening waits + And the user should wait for "5" seconds + And the "supplier" for account "supplier2" is staked with "1000070" uPOKT + And the account balance of "supplier2" should be "1000070" uPOKT "less" than before + + Scenario: User can unstake a Supplier + Given the user has the pocketd binary installed + And the "supplier" for account "supplier2" is staked with "1000070" uPOKT + And an account exists for "supplier2" + When the user unstakes a "supplier" from the account "supplier2" + Then the user should be able to see standard output containing "txhash:" + And the user should be able to see standard output containing "code: 0" + And the pocketd binary should exit without error + And the user should wait for "5" seconds + And the "supplier" for account "supplier2" is not staked + And the account balance of "supplier2" should be "1000070" uPOKT "more" than before \ No newline at end of file