cltest

package
v2.7.1-rc0 Latest Latest
Warning

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

Go to latest
Published: Nov 16, 2023 License: MIT Imports: 105 Imported by: 0

Documentation

Overview

Importing cltest should only be for top level black box (X_test package) integration tests, for example testing against the Application object itself. Consider using a smaller scoped package: utils or testutils/* if possible.

Index

Constants

View Source
const (
	// Collection of test fixture DB user emails per role
	APIEmailAdmin    = "apiuser@chainlink.test"
	APIEmailEdit     = "apiuser-edit@chainlink.test"
	APIEmailRun      = "apiuser-run@chainlink.test"
	APIEmailViewOnly = "apiuser-view-only@chainlink.test"
	// Password just a password we use everywhere for testing
	Password = testutils.Password
	// SessionSecret is the hardcoded secret solely used for test
	SessionSecret = "clsession_test_secret"
	// DefaultPeerID is the peer ID of the default p2p key
	DefaultPeerID = "12D3KooWPjceQrSwdWXPyLLeABRXmuqt69Rg3sBYbU1Nft9HyQ6X"
	// DefaultOCRKeyBundleID is the ID of the default ocr key bundle
	DefaultOCRKeyBundleID = "f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5"
	// DefaultOCR2KeyBundleID is the ID of the fixture ocr2 key bundle
	DefaultOCR2KeyBundleID = "92be59c45d0d7b192ef88d391f444ea7c78644f8607f567aab11d53668c27a4d"
	// Private key seed of test keys created with `big.NewInt(1)`, representations of value present in `scrub_logs` script
	KeyBigIntSeed = 1
)
View Source
const (
	// DBPollingInterval can't be too short to avoid DOSing the test database
	DBPollingInterval = 100 * time.Millisecond
	// AssertNoActionTimeout shouldn't be too long, or it will slow down tests
	AssertNoActionTimeout = 3 * time.Second
)
View Source
const (
	UseRealExternalInitiatorManager = "UseRealExternalInitiatorManager"
)

Variables

Functions

func AllExternalInitiators

func AllExternalInitiators(t testing.TB, db *sqlx.DB) []bridges.ExternalInitiator

func AssertCount

func AssertCount(t *testing.T, db *sqlx.DB, tableName string, expected int64)

func AssertCountStays

func AssertCountStays(t testing.TB, db *sqlx.DB, tableName string, want int64)

func AssertError

func AssertError(t testing.TB, want bool, err error)

func AssertEthTxAttemptCountStays

func AssertEthTxAttemptCountStays(t testing.TB, db *sqlx.DB, want int) []int64

AssertEthTxAttemptCountStays asserts that the number of tx attempts remains at the provided value

func AssertPipelineRunsStays

func AssertPipelineRunsStays(t testing.TB, pipelineSpecID int32, db *sqlx.DB, want int) []pipeline.Run

AssertPipelineRunsStays asserts that the number of pipeline runs for a particular job remains at the provided values

func AssertPipelineTaskRunsErrored

func AssertPipelineTaskRunsErrored(t testing.TB, runs []pipeline.TaskRun)

func AssertPipelineTaskRunsSuccessful

func AssertPipelineTaskRunsSuccessful(t testing.TB, runs []pipeline.TaskRun)

func AssertRecordEventually

func AssertRecordEventually(t *testing.T, db *sqlx.DB, model interface{}, stmt string, check func() bool)

func AssertServerResponse

func AssertServerResponse(t testing.TB, resp *http.Response, expectedStatusCode int)

AssertServerResponse is used to match against a client response, will print any errors returned if the request fails.

func AwaitJobActive

func AwaitJobActive(t testing.TB, jobSpawner job.Spawner, jobID int32, waitFor time.Duration)

func BatchElemMatchesParams

func BatchElemMatchesParams(req rpc.BatchElem, arg interface{}, method string) bool

func BatchElemMustMatchParams

func BatchElemMustMatchParams(t *testing.T, req rpc.BatchElem, hash common.Hash, method string)

func CallbackOrTimeout

func CallbackOrTimeout(t testing.TB, msg string, callback func(), durationParams ...time.Duration)

func ClearDBTables

func ClearDBTables(t *testing.T, db *sqlx.DB, tables ...string)

ClearDBTables deletes all rows from the given tables

func CreateExternalInitiatorViaWeb

func CreateExternalInitiatorViaWeb(
	t testing.TB,
	app *TestApplication,
	payload string,
) *webpresenters.ExternalInitiatorAuthentication

CreateExternalInitiatorViaWeb creates a bridgetype via web using /v2/bridge_types

func CreateJobRunViaExternalInitiatorV2

func CreateJobRunViaExternalInitiatorV2(
	t testing.TB,
	app *TestApplication,
	jobID uuid.UUID,
	eia auth.Token,
	body string,
) webpresenters.PipelineRunResource

func CreateJobRunViaUser

func CreateJobRunViaUser(
	t testing.TB,
	app *TestApplication,
	jobID uuid.UUID,
	body string,
) webpresenters.PipelineRunResource

func CreateJobViaWeb

func CreateJobViaWeb(t testing.TB, app *TestApplication, request []byte) job.Job

func CreateJobViaWeb2

func CreateJobViaWeb2(t testing.TB, app *TestApplication, spec string) webpresenters.JobResource

func DecodeSessionCookie

func DecodeSessionCookie(value string) (string, error)

func DeleteJobViaWeb

func DeleteJobViaWeb(t testing.TB, app *TestApplication, jobID int32)

func DynamicFeeTransactionsFromTipCaps

func DynamicFeeTransactionsFromTipCaps(tipCaps ...int64) []evmtypes.Transaction

DynamicFeeTransactionsFromTipCaps returns EIP-1559 transactions with the given TipCaps (FeeCap is arbitrary)

func DynamicFeeTransactionsFromTipCapsTxType

func DynamicFeeTransactionsFromTipCapsTxType(code evmtypes.TxType, tipCaps ...int64) []evmtypes.Transaction

func EmptyCLIContext

func EmptyCLIContext() *cli.Context

func EventuallyExpectationsMet

func EventuallyExpectationsMet(t *testing.T, mock testifyExpectationsAsserter, timeout time.Duration, interval time.Duration)

func EvmTxRequestWithChecker added in v2.3.0

func EvmTxRequestWithChecker(checker txmgr.TransmitCheckerSpec) func(*txmgr.TxRequest)

func EvmTxRequestWithIdempotencyKey added in v2.6.0

func EvmTxRequestWithIdempotencyKey(idempotencyKey string) func(*txmgr.TxRequest)

func EvmTxRequestWithStrategy added in v2.3.0

func EvmTxRequestWithStrategy(strategy txmgrtypes.TxStrategy) func(*txmgr.TxRequest)

func EvmTxRequestWithValue added in v2.3.0

func EvmTxRequestWithValue(value big.Int) func(*txmgr.TxRequest)

func FlagSetApplyFromAction

func FlagSetApplyFromAction(action interface{}, flagSet *flag.FlagSet, parentCommand string)

FlagSetApplyFromAction applies the flags from action to the flagSet. `parentCommand` will filter the app commands and only applies the flags if the command/subcommand has a parent with that name, if left empty no filtering is done

func GetLogs

func GetLogs(t *testing.T, rv interface{}, logs EthereumLogIterator) []interface{}

GetLogs drains logs of EVM log representations. Since those log representations don't fit into a type hierarchy, this API is a bit awkward. It returns the logs as a slice of blank interface{}s, and if rv is non-nil, it must be a pointer to a slice for elements of the same type as the logs, in which case GetLogs will append the logs to it.

func Head(val interface{}) *evmtypes.Head

Head given the value convert it into an Head

func HeadWithHash added in v2.5.0

func HeadWithHash(n int64, hash common.Hash) *evmtypes.Head

func JSONFromBytes

func JSONFromBytes(t testing.TB, body []byte) models.JSON

JSONFromBytes creates JSON from a given byte array

func JSONFromFixture

func JSONFromFixture(t *testing.T, path string) models.JSON

JSONFromFixture create models.JSON from file path

func JSONFromString

func JSONFromString(t testing.TB, body string, args ...interface{}) models.JSON

JSONFromString create JSON from given body and arguments

func LegacyTransactionsFromGasPrices

func LegacyTransactionsFromGasPrices(gasPrices ...int64) []evmtypes.Transaction

LegacyTransactionsFromGasPrices returns transactions matching the given gas prices

func LegacyTransactionsFromGasPricesTxType

func LegacyTransactionsFromGasPricesTxType(code evmtypes.TxType, gasPrices ...int64) []evmtypes.Transaction

func LogFromFixture

func LogFromFixture(t *testing.T, path string) types.Log

LogFromFixture create ethtypes.log from file path

func MakeConfigDigest

func MakeConfigDigest(t *testing.T) ocrtypes.ConfigDigest

func MakeDirectRequestJobSpec

func MakeDirectRequestJobSpec(t *testing.T) *job.Job

func Mine

func Mine(backend *backends.SimulatedBackend, blockTime time.Duration) (stopMining func())

Mine forces the simulated backend to produce a new block every X seconds

func MinimalOCRNonBootstrapSpec

func MinimalOCRNonBootstrapSpec(contractAddress, transmitterAddress ethkey.EIP55Address, peerID p2pkey.PeerID, keyBundleID string) string

func MockApplicationEthCalls

func MockApplicationEthCalls(t *testing.T, app *TestApplication, ethClient *evmclimocks.Client, sub *commonmocks.Subscription)

MockApplicationEthCalls mocks all calls made by the chainlink application as standard when starting and stopping

func MustBytesToConfigDigest

func MustBytesToConfigDigest(t *testing.T, b []byte) ocrtypes.ConfigDigest

func MustCreateBridge

func MustCreateBridge(t testing.TB, db *sqlx.DB, opts BridgeOpts, cfg pg.QConfig) (bta *bridges.BridgeTypeAuthentication, bt *bridges.BridgeType)

MustCreateBridge creates a bridge Be careful not to specify a name here unless you ABSOLUTELY need to This is because name is a unique index and identical names used across transactional tests will lock/deadlock

func MustCreateUnstartedGeneratedTx added in v2.3.0

func MustCreateUnstartedGeneratedTx(t testing.TB, txStore txmgr.EvmTxStore, fromAddress common.Address, chainID *big.Int, opts ...func(*txmgr.TxRequest)) (tx txmgr.Tx)

func MustCreateUnstartedTx added in v2.3.0

func MustCreateUnstartedTx(t testing.TB, txStore txmgr.EvmTxStore, fromAddress common.Address, toAddress common.Address, encodedPayload []byte, gasLimit uint32, value big.Int, chainID *big.Int, opts ...interface{}) (tx txmgr.Tx)

func MustCreateUnstartedTxFromEvmTxRequest added in v2.3.0

func MustCreateUnstartedTxFromEvmTxRequest(t testing.TB, txStore txmgr.EvmTxStore, txRequest txmgr.TxRequest, chainID *big.Int) (tx txmgr.Tx)

func MustGenerateRandomKey

func MustGenerateRandomKey(t testing.TB) ethkey.KeyV2

func MustGenerateRandomKeyState

func MustGenerateRandomKeyState(_ testing.TB) ethkey.State

func MustGenerateSessionCookie

func MustGenerateSessionCookie(t testing.TB, value string) *http.Cookie

func MustGetStateForKey

func MustGetStateForKey(t testing.TB, kst keystore.Eth, key ethkey.KeyV2) ethkey.State

func MustInsertConfirmedEthTxBySaveFetchedReceipts

func MustInsertConfirmedEthTxBySaveFetchedReceipts(t *testing.T, txStore txmgr.TestEvmTxStore, fromAddress common.Address, nonce int64, blockNum int64, chainID big.Int) (etx txmgr.Tx)

func MustInsertConfirmedEthTxWithLegacyAttempt

func MustInsertConfirmedEthTxWithLegacyAttempt(t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, broadcastBeforeBlockNum int64, fromAddress common.Address) txmgr.Tx

func MustInsertConfirmedEthTxWithReceipt

func MustInsertConfirmedEthTxWithReceipt(t *testing.T, txStore txmgr.TestEvmTxStore, fromAddress common.Address, nonce, blockNum int64) (etx txmgr.Tx)

Inserts into evm.receipts but does not update evm.txes or evm.tx_attempts

func MustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt

func MustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt(
	t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, broadcastBeforeBlockNum int64,
	broadcastAt time.Time, fromAddress common.Address) txmgr.Tx

func MustInsertEthReceipt

func MustInsertEthReceipt(t *testing.T, txStore txmgr.TestEvmTxStore, blockNumber int64, blockHash common.Hash, txHash common.Hash) txmgr.Receipt

func MustInsertExternalInitiator

func MustInsertExternalInitiator(t *testing.T, orm bridges.ORM) (ei bridges.ExternalInitiator)

func MustInsertExternalInitiatorWithOpts

func MustInsertExternalInitiatorWithOpts(t *testing.T, orm bridges.ORM, opts ExternalInitiatorOpts) (ei bridges.ExternalInitiator)

func MustInsertFatalErrorEthTx

func MustInsertFatalErrorEthTx(t *testing.T, txStore txmgr.TestEvmTxStore, fromAddress common.Address) txmgr.Tx

func MustInsertHead

func MustInsertHead(t *testing.T, db *sqlx.DB, cfg pg.QConfig, number int64) evmtypes.Head

func MustInsertInProgressEthTxWithAttempt

func MustInsertInProgressEthTxWithAttempt(t *testing.T, txStore txmgr.TestEvmTxStore, nonce evmtypes.Nonce, fromAddress common.Address) txmgr.Tx

func MustInsertKeeperJob

func MustInsertKeeperJob(t *testing.T, db *sqlx.DB, korm keeper.ORM, from ethkey.EIP55Address, contract ethkey.EIP55Address) job.Job

func MustInsertKeeperRegistry

func MustInsertKeeperRegistry(t *testing.T, db *sqlx.DB, korm keeper.ORM, ethKeyStore keystore.Eth, keeperIndex, numKeepers, blockCountPerTurn int32) (keeper.Registry, job.Job)

func MustInsertOffchainreportingOracleSpec

func MustInsertOffchainreportingOracleSpec(t *testing.T, db *sqlx.DB, transmitterAddress ethkey.EIP55Address) job.OCROracleSpec

func MustInsertPipelineRun

func MustInsertPipelineRun(t *testing.T, db *sqlx.DB) (run pipeline.Run)

func MustInsertPipelineRunWithStatus

func MustInsertPipelineRunWithStatus(t *testing.T, db *sqlx.DB, pipelineSpecID int32, status pipeline.RunStatus) (run pipeline.Run)

func MustInsertPipelineSpec

func MustInsertPipelineSpec(t *testing.T, db *sqlx.DB) (spec pipeline.Spec)

func MustInsertRandomKey

func MustInsertRandomKey(t testing.TB, keystore keystore.Eth, chainIDs ...utils.Big) (ethkey.KeyV2, common.Address)

MustInsertRandomKey inserts a randomly generated (not cryptographically secure) key for testing. By default, it is enabled for the fixture chain. Pass chainIDs to override. Use MustInsertRandomKeyNoChains for a key associate with no chains.

func MustInsertRandomKeyNoChains added in v2.7.0

func MustInsertRandomKeyNoChains(t testing.TB, keystore keystore.Eth) (ethkey.KeyV2, common.Address)

func MustInsertRandomKeyReturningState

func MustInsertRandomKeyReturningState(t testing.TB, keystore keystore.Eth) (ethkey.State, common.Address)

func MustInsertRevertedEthReceipt

func MustInsertRevertedEthReceipt(t *testing.T, txStore txmgr.TestEvmTxStore, blockNumber int64, blockHash common.Hash, txHash common.Hash) txmgr.Receipt

func MustInsertUnconfirmedEthTx

func MustInsertUnconfirmedEthTx(t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, fromAddress common.Address, opts ...interface{}) txmgr.Tx

func MustInsertUnconfirmedEthTxWithAttemptState

func MustInsertUnconfirmedEthTxWithAttemptState(t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, fromAddress common.Address, txAttemptState txmgrtypes.TxAttemptState, opts ...interface{}) txmgr.Tx

func MustInsertUnconfirmedEthTxWithBroadcastDynamicFeeAttempt

func MustInsertUnconfirmedEthTxWithBroadcastDynamicFeeAttempt(t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, fromAddress common.Address, opts ...interface{}) txmgr.Tx

func MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt

func MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, fromAddress common.Address, opts ...interface{}) txmgr.Tx

func MustInsertUnconfirmedEthTxWithInsufficientEthAttempt

func MustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t *testing.T, txStore txmgr.TestEvmTxStore, nonce int64, fromAddress common.Address) txmgr.Tx

func MustInsertUnfinishedPipelineTaskRun

func MustInsertUnfinishedPipelineTaskRun(t *testing.T, db *sqlx.DB, pipelineRunID int64) (tr pipeline.TaskRun)

func MustInsertUpkeepForRegistry

func MustInsertUpkeepForRegistry(t *testing.T, db *sqlx.DB, cfg pg.QConfig, registry keeper.Registry) keeper.UpkeepRegistration

func MustInsertV2JobSpec

func MustInsertV2JobSpec(t *testing.T, db *sqlx.DB, transmitterAddress common.Address) job.Job

func MustInsertWebhookSpec

func MustInsertWebhookSpec(t *testing.T, db *sqlx.DB) (job.Job, job.WebhookSpec)

func MustJSONMarshal

func MustJSONMarshal(t *testing.T, val interface{}) string

func MustParseDuration

func MustParseDuration(t testing.TB, durationStr string) time.Duration

func MustParseURL

func MustParseURL(t testing.TB, input string) *url.URL

func MustRandomBytes

func MustRandomBytes(t *testing.T, l int) (b []byte)

func MustRandomP2PPeerID

func MustRandomP2PPeerID(t *testing.T) p2ppeer.ID

func MustRandomUser

func MustRandomUser(t testing.TB) sessions.User

MustRandomUser inserts a new admin user with a random email into the test DB

func MustReadFile

func MustReadFile(t testing.TB, file string) []byte

MustReadFile loads a file but should never fail

func MustSendingKeyStates

func MustSendingKeyStates(t *testing.T, ethKeyStore keystore.Eth, chainID *big.Int) []ethkey.State

func MustWebURL

func MustWebURL(t *testing.T, s string) *models.WebURL

func NewBridgeType

NewBridgeType create new bridge type given info slice

func NewContractMockReceiver

func NewContractMockReceiver(t *testing.T, ethMock *evmclimocks.Client, abi abi.ABI, address common.Address) contractMockReceiver

func NewDynamicFeeEthTxAttempt

func NewDynamicFeeEthTxAttempt(t *testing.T, etxID int64) txmgr.TxAttempt

func NewEIP55Address

func NewEIP55Address() ethkey.EIP55Address

func NewEthMocks

func NewEthMocks(t testing.TB) *evmclimocks.Client

func NewEthMocksWithDefaultChain

func NewEthMocksWithDefaultChain(t testing.TB) (c *evmclimocks.Client)

func NewEthMocksWithStartupAssertions

func NewEthMocksWithStartupAssertions(t testing.TB) *evmclimocks.Client

func NewEthMocksWithTransactionsOnBlocksAssertions

func NewEthMocksWithTransactionsOnBlocksAssertions(t testing.TB) *evmclimocks.Client

NewEthMocksWithTransactionsOnBlocksAssertions sets an Eth mock with transactions on blocks

func NewEthReceipt

func NewEthReceipt(t *testing.T, blockNumber int64, blockHash common.Hash, txHash common.Hash, status uint64) txmgr.Receipt

func NewEthTx

func NewEthTx(t *testing.T, fromAddress common.Address) txmgr.Tx

func NewEventBroadcaster

func NewEventBroadcaster(t testing.TB, dbURL url.URL) pg.EventBroadcaster

func NewHTTPMockServer

func NewHTTPMockServer(
	t *testing.T,
	status int,
	wantMethod string,
	response string,
	callback ...func(http.Header, string),
) *httptest.Server

NewHTTPMockServer create http test server with passed in parameters

func NewHTTPMockServerWithAlterableResponse

func NewHTTPMockServerWithAlterableResponse(
	t *testing.T, response func() string) (server *httptest.Server)

func NewHTTPMockServerWithAlterableResponseAndRequest

func NewHTTPMockServerWithAlterableResponseAndRequest(t *testing.T, response func() string, callback func(r *http.Request)) (server *httptest.Server)

func NewHTTPMockServerWithRequest

func NewHTTPMockServerWithRequest(
	t *testing.T,
	status int,
	response string,
	callback func(r *http.Request),
) *httptest.Server

NewHTTPMockServerWithRequest creates http test server that makes the request available in the callback

func NewKeyStore

func NewKeyStore(t testing.TB, db *sqlx.DB, cfg pg.QConfig) keystore.Master

NewKeyStore returns a new, unlocked keystore

func NewLegacyChainsWithChain added in v2.5.0

func NewLegacyChainsWithChain(ch evm.Chain, cfg evm.AppConfig) evm.LegacyChainContainer

func NewLegacyChainsWithMockChain added in v2.5.0

func NewLegacyChainsWithMockChain(t testing.TB, ethClient evmclient.Client, cfg evm.AppConfig) evm.LegacyChainContainer

func NewLegacyEthTxAttempt

func NewLegacyEthTxAttempt(t *testing.T, etxID int64) txmgr.TxAttempt

func NewMockAuthenticatedHTTPClient

func NewMockAuthenticatedHTTPClient(lggr logger.Logger, cfg cmd.ClientOpts, sessionID string) cmd.HTTPClient

func NewPeerID

func NewPeerID() p2ppeer.ID

func NewRandomPositiveInt64

func NewRandomPositiveInt64() int64

func NewSession

func NewSession(optionalSessionID ...string) clsessions.Session

func NewSimulatedBackend

func NewSimulatedBackend(t *testing.T, alloc core.GenesisAlloc, gasLimit uint32) *backends.SimulatedBackend

func NewTestChainScopedConfig

func NewTestChainScopedConfig(t testing.TB) evmconfig.ChainScopedConfig

func NewTestTxStore added in v2.3.0

func NewTestTxStore(t *testing.T, db *sqlx.DB, cfg pg.QConfig) txmgr.TestEvmTxStore

func NewTxStore added in v2.1.0

func NewTxStore(t *testing.T, db *sqlx.DB, cfg pg.QConfig) txmgr.EvmTxStore

func NewUserWithSession added in v2.7.0

func NewUserWithSession(t testing.TB, orm sessions.ORM) sessions.User

func NewWSServer

func NewWSServer(t *testing.T, chainID *big.Int, callback testutils.JSONRPCHandler) string

NewWSServer starts a websocket server which invokes callback for each message received. If chainID is set, then eth_chainId calls will be automatically handled.

func ParseJSON

func ParseJSON(t testing.TB, body io.Reader) models.JSON

func ParseJSONAPIErrors

func ParseJSONAPIErrors(t testing.TB, body io.Reader) *models.JSONAPIErrors

func ParseJSONAPIResponse

func ParseJSONAPIResponse(t testing.TB, resp *http.Response, resource interface{}) error

ParseJSONAPIResponse parses the response and returns the JSONAPI resource.

func ParseJSONAPIResponseMeta

func ParseJSONAPIResponseMeta(input []byte) (map[string]*json.RawMessage, error)

ParseJSONAPIResponseMeta parses the bytes of the root document and returns a map of *json.RawMessage's within the 'meta' key.

func ParseJSONAPIResponseMetaCount

func ParseJSONAPIResponseMetaCount(input []byte) (int, error)

ParseJSONAPIResponseMetaCount parses the bytes of the root document and returns the value of the 'count' key from the 'meta' section.

func ParseResponseBody

func ParseResponseBody(t testing.TB, resp *http.Response) []byte

ParseResponseBody will parse the given response into a byte slice

func RandomLog

func RandomLog(t *testing.T) types.Log

func RawNewRoundLog

func RawNewRoundLog(t *testing.T, contractAddr common.Address, blockHash common.Hash, blockNumber uint64, logIndex uint, removed bool) types.Log

func RawNewRoundLogWithTopics

func RawNewRoundLogWithTopics(t *testing.T, contractAddr common.Address, blockHash common.Hash, blockNumber uint64, logIndex uint, removed bool, topics []common.Hash) types.Log

func RequireTxSuccessful

func RequireTxSuccessful(t testing.TB, client TransactionReceipter, txHash common.Hash) *types.Receipt

func SimulateIncomingHeads

func SimulateIncomingHeads(t *testing.T, heads []*evmtypes.Head, headTrackables ...httypes.HeadTrackable) (done chan struct{})

SimulateIncomingHeads spawns a goroutine which sends a stream of heads and closes the returned channel when finished.

func TxReceiptFromFixture

func TxReceiptFromFixture(t *testing.T, path string) *types.Receipt

TxReceiptFromFixture create ethtypes.log from file path

func UnauthenticatedGet

func UnauthenticatedGet(t testing.TB, url string, headers map[string]string) (*http.Response, func())

func UnauthenticatedPost

func UnauthenticatedPost(t testing.TB, url string, body io.Reader, headers map[string]string) (*http.Response, func())

func WaitForCount

func WaitForCount(t *testing.T, db *sqlx.DB, tableName string, want int64)

func WaitForPipeline

func WaitForPipeline(t testing.TB, nodeID int, jobID int32, expectedPipelineRuns int, expectedTaskRuns int, jo job.ORM, timeout, poll time.Duration, state pipeline.RunStatus) []pipeline.Run

func WaitForPipelineComplete

func WaitForPipelineComplete(t testing.TB, nodeID int, jobID int32, expectedPipelineRuns int, expectedTaskRuns int, jo job.ORM, timeout, poll time.Duration) []pipeline.Run

func WaitForPipelineError

func WaitForPipelineError(t testing.TB, nodeID int, jobID int32, expectedPipelineRuns int, expectedTaskRuns int, jo job.ORM, timeout, poll time.Duration) []pipeline.Run

func WaitForSpecErrorV2

func WaitForSpecErrorV2(t *testing.T, db *sqlx.DB, jobID int32, count int) []job.SpecError

WaitForSpecErrorV2 polls until the passed in jobID has count number of job spec errors.

func WebURL

func WebURL(t testing.TB, unparsed string) models.WebURL

WebURL parses a url into a models.WebURL

func WithDefaults added in v2.3.0

func WithDefaults() func(*txmgr.TxRequest)

Types

type Awaiter

type Awaiter chan struct{}

func NewAwaiter

func NewAwaiter() Awaiter

func (Awaiter) AssertHappened

func (a Awaiter) AssertHappened(t *testing.T, expected bool)

func (Awaiter) AwaitOrFail

func (a Awaiter) AwaitOrFail(t testing.TB, durationParams ...time.Duration)

func (Awaiter) ItHappened

func (a Awaiter) ItHappened()

type BlockedRunner

type BlockedRunner struct {
	Done chan struct{}
}

BlockedRunner is a Runner that blocks until its channel is posted to

func (BlockedRunner) Run

Run runs the blocked runner, doesn't return until the channel is signalled

type Blocks

type Blocks struct {
	Hashes []common.Hash

	Heads map[int64]*evmtypes.Head
	// contains filtered or unexported fields
}

Blocks - a helper logic to construct a range of linked heads and an ability to fork and create logs from them

func NewBlocks

func NewBlocks(t *testing.T, numHashes int) *Blocks

func (*Blocks) ForkAt

func (b *Blocks) ForkAt(t *testing.T, blockNum int64, numHashes int) *Blocks

func (*Blocks) HashesMap

func (b *Blocks) HashesMap() map[int64]common.Hash

func (*Blocks) Head

func (b *Blocks) Head(number uint64) *evmtypes.Head

func (*Blocks) LogOnBlockNum

func (b *Blocks) LogOnBlockNum(i uint64, addr common.Address) types.Log

func (*Blocks) LogOnBlockNumRemoved

func (b *Blocks) LogOnBlockNumRemoved(i uint64, addr common.Address) types.Log

func (*Blocks) LogOnBlockNumWithIndex

func (b *Blocks) LogOnBlockNumWithIndex(i uint64, logIndex uint, addr common.Address) types.Log

func (*Blocks) LogOnBlockNumWithIndexRemoved

func (b *Blocks) LogOnBlockNumWithIndexRemoved(i uint64, logIndex uint, addr common.Address) types.Log

func (*Blocks) LogOnBlockNumWithTopics

func (b *Blocks) LogOnBlockNumWithTopics(i uint64, logIndex uint, addr common.Address, topics []common.Hash) types.Log

func (*Blocks) NewHead

func (b *Blocks) NewHead(number uint64) *evmtypes.Head

func (*Blocks) Slice added in v2.7.0

func (b *Blocks) Slice(i, j int) []*evmtypes.Head

Slice returns a slice of heads from number i to j. Set j < 0 for all remaining.

type BridgeOpts

type BridgeOpts struct {
	Name string
	URL  string
}

type EmptyRunner

type EmptyRunner struct{}

EmptyRunner is an EmptyRunner

func (EmptyRunner) Run

Run runs the empty runner

type EthereumLogIterator

type EthereumLogIterator interface{ Next() bool }

EthereumLogIterator is the interface provided by gethwrapper representations of EVM logs.

type EventWebSocketServer

type EventWebSocketServer struct {
	*httptest.Server

	Connected      chan struct{}
	Disconnected   chan struct{}
	ReceivedText   chan string
	ReceivedBinary chan []byte
	URL            *url.URL
	// contains filtered or unexported fields
}

EventWebSocketServer is a web socket server designed specifically for testing

func NewEventWebSocketServer

func NewEventWebSocketServer(t *testing.T) (*EventWebSocketServer, func())

NewEventWebSocketServer returns a new EventWebSocketServer

func (*EventWebSocketServer) Broadcast

func (wss *EventWebSocketServer) Broadcast(message string) error

Broadcast sends a message to every web socket client connected to the EventWebSocketServer

func (EventWebSocketServer) ConnectionsCount

func (wss EventWebSocketServer) ConnectionsCount() int

func (*EventWebSocketServer) WriteCloseMessage

func (wss *EventWebSocketServer) WriteCloseMessage()

WriteCloseMessage tells connected clients to disconnect. Useful to emulate that the websocket server is shutting down without actually shutting down. This overcomes httptest.Server's inability to restart on the same URL:port.

type ExternalInitiatorOpts

type ExternalInitiatorOpts struct {
	NamePrefix     string
	URL            *models.WebURL
	OutgoingSecret string
	OutgoingToken  string
}

type HTTPClientCleaner

type HTTPClientCleaner struct {
	HTTPClient cmd.HTTPClient
	// contains filtered or unexported fields
}

func (*HTTPClientCleaner) Delete

func (r *HTTPClientCleaner) Delete(path string) (*http.Response, func())

func (*HTTPClientCleaner) Get

func (r *HTTPClientCleaner) Get(path string, headers ...map[string]string) (*http.Response, func())

func (*HTTPClientCleaner) Patch

func (r *HTTPClientCleaner) Patch(path string, body io.Reader, headers ...map[string]string) (*http.Response, func())

func (*HTTPClientCleaner) Post

func (r *HTTPClientCleaner) Post(path string, body io.Reader) (*http.Response, func())

func (*HTTPClientCleaner) Put

func (r *HTTPClientCleaner) Put(path string, body io.Reader) (*http.Response, func())

type HeadBuffer

type HeadBuffer struct {
	Heads []*evmtypes.Head
	// contains filtered or unexported fields
}

HeadBuffer - stores heads in sequence, with increasing timestamps

func NewHeadBuffer

func NewHeadBuffer(t *testing.T) *HeadBuffer

func (*HeadBuffer) Append

func (hb *HeadBuffer) Append(head *evmtypes.Head)

type HeadTrackableFunc

type HeadTrackableFunc func(context.Context, *evmtypes.Head)

func (HeadTrackableFunc) OnNewLongestChain

func (fn HeadTrackableFunc) OnNewLongestChain(ctx context.Context, head *evmtypes.Head)

type InstanceAppFactory

type InstanceAppFactory struct {
	App chainlink.Application
}

InstanceAppFactory is an InstanceAppFactory

func (InstanceAppFactory) NewApplication

NewApplication creates a new application with specified config

type JobPipelineConfig added in v2.2.0

type JobPipelineConfig interface {
	pipeline.Config
	MaxSuccessfulRuns() uint64
}

type JobPipelineV2TestHelper

type JobPipelineV2TestHelper struct {
	Prm pipeline.ORM
	Jrm job.ORM
	Pr  pipeline.Runner
}

func NewJobPipelineV2

func NewJobPipelineV2(t testing.TB, cfg pipeline.BridgeConfig, jpcfg JobPipelineConfig, dbCfg pg.QConfig, legacyChains evm.LegacyChainContainer, db *sqlx.DB, keyStore keystore.Master, restrictedHTTPClient, unrestrictedHTTPClient *http.Client) JobPipelineV2TestHelper

type MockAPIInitializer

type MockAPIInitializer struct {
	Count int
	// contains filtered or unexported fields
}

func NewMockAPIInitializer

func NewMockAPIInitializer(t testing.TB) *MockAPIInitializer

func (*MockAPIInitializer) Initialize

func (m *MockAPIInitializer) Initialize(orm sessions.ORM, lggr logger.Logger) (sessions.User, error)

type MockChangePasswordPrompter

type MockChangePasswordPrompter struct {
	web.UpdatePasswordRequest
	// contains filtered or unexported fields
}

func (MockChangePasswordPrompter) Prompt

type MockCookieAuthenticator

type MockCookieAuthenticator struct {
	SessionID string
	Error     error
	// contains filtered or unexported fields
}

func (MockCookieAuthenticator) Authenticate

func (MockCookieAuthenticator) Cookie

func (m MockCookieAuthenticator) Cookie() (*http.Cookie, error)

func (MockCookieAuthenticator) Logout

func (m MockCookieAuthenticator) Logout() error

type MockCountingPrompter

type MockCountingPrompter struct {
	T              *testing.T
	EnteredStrings []string
	Count          int
	NotTerminal    bool
}

MockCountingPrompter is a mock counting prompt

func (*MockCountingPrompter) IsTerminal

func (p *MockCountingPrompter) IsTerminal() bool

IsTerminal always returns true in tests

func (*MockCountingPrompter) PasswordPrompt

func (p *MockCountingPrompter) PasswordPrompt(string) string

PasswordPrompt returns an entered string

func (*MockCountingPrompter) Prompt

func (p *MockCountingPrompter) Prompt(string) string

Prompt returns an entered string

type MockCron

type MockCron struct {
	Entries []MockCronEntry
	// contains filtered or unexported fields
}

MockCron represents a mock cron

func (*MockCron) AddFunc

func (mc *MockCron) AddFunc(schd string, fn func()) (cron.EntryID, error)

AddFunc appends a schedule to mockcron entries

func (*MockCron) RunEntries

func (mc *MockCron) RunEntries()

RunEntries run every function for each mockcron entry

func (*MockCron) Start

func (*MockCron) Start()

Start starts the mockcron

func (*MockCron) Stop

func (*MockCron) Stop() context.Context

Stop stops the mockcron

type MockCronEntry

type MockCronEntry struct {
	Schedule string
	Function func()
}

MockCronEntry a cron schedule and function

type MockHeadTrackable

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

MockHeadTrackable allows you to mock HeadTrackable

func (*MockHeadTrackable) OnNewLongestChain

func (m *MockHeadTrackable) OnNewLongestChain(context.Context, *evmtypes.Head)

OnNewLongestChain increases the OnNewLongestChainCount count by one

func (*MockHeadTrackable) OnNewLongestChainCount

func (m *MockHeadTrackable) OnNewLongestChainCount() int32

OnNewLongestChainCount returns the count of new heads, safely.

type MockPasswordPrompter

type MockPasswordPrompter struct {
	Password string
}

func (MockPasswordPrompter) Prompt

func (m MockPasswordPrompter) Prompt() string

type MockSecretGenerator

type MockSecretGenerator struct{}

func (MockSecretGenerator) Generate

func (m MockSecretGenerator) Generate(string) ([]byte, error)

type MockSessionRequestBuilder

type MockSessionRequestBuilder struct {
	Count int
	Error error
}

func (*MockSessionRequestBuilder) Build

type MockSubscription

type MockSubscription struct {
	Errors chan error
	// contains filtered or unexported fields
}

MockSubscription a mock subscription

func EmptyMockSubscription

func EmptyMockSubscription(t testing.TB) *MockSubscription

EmptyMockSubscription return empty MockSubscription

func (*MockSubscription) Err

func (mes *MockSubscription) Err() <-chan error

Err returns error channel from mes

func (*MockSubscription) Unsubscribe

func (mes *MockSubscription) Unsubscribe()

Unsubscribe closes the subscription

type NeverSleeper

type NeverSleeper struct{}

NeverSleeper is a struct that never sleeps

func (NeverSleeper) After

func (ns NeverSleeper) After() time.Duration

After returns a duration

func (NeverSleeper) Duration

func (ns NeverSleeper) Duration() time.Duration

Duration returns a duration

func (NeverSleeper) Reset

func (ns NeverSleeper) Reset()

Reset resets the never sleeper

func (NeverSleeper) Sleep

func (ns NeverSleeper) Sleep()

Sleep puts the never sleeper to sleep

type RandomKey added in v2.7.0

type RandomKey struct {
	Nonce    int64
	Disabled bool
	// contains filtered or unexported fields
}

func (RandomKey) MustInsert added in v2.7.0

func (r RandomKey) MustInsert(t testing.TB, keystore keystore.Eth) (ethkey.KeyV2, common.Address)

func (RandomKey) MustInsertWithState added in v2.7.0

func (r RandomKey) MustInsertWithState(t testing.TB, keystore keystore.Eth) (ethkey.State, common.Address)

type RendererMock

type RendererMock struct {
	Renders []interface{}
}

RendererMock a mock renderer

func (*RendererMock) Render

func (rm *RendererMock) Render(v interface{}, headers ...string) error

Render appends values to renderer mock

type TestApplication

type TestApplication struct {
	*chainlink.ChainlinkApplication
	Logger  logger.Logger
	Server  *httptest.Server
	Started bool
	Backend *backends.SimulatedBackend
	Keys    []ethkey.KeyV2
	// contains filtered or unexported fields
}

TestApplication holds the test application and test servers

func NewApplication

func NewApplication(t testing.TB, flagsAndDeps ...interface{}) *TestApplication

NewApplication creates a New TestApplication along with a NewConfig It mocks the keystore with no keys or accounts by default

func NewApplicationEVMDisabled

func NewApplicationEVMDisabled(t *testing.T) *TestApplication

NewApplicationEVMDisabled creates a new application with default config but EVM disabled Useful for testing controllers

func NewApplicationWithConfig

func NewApplicationWithConfig(t testing.TB, cfg chainlink.GeneralConfig, flagsAndDeps ...interface{}) *TestApplication

NewApplicationWithConfig creates a New TestApplication with specified test config. This should only be used in full integration tests. For controller tests, see NewApplicationEVMDisabled.

func NewApplicationWithConfigAndKey

func NewApplicationWithConfigAndKey(t testing.TB, c chainlink.GeneralConfig, flagsAndDeps ...interface{}) *TestApplication

NewApplicationWithConfigAndKey creates a new TestApplication with the given testorm it will also provide an unlocked account on the keystore

func NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain

func NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(
	t testing.TB,
	cfg chainlink.GeneralConfig,
	backend *backends.SimulatedBackend,
	flagsAndDeps ...interface{},
) *TestApplication

NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain is like NewApplicationWithConfigAndKeyOnSimulatedBlockchain but cfg should be v2, and configtest.NewGeneralConfigSimulated used to include the simulated chain (testutils.SimulatedChainID).

func NewApplicationWithConfigV2OnSimulatedBlockchain

func NewApplicationWithConfigV2OnSimulatedBlockchain(
	t testing.TB,
	cfg chainlink.GeneralConfig,
	backend *backends.SimulatedBackend,
	flagsAndDeps ...interface{},
) *TestApplication

func NewApplicationWithKey

func NewApplicationWithKey(t *testing.T, flagsAndDeps ...interface{}) *TestApplication

NewApplicationWithKey creates a new TestApplication along with a new config It uses the native keystore and will load any keys that are in the database

func (*TestApplication) Import

func (ta *TestApplication) Import(content string)

ImportKey adds private key to the application keystore and database

func (*TestApplication) MustSeedNewSession

func (ta *TestApplication) MustSeedNewSession(email string) (id string)

func (*TestApplication) NewAuthenticatingShell added in v2.3.0

func (ta *TestApplication) NewAuthenticatingShell(prompter cmd.Prompter) *cmd.Shell

func (*TestApplication) NewClientOpts

func (ta *TestApplication) NewClientOpts() cmd.ClientOpts

func (*TestApplication) NewHTTPClient

func (ta *TestApplication) NewHTTPClient(user *User) HTTPClientCleaner

func (*TestApplication) NewShellAndRenderer added in v2.3.0

func (ta *TestApplication) NewShellAndRenderer() (*cmd.Shell, *RendererMock)

NewShellAndRenderer creates a new cmd.Shell for the test application

func (*TestApplication) Start

func (ta *TestApplication) Start(ctx context.Context) error

Start starts the chainlink app and registers Stop to clean up at end of test.

func (*TestApplication) Stop

func (ta *TestApplication) Stop() error

Stop will stop the test application and perform cleanup

type TransactionReceipter

type TransactionReceipter interface {
	TransactionReceipt(context.Context, common.Hash) (*types.Receipt, error)
}

type User added in v2.6.0

type User struct {
	Email string
	Role  clsessions.UserRole
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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