Skip to content

Commit 7887f71

Browse files
merged
2 parents 53bf6bf + a797b91 commit 7887f71

File tree

16 files changed

+242
-99
lines changed

16 files changed

+242
-99
lines changed

.github/workflows/build-and-test.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ on:
99
- dev
1010
pull_request:
1111

12+
# Cancel ongoing workflow runs if a new one is started
13+
concurrency:
14+
group: ${{ github.workflow }}-${{ github.ref }}
15+
cancel-in-progress: true
16+
1217
jobs:
1318
run_build_unit_tests:
1419
name: build_unit_test

staking/local/README.md

Lines changed: 107 additions & 0 deletions
Large diffs are not rendered by default.

tests/e2e/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,15 @@ ginkgo -v ./tests/e2e -- \
7676
```
7777

7878
See the testnet fixture [README](../fixture/testnet/README.md) for more details.
79+
80+
## Skipping bootstrap checks
81+
82+
By default many tests will attempt to bootstrap a new node with the
83+
post-test network state. While this is a valuable activity to perform
84+
in CI, it can add considerable latency to test development. To disable
85+
these bootstrap checks during development, set the
86+
`E2E_SKIP_BOOTSTRAP_CHECKS` env var to a non-empty value:
87+
88+
```bash
89+
E2E_SKIP_BOOTSTRAP_CHECKS=1 ginkgo -v ./tests/e2e ...
90+
```

tests/e2e/banff/suites.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package banff
77
import (
88
ginkgo "github.com/onsi/ginkgo/v2"
99

10-
"github.com/onsi/gomega"
10+
"github.com/stretchr/testify/require"
1111

1212
"github.com/ava-labs/avalanchego/ids"
1313
"github.com/ava-labs/avalanchego/tests"
@@ -20,6 +20,8 @@ import (
2020
)
2121

2222
var _ = ginkgo.Describe("[Banff]", func() {
23+
require := require.New(ginkgo.GinkgoT())
24+
2325
ginkgo.It("can send custom assets X->P and P->X",
2426
// use this for filtering tests by labels
2527
// ref. https://onsi.github.io/ginkgo/#spec-labels
@@ -59,7 +61,7 @@ var _ = ginkgo.Describe("[Banff]", func() {
5961
},
6062
},
6163
)
62-
gomega.Expect(err).Should(gomega.BeNil())
64+
require.NoError(err)
6365
assetID = assetTx.ID()
6466

6567
tests.Outf("{{green}}created new X-chain asset{{/}}: %s\n", assetID)
@@ -80,14 +82,14 @@ var _ = ginkgo.Describe("[Banff]", func() {
8082
},
8183
},
8284
)
83-
gomega.Expect(err).Should(gomega.BeNil())
85+
require.NoError(err)
8486

8587
tests.Outf("{{green}}issued X-chain export{{/}}: %s\n", tx.ID())
8688
})
8789

8890
ginkgo.By("import new asset from X-chain on the P-chain", func() {
8991
tx, err := pWallet.IssueImportTx(xChainID, owner)
90-
gomega.Expect(err).Should(gomega.BeNil())
92+
require.NoError(err)
9193

9294
tests.Outf("{{green}}issued P-chain import{{/}}: %s\n", tx.ID())
9395
})
@@ -107,14 +109,14 @@ var _ = ginkgo.Describe("[Banff]", func() {
107109
},
108110
},
109111
)
110-
gomega.Expect(err).Should(gomega.BeNil())
112+
require.NoError(err)
111113

112114
tests.Outf("{{green}}issued P-chain export{{/}}: %s\n", tx.ID())
113115
})
114116

115117
ginkgo.By("import asset from P-chain on the X-chain", func() {
116118
tx, err := xWallet.IssueImportTx(constants.PlatformChainID, owner)
117-
gomega.Expect(err).Should(gomega.BeNil())
119+
require.NoError(err)
118120

119121
tests.Outf("{{green}}issued X-chain import{{/}}: %s\n", tx.ID())
120122
})

tests/e2e/c/interchain_workflow.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,5 +163,7 @@ var _ = e2e.DescribeCChain("[Interchain Workflow]", func() {
163163
require.NoError(err)
164164
require.Greater(balances[avaxAssetID], uint64(0))
165165
})
166+
167+
e2e.CheckBootstrapIsPossible(e2e.Env.GetNetwork())
166168
})
167169
})

tests/e2e/e2e.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ func WithSuggestedGasPrice(ethClient ethclient.Client) common.Option {
254254
return common.WithBaseFee(baseFee)
255255
}
256256

257-
// Verifies that the state of the network is compatible with bootstrapping a new node.
257+
// Verify that a new node can bootstrap into the network.
258258
func CheckBootstrapIsPossible(network testnet.Network) {
259259
if len(os.Getenv(SkipBootstrapChecksEnvName)) > 0 {
260260
tests.Outf("{{yellow}}Skipping bootstrap check due to the %s env var being set", SkipBootstrapChecksEnvName)

tests/e2e/faultinjection/duplicate_node_id.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ var _ = ginkgo.Describe("Duplicate node handling", func() {
5757

5858
ginkgo.By("checking that the second new node is connected to its peers")
5959
checkConnectedPeers(nodes, node2)
60+
61+
// A bootstrap check was already performed by the second node.
6062
})
6163
})
6264

tests/e2e/p/permissionless_subnets.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
ginkgo "github.com/onsi/ginkgo/v2"
1212

13-
"github.com/onsi/gomega"
13+
"github.com/stretchr/testify/require"
1414

1515
"github.com/ava-labs/avalanchego/ids"
1616
"github.com/ava-labs/avalanchego/tests/e2e"
@@ -27,6 +27,8 @@ import (
2727
)
2828

2929
var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
30+
require := require.New(ginkgo.GinkgoT())
31+
3032
ginkgo.It("subnets operations",
3133
// use this for filtering tests by labels
3234
// ref. https://onsi.github.io/ginkgo/#spec-labels
@@ -50,8 +52,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
5052
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultTimeout)
5153
validatorIDs, err := pChainClient.SampleValidators(ctx, constants.PrimaryNetworkID, 1)
5254
cancel()
53-
gomega.Expect(err).Should(gomega.BeNil())
54-
gomega.Expect(validatorIDs).Should(gomega.HaveLen(1))
55+
require.NoError(err)
5556
validatorID = validatorIDs[0]
5657
})
5758

@@ -72,7 +73,8 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
7273
cancel()
7374

7475
subnetID = subnetTx.ID()
75-
gomega.Expect(subnetID, err).Should(gomega.Not(gomega.Equal(constants.PrimaryNetworkID)))
76+
require.NoError(err)
77+
require.NotEqual(subnetID, constants.PrimaryNetworkID)
7678
})
7779

7880
var subnetAssetID ids.ID
@@ -93,7 +95,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
9395
common.WithContext(ctx),
9496
)
9597
cancel()
96-
gomega.Expect(err).Should(gomega.BeNil())
98+
require.NoError(err)
9799
subnetAssetID = subnetAssetTx.ID()
98100
})
99101

@@ -115,7 +117,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
115117
common.WithContext(ctx),
116118
)
117119
cancel()
118-
gomega.Expect(err).Should(gomega.BeNil())
120+
require.NoError(err)
119121
})
120122

121123
ginkgo.By(fmt.Sprintf("Import the 100 MegaAvax of asset %s from the X-chain into the P-chain", subnetAssetID), func() {
@@ -126,7 +128,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
126128
common.WithContext(ctx),
127129
)
128130
cancel()
129-
gomega.Expect(err).Should(gomega.BeNil())
131+
require.NoError(err)
130132
})
131133

132134
ginkgo.By("make subnet permissionless", func() {
@@ -149,7 +151,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
149151
common.WithContext(ctx),
150152
)
151153
cancel()
152-
gomega.Expect(err).Should(gomega.BeNil())
154+
require.NoError(err)
153155
})
154156

155157
validatorStartTime := time.Now().Add(time.Minute)
@@ -173,7 +175,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
173175
common.WithContext(ctx),
174176
)
175177
cancel()
176-
gomega.Expect(err).Should(gomega.BeNil())
178+
require.NoError(err)
177179
})
178180

179181
delegatorStartTime := validatorStartTime
@@ -194,7 +196,7 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
194196
common.WithContext(ctx),
195197
)
196198
cancel()
197-
gomega.Expect(err).Should(gomega.BeNil())
199+
require.NoError(err)
198200
})
199201
})
200202
})

tests/e2e/p/workflow.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ package p
55

66
import (
77
"context"
8-
"errors"
98
"time"
109

1110
ginkgo "github.com/onsi/ginkgo/v2"
1211

13-
"github.com/onsi/gomega"
12+
"github.com/stretchr/testify/require"
1413

1514
"github.com/ava-labs/avalanchego/api/info"
1615
"github.com/ava-labs/avalanchego/ids"
@@ -33,6 +32,8 @@ import (
3332
// - Checks the expected value of the funding address
3433

3534
var _ = e2e.DescribePChain("[Workflow]", func() {
35+
require := require.New(ginkgo.GinkgoT())
36+
3637
ginkgo.It("P-chain main operations",
3738
// use this for filtering tests by labels
3839
// ref. https://onsi.github.io/ginkgo/#spec-labels
@@ -55,7 +56,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
5556
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
5657
minValStake, minDelStake, err := pChainClient.GetMinStake(ctx, constants.PlatformChainID)
5758
cancel()
58-
gomega.Expect(err).Should(gomega.BeNil())
59+
require.NoError(err)
5960
tests.Outf("{{green}} minimal validator stake: %d {{/}}\n", minValStake)
6061
tests.Outf("{{green}} minimal delegator stake: %d {{/}}\n", minDelStake)
6162

@@ -64,7 +65,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
6465
ctx, cancel = context.WithTimeout(context.Background(), e2e.DefaultWalletCreationTimeout)
6566
fees, err := infoClient.GetTxFee(ctx)
6667
cancel()
67-
gomega.Expect(err).Should(gomega.BeNil())
68+
require.NoError(err)
6869
txFees := uint64(fees.TxFee)
6970
tests.Outf("{{green}} txFee: %d {{/}}\n", txFees)
7071

@@ -77,7 +78,8 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
7778
pBalances, err := pWallet.Builder().GetBalance()
7879
pBalance := pBalances[avaxAssetID]
7980
minBalance := minValStake + txFees + minDelStake + txFees + toTransfer + txFees
80-
gomega.Expect(pBalance, err).To(gomega.BeNumerically(">=", minBalance))
81+
require.NoError(err)
82+
require.GreaterOrEqual(pBalance, minBalance)
8183
})
8284
// create validator data
8385
validatorStartTimeDiff := 30 * time.Second
@@ -86,7 +88,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
8688
// Use a random node ID to ensure that repeated test runs
8789
// will succeed against a persistent network.
8890
validatorID, err := ids.ToNodeID(utils.RandomBytes(ids.NodeIDLen))
89-
gomega.Expect(err).Should(gomega.BeNil())
91+
require.NoError(err)
9092

9193
vdr := &txs.Validator{
9294
NodeID: validatorID,
@@ -109,7 +111,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
109111
common.WithContext(ctx),
110112
)
111113
cancel()
112-
gomega.Expect(err).Should(gomega.BeNil())
114+
require.NoError(err)
113115
})
114116

115117
ginkgo.By("issue add delegator tx", func() {
@@ -120,17 +122,17 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
120122
common.WithContext(ctx),
121123
)
122124
cancel()
123-
gomega.Expect(err).Should(gomega.BeNil())
125+
require.NoError(err)
124126
})
125127

126128
// retrieve initial balances
127129
pBalances, err := pWallet.Builder().GetBalance()
128-
gomega.Expect(err).Should(gomega.BeNil())
130+
require.NoError(err)
129131
pStartBalance := pBalances[avaxAssetID]
130132
tests.Outf("{{blue}} P-chain balance before P->X export: %d {{/}}\n", pStartBalance)
131133

132134
xBalances, err := xWallet.Builder().GetFTBalance()
133-
gomega.Expect(err).Should(gomega.BeNil())
135+
require.NoError(err)
134136
xStartBalance := xBalances[avaxAssetID]
135137
tests.Outf("{{blue}} X-chain balance before P->X export: %d {{/}}\n", xStartBalance)
136138

@@ -160,22 +162,22 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
160162
common.WithContext(ctx),
161163
)
162164
cancel()
163-
gomega.Expect(err).Should(gomega.BeNil())
165+
require.NoError(err)
164166
})
165167

166168
// check balances post export
167169
pBalances, err = pWallet.Builder().GetBalance()
168-
gomega.Expect(err).Should(gomega.BeNil())
170+
require.NoError(err)
169171
pPreImportBalance := pBalances[avaxAssetID]
170172
tests.Outf("{{blue}} P-chain balance after P->X export: %d {{/}}\n", pPreImportBalance)
171173

172174
xBalances, err = xWallet.Builder().GetFTBalance()
173-
gomega.Expect(err).Should(gomega.BeNil())
175+
require.NoError(err)
174176
xPreImportBalance := xBalances[avaxAssetID]
175177
tests.Outf("{{blue}} X-chain balance after P->X export: %d {{/}}\n", xPreImportBalance)
176178

177-
gomega.Expect(xPreImportBalance).To(gomega.Equal(xStartBalance)) // import not performed yet
178-
gomega.Expect(pPreImportBalance).To(gomega.Equal(pStartBalance - toTransfer - txFees))
179+
require.Equal(xPreImportBalance, xStartBalance) // import not performed yet
180+
require.Equal(pPreImportBalance, pStartBalance-toTransfer-txFees)
179181

180182
ginkgo.By("import avax from P into X chain", func() {
181183
ctx, cancel := context.WithTimeout(context.Background(), e2e.DefaultConfirmTxTimeout)
@@ -185,21 +187,21 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
185187
common.WithContext(ctx),
186188
)
187189
cancel()
188-
gomega.Expect(err).Should(gomega.BeNil(), "is context.DeadlineExceeded: %v", errors.Is(err, context.DeadlineExceeded))
190+
require.NoError(err)
189191
})
190192

191193
// check balances post import
192194
pBalances, err = pWallet.Builder().GetBalance()
193-
gomega.Expect(err).Should(gomega.BeNil())
195+
require.NoError(err)
194196
pFinalBalance := pBalances[avaxAssetID]
195197
tests.Outf("{{blue}} P-chain balance after P->X import: %d {{/}}\n", pFinalBalance)
196198

197199
xBalances, err = xWallet.Builder().GetFTBalance()
198-
gomega.Expect(err).Should(gomega.BeNil())
200+
require.NoError(err)
199201
xFinalBalance := xBalances[avaxAssetID]
200202
tests.Outf("{{blue}} X-chain balance after P->X import: %d {{/}}\n", xFinalBalance)
201203

202-
gomega.Expect(xFinalBalance).To(gomega.Equal(xPreImportBalance + toTransfer - txFees)) // import not performed yet
203-
gomega.Expect(pFinalBalance).To(gomega.Equal(pPreImportBalance))
204+
require.Equal(xFinalBalance, xPreImportBalance+toTransfer-txFees) // import not performed yet
205+
require.Equal(pFinalBalance, pPreImportBalance)
204206
})
205207
})

0 commit comments

Comments
 (0)