Skip to content

Commit

Permalink
feat: added framework for remote chan tests and TC for token transfer…
Browse files Browse the repository at this point in the history
… … (#832)

* add: added framework for remote chan tests and TC for token transfer to-and-from ibc-centauri

* fix: added test wallets and configs for e2e

* fix: added test cases to cover stake transfer from centauri to icon

* fix: increased timeouts and add sha256sum of latest light client wasm

* added test keys for relayer for deevnet

* feat: added testcase for icon-archway and back via centauri hopchain

* chore: refactorings and adjust timeouts

* chore: added sample config

* chore: added sample config file to run in devnet with configured connection

* chore: removed extra logging

* chore: added codes in makefile to run hopchain tests

* chore: made receivers configurable and updated docs

* chore: updated docs for old xcall tests and new ones

* fix: fixed case of wallet of chain

* fix: fixed case of gh actions issue

* fix: remove old test

* fix: fixed PR comments

---------

Co-authored-by: ibrizsabin <[email protected]>
Co-authored-by: ibrizsabin <[email protected]>
  • Loading branch information
3 people authored Jul 15, 2024
1 parent 19e3f02 commit e76b4b4
Show file tree
Hide file tree
Showing 70 changed files with 4,529 additions and 127 deletions.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ e2e:
@echo "Running e2e tests..."
go test -v ./test/e2e -testify.m TestE2E_all

e2e-hopchain:
@echo "Running hopchain e2e tests..."
go test -v ./test/e2e-hopchain -testify.m TestE2E_hopchain

e2e-demo-setup:
@echo "Configuring e2e demo..."
export PRESERVE_DOCKER=true && \
Expand Down
1 change: 0 additions & 1 deletion contracts/cosmwasm-vm/cw-icon-light-client/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,6 @@ mod tests {
let mut contract = CwContext::new(deps.as_mut(), mock_env());

contract.insert_config(&config).unwrap();

contract
.ensure_ibc_host(&Addr::unchecked("regular_host"))
.unwrap()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,4 +235,4 @@ impl<C: IContext> ILightClient for IconClient<C> {

Ok(())
}
}
}
20 changes: 16 additions & 4 deletions docs/e2e-integration-test-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ To run the demo, the following software needs to be installed.
```bash
git clone https://github.com/archway-network/archway/
cd archway
docker build -f Dockerfile.deprecated -t archway . --build-arg arch=aarch64
git checkout v0.5.1
docker build -f Dockerfile.deprecated -t archwaynetwork/archwayd:v0.5.1 . --build-arg arch=aarch64
cd ..
```

Expand Down Expand Up @@ -132,7 +133,18 @@ go test -v ./test/e2e -timeout 0
go test -v ./test/integration -timeout 0
```

#### 3. Set Up the Demo Test Environment (Optional)
#### 5. Set Up the Hpchain Test Environment (Optional)
- To execute the end-to-end hopchain tests:
```bash
export TEST_CONFIG_PATH=/home/User/IBC-integration/test/testsuite/sample-config-ics20.yaml;
make e2e-hopchain
```
ℹ️ The hopchain tests expects remote chain deployments with respective keys for each chain in the expected folders and synced with remote chains. To use existing relay config, the config should be placed at /home/User/IBC-integration/test/relayer/data/config/config.yaml and the parameters **ics20_app** should be populated with ics20_app deployed address and the flag **use_existing_config** should be true. To create new connection and channels, the param should be set to false and ics20_app value should be empty. The test case assumes following receiver address to be specified in config which might reqiure some funds to be available.

Necessary configured keys should exist at appropriate location for chain/relayer at /home/User/IBC-integration/test/chains/{chain_name}/data and test/relayer/data/keys/{chain_id}


#### 5. Set Up the Demo Test Environment (Optional)

If necessary, establish the e2e demo test environment by executing the following command:

Expand All @@ -142,10 +154,10 @@ make e2e-demo-setup

During the setup process, distinct configuration files are generated in the `test/e2e-demo/ibc-config` directory. These files include contract addresses, along with wallets containing mnemonic/private keys. These keys are essential for conducting subsequent tests.

#### 4. Clean Up the Demo Test Environment (Optional)
#### 6. Clean Up the Demo Test Environment (Optional)

Upon completion of the testing process, if you've set up the e2e demo environment, you can execute the following command to perform a cleanup:

```bash
make e2e-demo-clean
```
```
8 changes: 8 additions & 0 deletions scripts/execute-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ e2e_test() {
go test -v ./test/e2e -timeout 0 -count=1
}

