envtest

package
v0.23.0 Latest Latest
Warning

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

Go to latest
Published: Jul 24, 2022 License: Apache-2.0 Imports: 24 Imported by: 0

README

Starport Integration Tests

The Starport integration tests build a new application and run all Starport commands to check the Starport code integrity. The runners and helper methods are located in this current folder. The test commands are split into folders, for better concurrency, each folder is a parallel job into the CI workflow. To create a new one, we only need to create a new folder. This will be automatically detected and added into the PR CI checks, or we can only create new tests into an existing folder or file.

Running synchronously all integration tests can be very slow. The command below can run everything:

go test -v -timeout 120m ./integration

Or you can just run a specific test folder, like the list types test

go test -v -timeout 120m ./integration/list

Usage

  • Create a new env and scaffold an empty chain:
var (
    env  = envtest.New(t)
    path = env.Scaffold("github.com/test/blog")
)
  • Now, you can use the env to run the starport commands and check the success status:
env.Must(env.Exec("create a list with bool",
    step.NewSteps(step.New(
        step.Exec(envtest.IgniteApp, "s", "list", "--yes", "document", "signed:bool"),
        step.Workdir(path),
    )),
))
env.EnsureAppIsSteady(path)
  • To check if the command returns an error, you can add the envtest.ExecShouldError() step:
env.Must(env.Exec("should prevent creating a list with duplicated fields",
    step.NewSteps(step.New(
        step.Exec(envtest.IgniteApp, "s", "list", "--yes", "company", "name", "name"),
        step.Workdir(path),
    )),
    envtest.ExecShouldError(),
))
env.EnsureAppIsSteady(path)

Documentation

Index

Constants

View Source
const (
	ServeTimeout = time.Minute * 15
	IgniteApp    = "ignite"
	ConfigYML    = "config.yml"
)
View Source
const (
	Stargate = "stargate"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Env

type Env struct {
	// contains filtered or unexported fields
}

Env provides an isolated testing environment and what's needed to make it possible.

func New

func New(t *testing.T) Env

New creates a new testing environment.

func (Env) AppdHome

func (e Env) AppdHome(name string) string

AppdHome returns appd's home dir.

func (Env) ConfigureFaucet

func (e Env) ConfigureFaucet(path string, configFile string, coins, coinsMax []string) string

ConfigureFaucet finds a random port for the app faucet and updates config.yml with this port and provided coins options

func (Env) Ctx

func (e Env) Ctx() context.Context

Ctx returns parent context for the test suite to use for cancelations.

func (Env) EnsureAppIsSteady

func (e Env) EnsureAppIsSteady(appPath string)

EnsureAppIsSteady ensures that app living at the path can compile and its tests are passing.

func (Env) Exec

func (e Env) Exec(msg string, steps step.Steps, options ...ExecOption) (ok bool)

Exec executes a command step with options where msg describes the expectation from the test. unless calling with Must(), Exec() will not exit test runtime on failure.

func (Env) Home

func (e Env) Home() string

Home returns user's home dir.

func (Env) IsAppServed

func (e Env) IsAppServed(ctx context.Context, host chainconfig.Host) error

IsAppServed checks that app is served properly and servers are started to listening before ctx canceled.

func (Env) IsFaucetServed

func (e Env) IsFaucetServed(ctx context.Context, faucetClient cosmosfaucet.HTTPClient) error

IsFaucetServed checks that faucet of the app is served properly

func (Env) Must

func (e Env) Must(ok bool)

Must fails the immediately if not ok. t.Fail() needs to be called for the failing tests before running Must().

func (Env) RandomizeServerPorts

func (e Env) RandomizeServerPorts(path string, configFile string) chainconfig.Host

RandomizeServerPorts randomizes server ports for the app at path, updates its config.yml and returns new values.

func (Env) Scaffold

func (e Env) Scaffold(name string, flags ...string) (appPath string)

Scaffold scaffolds an app to a unique appPath and returns it.

func (Env) Serve

func (e Env) Serve(msg, path, home, configPath string, options ...ExecOption) (ok bool)

Serve serves an application lives under path with options where msg describes the execution from the serving action. unless calling with Must(), Serve() will not exit test runtime on failure.

func (Env) SetCleanup

func (e Env) SetCleanup(f func())

SetCleanup registers a function to be called when the test (or subtest) and all its subtests complete.

func (Env) SetRandomHomeConfig

func (e Env) SetRandomHomeConfig(path string, configFile string)

SetRandomHomeConfig sets in the blockchain config files generated temporary directories for home directories

func (Env) Simulate

func (e Env) Simulate(appPath string, numBlocks, blockSize int)

Simulate runs the simulation test for the app

func (Env) TmpDir

func (e Env) TmpDir() (path string)

TmpDir creates a new temporary directory.

type ExecOption

type ExecOption func(*execOptions)

func ExecCtx

func ExecCtx(ctx context.Context) ExecOption

ExecCtx sets cancelation context for the execution.

func ExecRetry

func ExecRetry() ExecOption

ExecRetry retries command until it is successful before context is canceled.

func ExecShouldError

func ExecShouldError() ExecOption

ExecShouldError sets the expectations of a command's execution to end with a failure.

func ExecStderr

func ExecStderr(w io.Writer) ExecOption

ExecStderr captures stderr of an execution.

func ExecStdout

func ExecStdout(w io.Writer) ExecOption

ExecStdout captures stdout of an execution.

Jump to

Keyboard shortcuts

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