Skip to content

Commit 40f56d8

Browse files
committed
e2e: Move keychain and wallet creation to test helpers
1 parent 70b0af8 commit 40f56d8

File tree

6 files changed

+51
-67
lines changed

6 files changed

+51
-67
lines changed

tests/e2e/banff/suites.go

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
package banff
66

77
import (
8-
"context"
9-
108
ginkgo "github.com/onsi/ginkgo/v2"
119

1210
"github.com/onsi/gomega"
@@ -19,7 +17,6 @@ import (
1917
"github.com/ava-labs/avalanchego/vms/components/avax"
2018
"github.com/ava-labs/avalanchego/vms/components/verify"
2119
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
22-
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
2320
)
2421

2522
var _ = ginkgo.Describe("[Banff]", func() {
@@ -31,21 +28,8 @@ var _ = ginkgo.Describe("[Banff]", func() {
3128
"banff",
3229
),
3330
func() {
34-
key := e2e.Env.AllocateFundedKey()
35-
kc := secp256k1fx.NewKeychain(key)
36-
var wallet primary.Wallet
37-
ginkgo.By("initialize wallet", func() {
38-
walletURI := e2e.Env.GetRandomNodeURI()
39-
40-
// 5-second is enough to fetch initial UTXOs for test cluster in "primary.NewWallet"
41-
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
42-
var err error
43-
wallet, err = primary.NewWalletFromURI(ctx, walletURI, kc)
44-
cancel()
45-
gomega.Expect(err).Should(gomega.BeNil())
46-
47-
tests.Outf("{{green}}created wallet{{/}}\n")
48-
})
31+
keychain := e2e.Env.NewKeychain(1)
32+
wallet := e2e.Env.NewWallet(keychain)
4933

5034
// Get the P-chain and the X-chain wallets
5135
pWallet := wallet.P()
@@ -56,7 +40,7 @@ var _ = ginkgo.Describe("[Banff]", func() {
5640
owner := &secp256k1fx.OutputOwners{
5741
Threshold: 1,
5842
Addrs: []ids.ShortID{
59-
key.Address(),
43+
keychain.Keys[0].Address(),
6044
},
6145
}
6246

tests/e2e/e2e.go

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ package e2e
66

77
import (
88
"context"
9+
"encoding/json"
10+
"fmt"
911
"math/rand"
1012
"os"
1113
"time"
@@ -19,6 +21,8 @@ import (
1921
"github.com/ava-labs/avalanchego/tests/fixture/testnet"
2022
"github.com/ava-labs/avalanchego/tests/fixture/testnet/local"
2123
"github.com/ava-labs/avalanchego/utils/crypto/secp256k1"
24+
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
25+
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
2226
)
2327

2428
const (
@@ -41,7 +45,7 @@ const (
4145

4246
// Env is used to access shared test fixture. Intended to be
4347
// initialized by SynchronizedBeforeSuite.
44-
var Env TestEnvironment
48+
var Env *TestEnvironment
4549

4650
type TestEnvironment struct {
4751
// The directory where the test network configuration is stored
@@ -50,6 +54,17 @@ type TestEnvironment struct {
5054
URIs []string
5155
// The URI used to access the http server that allocates test data
5256
TestDataServerURI string
57+
58+
require *require.Assertions
59+
}
60+
61+
func InitTestEnvironment(envBytes []byte) {
62+
require := require.New(ginkgo.GinkgoT())
63+
require.Nil(Env, "env already initialized")
64+
Env = &TestEnvironment{
65+
require: require,
66+
}
67+
require.NoError(json.Unmarshal(envBytes, Env))
5368
}
5469

5570
// Retrieve a random URI to naively attempt to spread API load across
@@ -62,7 +77,7 @@ func (te *TestEnvironment) GetRandomNodeURI() string {
6277
// Retrieve the network to target for testing.
6378
func (te *TestEnvironment) GetNetwork() testnet.Network {
6479
network, err := local.ReadNetwork(te.NetworkDir)
65-
require.NoError(ginkgo.GinkgoT(), err)
80+
te.require.NoError(err)
6681
return network
6782
}
6883

@@ -78,6 +93,24 @@ func (te *TestEnvironment) AllocateFundedKey() *secp256k1.PrivateKey {
7893
return te.AllocateFundedKeys(1)[0]
7994
}
8095

96+
// Create a new keychain with the specified number of test keys.
97+
func (te *TestEnvironment) NewKeychain(count int) *secp256k1fx.Keychain {
98+
tests.Outf(fmt.Sprintf("{{blue}} initializing keychain with %d keys {{/}}\n", count))
99+
keys := te.AllocateFundedKeys(count)
100+
return secp256k1fx.NewKeychain(keys...)
101+
}
102+
103+
// Create a new wallet for the provided keychain.
104+
func (te *TestEnvironment) NewWallet(keychain *secp256k1fx.Keychain) primary.Wallet {
105+
tests.Outf("{{blue}} initializing a new wallet {{/}}\n")
106+
ctx, cancel := context.WithTimeout(context.Background(), DefaultWalletCreationTimeout)
107+
defer cancel()
108+
wallet, err := primary.NewWalletFromURI(ctx, te.GetRandomNodeURI(), keychain)
109+
te.require.NoError(err)
110+
tests.Outf("{{green}}wallet initialized{{/}}\n")
111+
return wallet
112+
}
113+
81114
// Add a temporary node that is only intended to be used by a single
82115
// test. Its ID and URI are not intended to be returned from The
83116
// Network instance to avoid accessibility from other tests.

tests/e2e/e2e_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,5 @@ var _ = ginkgo.SynchronizedBeforeSuite(func() []byte {
132132
// Run in every ginkgo process
133133

134134
// Initialize the local test environment from the global state
135-
e2e.Env = e2e.TestEnvironment{}
136-
require.NoError(ginkgo.GinkgoT(), json.Unmarshal(envBytes, &e2e.Env))
135+
e2e.InitTestEnvironment(envBytes)
137136
})

tests/e2e/p/permissionless_subnets.go

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414

1515
"github.com/ava-labs/avalanchego/ids"
1616
"github.com/ava-labs/avalanchego/snow/choices"
17-
"github.com/ava-labs/avalanchego/tests"
1817
"github.com/ava-labs/avalanchego/tests/e2e"
1918
"github.com/ava-labs/avalanchego/utils/constants"
2019
"github.com/ava-labs/avalanchego/utils/units"
@@ -27,7 +26,6 @@ import (
2726
"github.com/ava-labs/avalanchego/vms/platformvm/status"
2827
"github.com/ava-labs/avalanchego/vms/platformvm/txs"
2928
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
30-
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
3129
"github.com/ava-labs/avalanchego/wallet/subnet/primary/common"
3230
)
3331

@@ -40,21 +38,10 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
4038
"permissionless-subnets",
4139
),
4240
func() {
43-
nodeURI := e2e.Env.GetRandomNodeURI()
44-
45-
tests.Outf("{{blue}} setting up keys {{/}}\n")
46-
testKey := e2e.Env.AllocateFundedKey()
47-
keyChain := secp256k1fx.NewKeychain(testKey)
48-
49-
var baseWallet primary.Wallet
50-
ginkgo.By("setup wallet", func() {
51-
var err error
52-
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultTimeout)
53-
baseWallet, err = primary.NewWalletFromURI(ctx, nodeURI, keyChain)
54-
cancel()
55-
gomega.Expect(err).Should(gomega.BeNil())
56-
})
41+
keychain := e2e.Env.NewKeychain(1)
42+
baseWallet := e2e.Env.NewWallet(keychain)
5743

44+
nodeURI := e2e.Env.GetRandomNodeURI()
5845
pWallet := baseWallet.P()
5946
pChainClient := platformvm.NewClient(nodeURI)
6047
xWallet := baseWallet.X()
@@ -74,7 +61,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
7461
owner := &secp256k1fx.OutputOwners{
7562
Threshold: 1,
7663
Addrs: []ids.ShortID{
77-
testKey.PublicKey().Address(),
64+
keychain.Keys[0].Address(),
7865
},
7966
}
8067

tests/e2e/p/workflow.go

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/ava-labs/avalanchego/vms/platformvm/status"
2727
"github.com/ava-labs/avalanchego/vms/platformvm/txs"
2828
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
29-
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
3029
"github.com/ava-labs/avalanchego/wallet/subnet/primary/common"
3130
)
3231

@@ -47,16 +46,8 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
4746
ginkgo.FlakeAttempts(2),
4847
func() {
4948
nodeURI := e2e.Env.GetRandomNodeURI()
50-
51-
tests.Outf("{{blue}} setting up keys {{/}}\n")
52-
keys := e2e.Env.AllocateFundedKeys(2)
53-
keyChain := secp256k1fx.NewKeychain(keys...)
54-
55-
tests.Outf("{{blue}} setting up wallet {{/}}\n")
56-
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
57-
baseWallet, err := primary.NewWalletFromURI(ctx, nodeURI, keyChain)
58-
cancel()
59-
gomega.Expect(err).Should(gomega.BeNil())
49+
keychain := e2e.Env.NewKeychain(2)
50+
baseWallet := e2e.Env.NewWallet(keychain)
6051

6152
pWallet := baseWallet.P()
6253
avaxAssetID := baseWallet.P().AVAXAssetID()
@@ -65,7 +56,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
6556
xChainClient := avm.NewClient(nodeURI, xWallet.BlockchainID().String())
6657

6758
tests.Outf("{{blue}} fetching minimal stake amounts {{/}}\n")
68-
ctx, cancel = context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
59+
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
6960
minValStake, minDelStake, err := pChainClient.GetMinStake(ctx, constants.PlatformChainID)
7061
cancel()
7162
gomega.Expect(err).Should(gomega.BeNil())
@@ -84,8 +75,8 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
8475
// amount to transfer from P to X chain
8576
toTransfer := 1 * units.Avax
8677

87-
pShortAddr := keys[0].Address()
88-
xTargetAddr := keys[1].Address()
78+
pShortAddr := keychain.Keys[0].Address()
79+
xTargetAddr := keychain.Keys[1].Address()
8980
ginkgo.By("check selected keys have sufficient funds", func() {
9081
pBalances, err := pWallet.Builder().GetBalance()
9182
pBalance := pBalances[avaxAssetID]

tests/e2e/x/transfer/virtuous.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,9 @@ var _ = e2e.DescribeXChainSerial("[Virtuous Transfer Tx AVAX]", func() {
6565
testKeys[i], testKeys[j] = testKeys[j], testKeys[i]
6666
})
6767
}
68-
keyChain := secp256k1fx.NewKeychain(testKeys...)
6968

70-
var baseWallet primary.Wallet
71-
var err error
72-
ginkgo.By("setting up a base wallet", func() {
73-
walletURI := e2e.Env.GetRandomNodeURI()
74-
75-
// 5-second is enough to fetch initial UTXOs for test cluster in "primary.NewWallet"
76-
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
77-
baseWallet, err = primary.NewWalletFromURI(ctx, walletURI, keyChain)
78-
cancel()
79-
gomega.Expect(err).Should(gomega.BeNil())
80-
})
69+
keychain := secp256k1fx.NewKeychain(testKeys...)
70+
baseWallet := e2e.Env.NewWallet(keychain)
8171
avaxAssetID := baseWallet.X().AVAXAssetID()
8272

8373
wallets := make([]primary.Wallet, len(testKeys))
@@ -157,7 +147,7 @@ var _ = e2e.DescribeXChainSerial("[Virtuous Transfer Tx AVAX]", func() {
157147

158148
ginkgo.By("X-Chain transfer with wrong amount must fail", func() {
159149
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultConfirmTxTimeout)
160-
_, err = wallets[fromIdx].X().IssueBaseTx(
150+
_, err := wallets[fromIdx].X().IssueBaseTx(
161151
[]*avax.TransferableOutput{{
162152
Asset: avax.Asset{
163153
ID: avaxAssetID,

0 commit comments

Comments
 (0)