integration

package
v0.0.11 Latest Latest
Warning

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

Go to latest
Published: Nov 27, 2024 License: MIT Imports: 74 Imported by: 0

Documentation

Overview

The integration package contains the preparation of a full application to be used for module integration tests.

It is intended to be a middle ground between unit tests and full-blown end-to-end tests, while enabling a quick feedback loop to verify cross module interactions.

Integration tests are suitable for things like testing business logic that happens in the ABCI handlers, as well as start/end block hooks.

References from the Cosmos SDK that this package is based on: - https://github.com/cosmos/cosmos-sdk/tree/main/testutil/integration - https://docs.cosmos.network/main/build/building-modules/testing#integration-tests - https://tutorials.cosmos.network/academy/2-cosmos-concepts/12-testing.html#integration-tests

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type App

type App struct {
	*baseapp.BaseApp

	// Some default helper fixtures for general testing.
	// They're publicly exposed and should/could be improved and expand on
	// over time.
	//
	// TODO_IMPROVE: Refactor into a DefaultActorsIntegrationSuite test suite.
	DefaultService                   *sharedtypes.Service
	DefaultApplication               *apptypes.Application
	DefaultApplicationKeyringUid     string
	DefaultSupplier                  *sharedtypes.Supplier
	DefaultSupplierKeyringKeyringUid string
	// contains filtered or unexported fields
}

App is a test application that can be used to test the behaviour when none of the modules are mocked and their integration (cross module interaction) needs to be validated.

func NewCompleteIntegrationApp

func NewCompleteIntegrationApp(t *testing.T, opts ...IntegrationAppOptionFn) *App

NewCompleteIntegrationApp creates a new instance of the App, abstracting out all the internal details and complexities of the application setup.

TODO_TECHDEBT: Not all of the modules are created here (e.g. minting module), so it is up to the developer to add / improve / update this function over time as the need arises.

func NewIntegrationApp

func NewIntegrationApp(
	t *testing.T,
	sdkCtx sdk.Context,
	cdc codec.Codec,
	txCfg client.TxConfig,
	registry codectypes.InterfaceRegistry,
	bApp *baseapp.BaseApp,
	logger log.Logger,
	authority sdk.AccAddress,
	modules map[string]appmodule.AppModule,
	keys map[string]*storetypes.KVStoreKey,
	msgRouter *baseapp.MsgServiceRouter,
	queryHelper *baseapp.QueryServiceTestHelper,
	opts ...IntegrationAppOptionFn,
) *App

NewIntegrationApp creates a new instance of the App with the provided details on how the modules should be configured.

func (*App) GetAuthority

func (app *App) GetAuthority() string

GetAuthority returns the authority address used by the application.

func (*App) GetCodec

func (app *App) GetCodec() codec.Codec

GetCodec returns the codec used by the application.

func (*App) GetFaucetBech32 added in v0.0.10

func (app *App) GetFaucetBech32() string

GetFaucetBech32 returns the faucet address used by the application.

func (*App) GetKeyRing

func (app *App) GetKeyRing() keyring.Keyring

GetKeyRing returns the keyring used by the application.

func (*App) GetPreGeneratedAccounts added in v0.0.10

func (app *App) GetPreGeneratedAccounts() *testkeyring.PreGeneratedAccountIterator

GetPreGeneratedAccounts returns the pre-generated accounts iterater used by the application.

func (*App) GetRingClient

func (app *App) GetRingClient() crypto.RingClient

GetRingClient returns the ring client used by the application.

func (*App) GetSdkCtx

func (app *App) GetSdkCtx() *sdk.Context

GetSdkCtx returns the context used by the application.

func (*App) NextBlock

func (app *App) NextBlock(t *testing.T)

NextBlock commits and finalizes all existing transactions. It then updates and advances the context of the App.

func (*App) NextBlocks

func (app *App) NextBlocks(t *testing.T, numBlocks int)

NextBlocks calls NextBlock numBlocks times

func (*App) QueryHelper

func (app *App) QueryHelper() *baseapp.QueryServiceTestHelper

QueryHelper returns the query helper used by the application that can be used to submit queries to the application.

func (*App) RunMsg

func (app *App) RunMsg(t *testing.T, msg sdk.Msg) (tx.MsgResponse, error)

RunMsg provides the ability to process a message by packing it into a tx and driving the ABCI through block finalization. It returns a tx.MsgResponse (any) which corresponds to the request message. It is a convenience method which wraps RunMsgs.

func (*App) RunMsgs added in v0.0.10

func (app *App) RunMsgs(t *testing.T, msgs ...sdk.Msg) (txMsgResps []tx.MsgResponse, err error)

RunMsgs provides the ability to process messages by packing them into a tx and driving the ABCI through block finalization. It returns a slice of tx.MsgResponse (any) whose elements correspond to the request message of the same index. These responses can be type asserted to the expected response type. If execution for ANY message fails, ALL failing messages' errors are joined and returned. In order to run a message, the application must have a handler for it. These handlers are registered on the application message service router.

type InitChainerModuleFn added in v0.0.10

type InitChainerModuleFn func(cosmostypes.Context, codec.Codec, appmodule.AppModule)

InitChainerModuleFn is a function that is called for each module during the integration App's InitChainer function.

func NewInitChainerModuleGenesisStateOptionFn added in v0.0.10

func NewInitChainerModuleGenesisStateOptionFn[T module.HasGenesis](genesisState cosmostypes.Msg) InitChainerModuleFn

NewInitChainerModuleGenesisStateOptionFn returns an InitChainerModuleFn that initializes the module's genesis state with the given genesisState. T is expected to be the module's AppModule type.

type IntegrationAppConfig added in v0.0.10

type IntegrationAppConfig struct {
	// InitChainerModuleFns are called for each module during the integration App's
	// InitChainer function.
	InitChainerModuleFns []InitChainerModuleFn
	TokenLogicModules    []tlm.TokenLogicModule
}

IntegrationAppConfig is a configuration struct for an integration App. Its fields are intended to be set/updated by IntegrationAppOptionFn functions which are passed during integration App construction.

type IntegrationAppOptionFn added in v0.0.10

type IntegrationAppOptionFn func(*IntegrationAppConfig)

IntegrationAppOptionFn is a function that receives and has the opportunity to modify the IntegrationAppConfig. It is intended to be passed during integration App construction to modify the behavior of the integration App.

func WithInitChainerModuleFn added in v0.0.10

func WithInitChainerModuleFn(fn InitChainerModuleFn) IntegrationAppOptionFn

WithInitChainerModuleFn returns an IntegrationAppOptionFn that appends the given InitChainerModuleFn to the IntegrationAppConfig's InitChainerModuleFns.

func WithModuleGenesisState added in v0.0.10

func WithModuleGenesisState[T module.HasGenesis](genesisState cosmostypes.Msg) IntegrationAppOptionFn

WithModuleGenesisState returns an IntegrationAppOptionFn that appends an InitChainerModuleFn to the IntegrationAppConfig's InitChainerModuleFns which initializes the module's genesis state with the given genesisState. T is expected to be the module's AppModule type.

func WithTokenLogicModules added in v0.0.11

func WithTokenLogicModules(tokenLogicModules []tlm.TokenLogicModule) IntegrationAppOptionFn

WithTokenLogicModules returns an IntegrationAppOptionFn that sets the given TLM processors on the IntegrationAppConfig.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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