e2e_hopchain() {
echo "Running e2e hopchain test..."
go test -v ./test/e2e-hopchain -timeout 0 -count=1
}

e2e_demo() {
echo "Configuring e2e demo..."
export PRESERVE_DOCKER=true && go test -v ./test/e2e-demo -testify.m TestSetup
Expand Down Expand Up @@ -117,6 +122,9 @@ case "$test" in
"e2e")
e2e_test
;;
"e2e-hopchain")
e2e_hopchain
;;
"e2e-demo")
e2e_demo
;;
Expand Down
263 changes: 263 additions & 0 deletions test/chains/archway/data/config/app.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml

###############################################################################
### Base Configuration ###
###############################################################################

# The minimum gas prices a validator is willing to accept for processing a
# transaction. A transaction's fees must meet the minimum of any denomination
# specified in this config (e.g. 0.25token1,0.0001token2).
minimum-gas-prices = ""

# default: the last 362880 states are kept, pruning at 10 block intervals
# nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node)
# everything: 2 latest states will be kept; pruning at 10 block intervals.
# custom: allow pruning options to be manually specified through 'pruning-keep-recent', and 'pruning-interval'
pruning = "default"

# These are applied if and only if the pruning strategy is custom.
pruning-keep-recent = "0"
pruning-interval = "0"

# HaltHeight contains a non-zero block height at which a node will gracefully
# halt and shutdown that can be used to assist upgrades and testing.
#
# Note: Commitment of state will be attempted on the corresponding block.
halt-height = 0

# HaltTime contains a non-zero minimum block time (in Unix seconds) at which
# a node will gracefully halt and shutdown that can be used to assist upgrades
# and testing.
#
# Note: Commitment of state will be attempted on the corresponding block.
halt-time = 0

# MinRetainBlocks defines the minimum block height offset from the current
# block being committed, such that all blocks past this offset are pruned
# from Tendermint. It is used as part of the process of determining the
# ResponseCommit.RetainHeight value during ABCI Commit. A value of 0 indicates
# that no blocks should be pruned.
#
# This configuration value is only responsible for pruning Tendermint blocks.
# It has no bearing on application state pruning which is determined by the
# "pruning-*" configurations.
#
# Note: Tendermint block pruning is dependant on this parameter in conunction
# with the unbonding (safety threshold) period, state pruning and state sync
# snapshot parameters to determine the correct minimum value of
# ResponseCommit.RetainHeight.
min-retain-blocks = 0

# InterBlockCache enables inter-block caching.
inter-block-cache = true

# IndexEvents defines the set of events in the form {eventType}.{attributeKey},
# which informs Tendermint what to index. If empty, all events will be indexed.
#
# Example:
# ["message.sender", "message.recipient"]
index-events = []

# IavlCacheSize set the size of the iavl tree cache (in number of nodes).
iavl-cache-size = 781250

# IAVLDisableFastNode enables or disables the fast node feature of IAVL.
# Default is false.
iavl-disable-fastnode = false

# IAVLLazyLoading enable/disable the lazy loading of iavl store.
# Default is false.
iavl-lazy-loading = false

# AppDBBackend defines the database backend type to use for the application and snapshots DBs.
# An empty string indicates that a fallback will be used.
# The fallback is the db_backend value set in Tendermint's config.toml.
app-db-backend = ""

###############################################################################
### Telemetry Configuration ###
###############################################################################

[telemetry]

# Prefixed with keys to separate services.
service-name = ""

# Enabled enables the application telemetry functionality. When enabled,
# an in-memory sink is also enabled by default. Operators may also enabled
# other sinks such as Prometheus.
enabled = false

# Enable prefixing gauge values with hostname.
enable-hostname = false

# Enable adding hostname to labels.
enable-hostname-label = false

# Enable adding service to labels.
enable-service-label = false

# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink.
prometheus-retention-time = 0

# GlobalLabels defines a global set of name/value label tuples applied to all
# metrics emitted using the wrapper functions defined in telemetry package.
#
# Example:
# [["chain_id", "cosmoshub-1"]]
global-labels = [
]

