e2e

package
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2024 License: BSD-3-Clause Imports: 22 Imported by: 0

README

Odyssey e2e test suites

  • Works with fixture-managed networks.
  • Compiles to a single binary with customizable configurations.

Running tests

go install -v github.com/onsi/ginkgo/v2/ginkgo@v2.0.0
ACK_GINKGO_RC=true ginkgo build ./tests/e2e
./tests/e2e/e2e.test --help

./tests/e2e/e2e.test \
--odysseygo-path=./build/odysseygo

See tests.e2e.sh for an example.

Adding tests

Define any flags/configurations in e2e.go.

Create a new package to implement feature-specific tests, or add tests to an existing package. For example:

.
└── e2e
    ├── README.md
    ├── e2e.go
    ├── e2e_test.go
    └── a
        └── transfer.go
            └── virtuous.go

e2e.go defines common configuration for other test packages. a/transfer/virtuous.go defines A-Chain transfer tests, labeled with a, which can be selected by ./tests/e2e/e2e.test --ginkgo.label-filter "a".

Testing against a persistent network

By default, a new ephemeral test network will be started before each test run. When developing e2e tests, it may be helpful to create a persistent test network to test against. This can increase the speed of iteration by removing the requirement to start a new network for every invocation of the test under development.

To use a persistent network:

# From the root of the odysseygo repo

# Build the testnetctl binary
$ ./scripts/build_testnetctl.sh

# Start a new network
$ ./build/testnetctl start-network --odysseygo-path=/path/to/odysseygo
...
Started network 1000 @ /home/me/.testnetctl/networks/1000

Configure testnetctl to target this network by default with one of the following statements:
 - source /home/me/.testnetctl/networks/1000/network.env
 - export TESTNETCTL_NETWORK_DIR=/home/me/.testnetctl/networks/1000
 - export TESTNETCTL_NETWORK_DIR=/home/me/.testnetctl/networks/latest

# Start a new test run using the persistent network
ginkgo -v ./tests/e2e -- \
    --odysseygo-path=/path/to/odysseygo \
    --ginkgo-focus-file=[name of file containing test] \
    --use-persistent-network \
    --network-dir=/path/to/network

# It is also possible to set the ODYSSEYGO_PATH env var instead of supplying --odysseygo-path
# and to set TESTNETCTL_NETWORK_DIR instead of supplying --network-dir.

See the testnet fixture README for more details.

Documentation

Overview

e2e implements the e2e tests.

Index

Constants

View Source
const (
	// Enough for primary.NewWallet to fetch initial UTXOs.
	DefaultWalletCreationTimeout = 5 * time.Second

	// Defines default tx confirmation timeout.
	// Enough for test/custom networks.
	DefaultConfirmTxTimeout = 20 * time.Second

	// This interval should represent the upper bound of the time
	// required to start a new node on a local test network.
	DefaultNodeStartTimeout = 20 * time.Second

	// A long default timeout used to timeout failed operations but
	// unlikely to induce flaking due to unexpected resource
	// contention.
	DefaultTimeout = 2 * time.Minute

	// Interval appropriate for network operations that should be
	// retried periodically but not too often.
	DefaultPollingInterval = 500 * time.Millisecond
)

Variables

This section is empty.

Functions

func AddEphemeralNode

func AddEphemeralNode(network testnet.Network, flags testnet.FlagsMap) testnet.Node

Add an ephemeral node that is only intended to be used by a single test. Its ID and URI are not intended to be returned from the Network instance to minimize accessibility from other tests.

func ContextWithTimeout

func ContextWithTimeout(duration time.Duration) context.Context

Helper simplifying use of a timed context by canceling the context on ginkgo teardown.

func DefaultContext

func DefaultContext() context.Context

Helper simplifying use of a timed context configured with the default timeout.

func DescribeAChain

func DescribeAChain(text string, body func()) bool

DescribeAChain annotates the tests for A-Chain. Can run with any type of cluster (e.g., local, testnet, mainnet).

