Skip to content

Commit

Permalink
fix(cli): e2e tests with updated permissions (#1699)
Browse files Browse the repository at this point in the history
  • Loading branch information
mjlescano authored Feb 20, 2025
1 parent 6c909e4 commit 714bd20
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 13 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,6 @@ jobs:
env:
CANNON_E2E_RPC_URL_OPTIMISM: ${{ secrets.CANNON_E2E_RPC_URL_OPTIMISM }}
CANNON_E2E_RPC_URL_ETHEREUM: ${{ secrets.CANNON_E2E_RPC_URL_ETHEREUM }}
CANNON_E2E_RPC_URL_SEPOLIA: ${{ secrets.CANNON_E2E_RPC_URL_SEPOLIA }}
CANNON_E2E_RPC_URL_BASE: ${{ secrets.CANNON_E2E_RPC_URL_BASE }}
CANNON_ETHERSCAN_API_KEY: ${{ secrets.CANNON_ETHERSCAN_API_KEY }}
5 changes: 3 additions & 2 deletions .github/workflows/test-snx-ci.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
name: Test-snx-ci

on:
pull_request:
branches: [main, alpha, dev]
[]
# pull_request:
# branches: [main, alpha, dev]

jobs:
test-snx-ci:
Expand Down
3 changes: 0 additions & 3 deletions packages/cli/.env.test

This file was deleted.

2 changes: 2 additions & 0 deletions packages/cli/.env.test.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
CANNON_E2E_RPC_URL_OPTIMISM=https://...
CANNON_E2E_RPC_URL_ETHEREUM=https://...
CANNON_E2E_RPC_URL_SEPOLIA=https://...
CANNON_E2E_RPC_URL_BASE=https://...
CANNON_ETHERSCAN_API_KEY=...
66 changes: 66 additions & 0 deletions packages/cli/test/e2e/helpers/bats-helpers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
# DEFAULT BATS FUNCTION OVERRIDES

_setup_file() {
export FOUNDRY_DISABLE_NIGHTLY_WARNING=true
export CANNON_REPO_DIR="$(git rev-parse --show-toplevel)"

load_env "$CANNON_REPO_DIR/packages/cli/.env.test"

require_env_var 'CANNON_E2E_RPC_URL_OPTIMISM'
require_env_var 'CANNON_E2E_RPC_URL_ETHEREUM'
require_env_var 'CANNON_E2E_RPC_URL_SEPOLIA'
require_env_var 'CANNON_E2E_RPC_URL_BASE'
require_env_var 'CANNON_ETHERSCAN_API_KEY'

# Create temporary directory for tests if necessary
Expand Down Expand Up @@ -90,3 +93,66 @@ require_env_var() {
exit 1
fi
}

wait_for_rpc() {
local rpc_url=$1
local max_attempts=${2:-30} # default 30 attempts
local delay=${3:-1} # default 1 second delay between attempts
local attempt=1

echo "Waiting for RPC endpoint to be ready..."

while [ $attempt -le $max_attempts ]; do
if cast block-number --rpc-url "$rpc_url" &>/dev/null; then
echo "RPC endpoint is ready!"
return 0
fi

echo "Attempt $attempt/$max_attempts: RPC not ready yet, retrying in ${delay}s..."
sleep $delay
attempt=$((attempt + 1))
done

echo "Error: RPC endpoint failed to respond after $max_attempts attempts"
return 1
}

to_bytes32() {
cast from-utf8 "$1" | cast to-bytes32 | sed -n '/^0x/p'
}

get_package_owner() {
local _package_name="$1"
local _package_hex=$(to_bytes32 "$_package_name")
local _owner_bytes32=$(
cast call \
'0x8E5C7EFC9636A6A0408A46BB7F617094B81e5dba' \
'getPackageOwner(bytes32 _packageName)' \
"$_package_hex" \
--rpc-url "$ANVIL_URL_ETHEREUM" \
| sed -n '/^0x/p'
)
local _owner_address=$(cast parse-bytes32-address "$_owner_bytes32" | sed -n '/^0x/p')
echo "$_owner_address"
}

set_package_publisher() {
local _package_name="$1"
local _publisher_address="$2"
local _package_hex=$(to_bytes32 "$_package_name")
local _owner_address=$(get_package_owner "$_package_name")

cast rpc anvil_impersonateAccount "$_owner_address" --rpc-url "$ANVIL_URL_ETHEREUM"
cast send \
'0x8E5C7EFC9636A6A0408A46BB7F617094B81e5dba' \
'setAdditionalPublishers(bytes32 _packageName, address[] memory _additionalPublishersEthereum, address[] memory _additionalPublishersOptimism)' \
"$_package_hex" \
"[$_publisher_address]" \
"[$_publisher_address]" \
--from "$_owner_address" \
--unlocked \
--rpc-url "$ANVIL_URL_ETHEREUM"
cast rpc anvil_stopImpersonatingAccount "$_owner_address" --rpc-url "$ANVIL_URL_ETHEREUM"
# this is necessary to ensure the RPC is updated on CI, as it takes a little longer
sleep 15
}
4 changes: 2 additions & 2 deletions packages/cli/test/e2e/scripts/non-interactive/trace-output.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
traceResult=$($CANNON trace synthetix-omnibus:3.3.5-2@andromeda --chain-id 8453 0xb4fd9973944ea7de9815bfb950b4fc1640f3f4ea3505e6aa8a10de0581e4495e)
traceResult=$($CANNON trace synthetix-omnibus:3.3.5-2@andromeda --chain-id 8453 0xb4fd9973944ea7de9815bfb950b4fc1640f3f4ea3505e6aa8a10de0581e4495e --rpc-url $CANNON_E2E_RPC_URL_BASE)

[[ "$traceResult" =~ "CollateralConfigurationModule.configureCollateral" ]]
[[ "$traceResult" =~ "Transaction completes successfully" ]]
[[ "$traceResult" =~ "Transaction completes successfully" ]]
4 changes: 2 additions & 2 deletions packages/cli/test/e2e/scripts/non-interactive/trace.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
$CANNON trace trusted-multicall-forwarder@with-synthetix 0x174dea710000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000760000000000000000000000000ea7a8f0fdd16ccd46ba541fb657a0a7fd7e36261000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000066414b959560000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b430000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e3504e41550100000003b801000000030d02936cb8d2a4ea1076a38016298c4f42a1fb5c395226d3e9385ee81f89612da8205f677b9b66ec73fdab10ae5986fe01c9e6f5399d0d15d4a3beba37f9423be9b8000301158d1aeb773f65927e00e97f4e7bc79c0b7906a493a7fea7705da25583c61a40d37cd3b7af557fd48a56034ab9f07191a59b93961d74e4b00540eb52b663c101041dad0e13dd379572d89ef56b590943f71b07f9a208c135b2c16feb9b028b9bd34ac4b7ba6c3cb4820d9b79cb0eb0bdf178f507e196c09068061b774c8e170b3a0106acf947e02ece27a88d0c80a4b957c88fff75d39a240728155cfaec7f742deb5952a30c1f04d1eeadd401e3833b404d064121edb2f7d64c77fe2c55014d1286440008fde4fc1e798ec424e50255dd4237cbc9725d8b1644e4b18e531410fb4a3871ed7fa64a8fa417a3ee282f6ed275ce71270b3d03dadb7dcfa64ad3e6c1910880e0010a5f50de6f77ff82fc5731c4ec487430c48a1c6d5a7d33823a8833825291263d950f3858fcee7a342ecb2caeaa564068f258c46df6500e36904647f3d1e69f2d2f010b1e5f24e31709c64da010dd49297f620ddc46e2677c68507873502850bf4acc701fb02a7b361861ff3d195191eb3c26414b86fae412269dc55863362d22b4150b000c4ad4bc116178ebac674127334e52862e2ace5673cd671f9fe4c207e62e2da2cf51c3d8e62c09e2812266d3cc42ec60dba9243f64bff2b59ded6cd0ace1bab383000d62ef3b83a9fc7cb644b95c06899c4b302359094aec66563cd86c4848a7d5f878364e27672da69d13bf3c7277fe56e02d49cc0ab9796444071ca05ef4b2678abf010e93bb42e8dc5e2bf62f44ea8748afc9a6393c6aee5d61372bb8d65a657a942e7414c88f55bb090bc5b592a94f6e9fb5b44ab141c972d19fe27e33459a453dbb44000fa5e224791f5038be3fcb1e823b1de0362ac0c83d321f871c1da75e702094131f1786330998190857fd89befe138de64cf5d8778eea86a8cf60d61c93fc969f2a00106c30d1fae7fd14bbf927e161f3743a73f3b1a49442414c6f6fc2d97835704a8208b3d8893dcf575dc2fa652391b4d388a69690de23efea12f14000be8f72be02011299a80efed42bec287af263f26bb9db40dcbb25cb37762927dae8bcd781c07c0a47832f195346090e2981c9d20281521b593731a19cb247d4d8068288cdfd31ad0165ccc4ee00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000026e780001415557560000000000077672270000271079e07919c35cdb738362d35842cb31b2feedc98001005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000004b42d432700000000009bf5d7d2fffffff80000000065ccc4ee0000000065ccc4ed000004b04a6fdc0000000000926634640ae56baf1badf0871f8215c677d74928834969fb7d1d9d6b17d03d537d256938e238b030eff018407427ce1393cb2f4d2bed81658b1a78ed62b89ed1de533e3a5e6f42cbd41f175c45dd99e811c583f5143eb2941aa9a2fa3c59af3c90bd2a24745b94e980a31c14165215f2baf688f1521813a57d219dd10b454a347ca0bbe86bfa8a4761b52b2b20e79c745fdc726e569ef017a49e557de9dfdfd745a2cde2c796eae452c4b8c4e8cd383d1907e896b9b50ba01f3549766702f79967c340593d111926ad0897a844000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4df9dd327fd30695d478c3c8a2fffaddcdd0d3100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000643593bbd200000000000000000000000000000000800000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000367fed42283febc9d8a6d78c5ab62f78b6022e2700000000000000000000000000000000000000000000000000000000 --value 1 --to 0xE2C5658cC5C448B48141168f3e475dF8f65A1e3e --from 0xFD348aF9ee8D155066d11356A3E81680c7535b4c --chain-id 8453 --rpc-url https://base-mainnet.g.alchemy.com/v2/nxqdwH6pqTH5sQfR4R_ioXy3ZH1FFLkL
$CANNON trace trusted-multicall-forwarder@with-synthetix 0x174dea710000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000760000000000000000000000000ea7a8f0fdd16ccd46ba541fb657a0a7fd7e36261000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000066414b959560000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b430000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e3504e41550100000003b801000000030d02936cb8d2a4ea1076a38016298c4f42a1fb5c395226d3e9385ee81f89612da8205f677b9b66ec73fdab10ae5986fe01c9e6f5399d0d15d4a3beba37f9423be9b8000301158d1aeb773f65927e00e97f4e7bc79c0b7906a493a7fea7705da25583c61a40d37cd3b7af557fd48a56034ab9f07191a59b93961d74e4b00540eb52b663c101041dad0e13dd379572d89ef56b590943f71b07f9a208c135b2c16feb9b028b9bd34ac4b7ba6c3cb4820d9b79cb0eb0bdf178f507e196c09068061b774c8e170b3a0106acf947e02ece27a88d0c80a4b957c88fff75d39a240728155cfaec7f742deb5952a30c1f04d1eeadd401e3833b404d064121edb2f7d64c77fe2c55014d1286440008fde4fc1e798ec424e50255dd4237cbc9725d8b1644e4b18e531410fb4a3871ed7fa64a8fa417a3ee282f6ed275ce71270b3d03dadb7dcfa64ad3e6c1910880e0010a5f50de6f77ff82fc5731c4ec487430c48a1c6d5a7d33823a8833825291263d950f3858fcee7a342ecb2caeaa564068f258c46df6500e36904647f3d1e69f2d2f010b1e5f24e31709c64da010dd49297f620ddc46e2677c68507873502850bf4acc701fb02a7b361861ff3d195191eb3c26414b86fae412269dc55863362d22b4150b000c4ad4bc116178ebac674127334e52862e2ace5673cd671f9fe4c207e62e2da2cf51c3d8e62c09e2812266d3cc42ec60dba9243f64bff2b59ded6cd0ace1bab383000d62ef3b83a9fc7cb644b95c06899c4b302359094aec66563cd86c4848a7d5f878364e27672da69d13bf3c7277fe56e02d49cc0ab9796444071ca05ef4b2678abf010e93bb42e8dc5e2bf62f44ea8748afc9a6393c6aee5d61372bb8d65a657a942e7414c88f55bb090bc5b592a94f6e9fb5b44ab141c972d19fe27e33459a453dbb44000fa5e224791f5038be3fcb1e823b1de0362ac0c83d321f871c1da75e702094131f1786330998190857fd89befe138de64cf5d8778eea86a8cf60d61c93fc969f2a00106c30d1fae7fd14bbf927e161f3743a73f3b1a49442414c6f6fc2d97835704a8208b3d8893dcf575dc2fa652391b4d388a69690de23efea12f14000be8f72be02011299a80efed42bec287af263f26bb9db40dcbb25cb37762927dae8bcd781c07c0a47832f195346090e2981c9d20281521b593731a19cb247d4d8068288cdfd31ad0165ccc4ee00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000026e780001415557560000000000077672270000271079e07919c35cdb738362d35842cb31b2feedc98001005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000004b42d432700000000009bf5d7d2fffffff80000000065ccc4ee0000000065ccc4ed000004b04a6fdc0000000000926634640ae56baf1badf0871f8215c677d74928834969fb7d1d9d6b17d03d537d256938e238b030eff018407427ce1393cb2f4d2bed81658b1a78ed62b89ed1de533e3a5e6f42cbd41f175c45dd99e811c583f5143eb2941aa9a2fa3c59af3c90bd2a24745b94e980a31c14165215f2baf688f1521813a57d219dd10b454a347ca0bbe86bfa8a4761b52b2b20e79c745fdc726e569ef017a49e557de9dfdfd745a2cde2c796eae452c4b8c4e8cd383d1907e896b9b50ba01f3549766702f79967c340593d111926ad0897a844000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4df9dd327fd30695d478c3c8a2fffaddcdd0d3100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000643593bbd200000000000000000000000000000000800000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000367fed42283febc9d8a6d78c5ab62f78b6022e2700000000000000000000000000000000000000000000000000000000 --value 1 --to 0xE2C5658cC5C448B48141168f3e475dF8f65A1e3e --from 0xFD348aF9ee8D155066d11356A3E81680c7535b4c --chain-id 8453 --rpc-url $CANNON_E2E_RPC_URL_BASE

# stress test (this one takes 10+ seconds to execute)
$CANNON trace synthetix-omnibus --chain-id 11155111 --from 0x3Cb01ef762Ce0b996c9922c4b2005067041048f6 --to 0x94c53500d38f95dEea37Bada599d54D8DabEF776 --rpc-url https://eth-sepolia.g.alchemy.com/v2/x9eISuxkg4D5ZTSAdpYvh4akm9EpFFsi 0xbcca753f000000000000000000000000000000007fffffffffffffffffffffffffffffff
$CANNON trace synthetix-omnibus --chain-id 11155111 --from 0x3Cb01ef762Ce0b996c9922c4b2005067041048f6 --to 0x94c53500d38f95dEea37Bada599d54D8DabEF776 --rpc-url $CANNON_E2E_RPC_URL_SEPOLIA 0xbcca753f000000000000000000000000000000007fffffffffffffffffffffffffffffff
21 changes: 17 additions & 4 deletions packages/cli/test/e2e/series.bats
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,23 @@ setup_file() {
# Fork OP to run tests against forked node
anvil --fork-url "$CANNON_E2E_RPC_URL_OPTIMISM" --port 9546 --silent --accounts 1 --optimism &
export ANVIL_PID_OP="$!"
sleep 1

# Fork Mainnet to run tests against forked node
anvil --fork-url "$CANNON_E2E_RPC_URL_ETHEREUM" --port 9545 --silent --accounts 1 &
export ANVIL_PID="$!"
sleep 1

export ANVIL_URL_ETHEREUM="http://127.0.0.1:9545"
export ANVIL_URL_OPTIMISM="http://127.0.0.1:9546"

if ! wait_for_rpc "$ANVIL_URL_ETHEREUM"; then
echo "Failed to connect to RPC $ANVIL_URL_ETHEREUM"
exit 1
fi

if ! wait_for_rpc "$ANVIL_URL_OPTIMISM"; then
echo "Failed to connect to RPC $ANVIL_URL_OPTIMISM"
exit 1
fi
}

# File post-run hook
Expand Down Expand Up @@ -193,17 +204,19 @@ teardown() {
@test "Register & Publish - Registering and publishing the greeter package" {
set_custom_config
start_optimism_emitter
set_package_publisher "greeter-foundry" "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"
run publish.sh 1
echo $output
assert_output --partial 'Package "greeter-foundry" not yet registered'
assert_output --partial 'Success - Package "greeter-foundry" has been registered'
# assert_output --partial 'Package "greeter-foundry" not yet registered'
# assert_output --partial 'Success - Package "greeter-foundry" has been registered'
assert_output --partial 'Transactions:'
assert_success
}

@test "Register & Publish - Publishing a package from an IPFS Reference" {
set_custom_config
start_optimism_emitter
set_package_publisher "greeter-foundry" "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"
run publish.sh 3
echo $output
assert_success
Expand Down

0 comments on commit 714bd20

Please sign in to comment.