###############################################################################
### API Configuration ###
###############################################################################

[api]

# Enable defines if the API server should be enabled.
enable = false

# Swagger defines if swagger documentation should automatically be registered.
swagger = false

# Address defines the API server to listen on.
address = "tcp://localhost:1317"

# MaxOpenConnections defines the number of maximum open connections.
max-open-connections = 1000

# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds).
rpc-read-timeout = 10

# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds).
rpc-write-timeout = 0

# RPCMaxBodyBytes defines the Tendermint maximum request body (in bytes).
rpc-max-body-bytes = 1000000

# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
enabled-unsafe-cors = false

###############################################################################
### Rosetta Configuration ###
###############################################################################

[rosetta]

# Enable defines if the Rosetta API server should be enabled.
enable = false

# Address defines the Rosetta API server to listen on.
address = ":8080"

# Network defines the name of the blockchain that will be returned by Rosetta.
blockchain = "app"

# Network defines the name of the network that will be returned by Rosetta.
network = "network"

# Retries defines the number of retries when connecting to the node before failing.
retries = 3

# Offline defines if Rosetta server should run in offline mode.
offline = false

# EnableDefaultSuggestedFee defines if the server should suggest fee by default.
# If 'construction/medata' is called without gas limit and gas price,
# suggested fee based on gas-to-suggest and denom-to-suggest will be given.
enable-fee-suggestion = false

# GasToSuggest defines gas limit when calculating the fee
gas-to-suggest = 200000

# DenomToSuggest defines the defult denom for fee suggestion.
# Price must be in minimum-gas-prices.
denom-to-suggest = "uatom"

###############################################################################
### gRPC Configuration ###
###############################################################################

[grpc]

# Enable defines if the gRPC server should be enabled.
enable = true

# Address defines the gRPC server address to bind to.
address = "localhost:9090"

# MaxRecvMsgSize defines the max message size in bytes the server can receive.
# The default value is 10MB.
max-recv-msg-size = "10485760"

# MaxSendMsgSize defines the max message size in bytes the server can send.
# The default value is math.MaxInt32.
max-send-msg-size = "2147483647"

###############################################################################
### gRPC Web Configuration ###
###############################################################################

[grpc-web]

# GRPCWebEnable defines if the gRPC-web should be enabled.
# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op.
enable = true

# Address defines the gRPC-web server address to bind to.
address = "localhost:9091"

# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
enable-unsafe-cors = false

###############################################################################
### State Sync Configuration ###
###############################################################################

# State sync snapshots allow other nodes to rapidly join the network without replaying historical
# blocks, instead downloading and applying a snapshot of the application state at a given height.
[state-sync]

# snapshot-interval specifies the block interval at which local state sync snapshots are
# taken (0 to disable).
snapshot-interval = 0

# snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all).
snapshot-keep-recent = 2

###############################################################################
### Store / State Streaming ###
###############################################################################

[store]
streamers = []

[streamers]
[streamers.file]
keys = ["*", ]
write_dir = ""
prefix = ""

# output-metadata specifies if output the metadata file which includes the abci request/responses
# during processing the block.
output-metadata = "true"

# stop-node-on-error specifies if propagate the file streamer errors to consensus state machine.
stop-node-on-error = "true"

# fsync specifies if call fsync after writing the files.
fsync = "false"

###############################################################################
### Mempool ###
###############################################################################

[mempool]
# Setting max-txs to 0 will allow for a unbounded amount of transactions in the mempool.
# Setting max_txs to negative 1 (-1) will disable transactions from being inserted into the mempool.
# Setting max_txs to a positive number (> 0) will limit the number of transactions in the mempool, by the specified amount.
#
# Note, this configuration only applies to SDK built-in app-side mempool
# implementations.
max-txs = 5000
17 changes: 17 additions & 0 deletions test/chains/archway/data/config/client.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml

###############################################################################
### Client Configuration ###
###############################################################################

# The network chain ID
chain-id = "localnet-1"
# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory)
keyring-backend = "os"
# CLI output format (text|json)
output = "text"
# <host>:<port> to Tendermint RPC interface for this chain
node = "tcp://localhost:26657"
# Transaction broadcasting mode (sync|async)
broadcast-mode = "sync"
Loading

0 comments on commit e76b4b4

Please sign in to comment.