func DescribeAChainSerial

func DescribeAChainSerial(text string, body func()) bool

DescribeAChainSerial annotates serial tests for A-Chain. Can run with any type of cluster (e.g., local, testnet, mainnet).

func DescribeDChain

func DescribeDChain(text string, body func()) bool

DescribeDChain annotates the tests for D-Chain. Can run with any type of cluster (e.g., local, testnet, mainnet).

func DescribeOChain

func DescribeOChain(text string, body func()) bool

DescribeOChain annotates the tests for O-Chain. Can run with any type of cluster (e.g., local, testnet, mainnet).

func Eventually

func Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msg string)

Re-implementation of testify/require.Eventually that is compatible with ginkgo. testify's version calls the condition function with a goroutine and ginkgo assertions don't work properly in goroutines.

func InitTestEnvironment

func InitTestEnvironment(envBytes []byte)

func SendEthTransaction

func SendEthTransaction(ethClient ethclient.Client, signedTx *types.Transaction) *types.Receipt

Sends an eth transaction, waits for the transaction receipt to be issued and checks that the receipt indicates success.

func SuggestGasPrice

func SuggestGasPrice(ethClient ethclient.Client) *big.Int

Determines the suggested gas price for the configured client that will maximize the chances of transaction acceptance.

func WaitForHealthy

func WaitForHealthy(node testnet.Node)

Wait for the given node to report healthy.

func WithDefaultContext

func WithDefaultContext() common.Option

Helper simplifying use via an option of a timed context configured with the default timeout.

func WithSuggestedGasPrice

func WithSuggestedGasPrice(ethClient ethclient.Client) common.Option

Helper simplifying use via an option of a gas price appropriate for testing.

Types

type TestEnvironment

type TestEnvironment struct {
	// The directory where the test network configuration is stored
	NetworkDir string
	// URIs used to access the API endpoints of nodes of the network
	URIs []testnet.NodeURI
	// The URI used to access the http server that allocates test data
	TestDataServerURI string
	// contains filtered or unexported fields
}
var Env *TestEnvironment

Env is used to access shared test fixture. Intended to be initialized by SynchronizedBeforeSuite.

func (*TestEnvironment) AllocateFundedKey

func (te *TestEnvironment) AllocateFundedKey() *secp256k1.PrivateKey

Retrieve a funded key allocated for the caller's exclusive use.

func (*TestEnvironment) AllocateFundedKeys

func (te *TestEnvironment) AllocateFundedKeys(count int) []*secp256k1.PrivateKey

Retrieve the specified number of funded keys allocated for the caller's exclusive use.

func (*TestEnvironment) GetNetwork

func (te *TestEnvironment) GetNetwork() testnet.Network

Retrieve the network to target for testing.

func (*TestEnvironment) GetRandomNodeURI

func (te *TestEnvironment) GetRandomNodeURI() testnet.NodeURI

Retrieve a random URI to naively attempt to spread API load across nodes.

func (*TestEnvironment) NewEthClient

func (te *TestEnvironment) NewEthClient(nodeURI testnet.NodeURI) ethclient.Client

Create a new eth client targeting the specified node URI.

func (*TestEnvironment) NewKeychain

func (te *TestEnvironment) NewKeychain(count int) *secp256k1fx.Keychain

Create a new keychain with the specified number of test keys.

func (*TestEnvironment) NewWallet

func (te *TestEnvironment) NewWallet(keychain *secp256k1fx.Keychain, nodeURI testnet.NodeURI) primary.Wallet

Create a new wallet for the provided keychain against the specified node URI.

Directories

Path Synopsis
a
transfer
Implements A-chain transfer tests.
Implements A-chain transfer tests.
Implements tests for the banff network upgrade.
Implements tests for the banff network upgrade.
d
o
Implements static handlers tests for alpha and omegavm
Implements static handlers tests for alpha and omegavm

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL