Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Testing] Supplier staking E2E test #498

Merged
merged 6 commits into from
Apr 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
32 changes: 30 additions & 2 deletions e2e/tests/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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,
Expand All @@ -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",
Expand Down
28 changes: 28 additions & 0 deletions e2e/tests/stake_supplier.feature
Original file line number Diff line number Diff line change
@@ -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
Loading