From c66d8a84687f5d68c0192122aa513b4b340794ca Mon Sep 17 00:00:00 2001
From: Svyatoslav Nikolsky <svyatonik@gmail.com>
Date: Fri, 26 Apr 2024 12:24:42 +0300
Subject: [PATCH] Bump bridges relay version + uncomment bridges zombeinet
 tests (#4289)

TODOs:
- [x] wait and see if test `1` works;
- [x] ~think of whether we need remaining tests.~ I think we should keep
it - will try to revive and update it
---
 .gitlab/pipeline/zombienet.yml                |  4 +---
 .gitlab/pipeline/zombienet/bridges.yml        |  4 ++--
 ...hen-idle.js => multiple-headers-synced.js} | 22 +++++--------------
 .../rococo-to-westend.zndsl                   | 20 +++++++++++++++++
 .../run.sh                                    |  2 +-
 .../westend-to-rococo.zndsl                   | 20 +++++++++++++++++
 .../rococo-to-westend.zndsl                   |  8 -------
 .../westend-to-rococo.zndsl                   |  7 ------
 ...ridges_zombienet_tests_injected.Dockerfile |  2 +-
 9 files changed, 51 insertions(+), 38 deletions(-)
 rename bridges/testing/framework/js-helpers/{only-mandatory-headers-synced-when-idle.js => multiple-headers-synced.js} (61%)
 create mode 100644 bridges/testing/tests/0002-free-headers-synced-while-idle/rococo-to-westend.zndsl
 rename bridges/testing/tests/{0002-mandatory-headers-synced-while-idle => 0002-free-headers-synced-while-idle}/run.sh (90%)
 create mode 100644 bridges/testing/tests/0002-free-headers-synced-while-idle/westend-to-rococo.zndsl
 delete mode 100644 bridges/testing/tests/0002-mandatory-headers-synced-while-idle/rococo-to-westend.zndsl
 delete mode 100644 bridges/testing/tests/0002-mandatory-headers-synced-while-idle/westend-to-rococo.zndsl

diff --git a/.gitlab/pipeline/zombienet.yml b/.gitlab/pipeline/zombienet.yml
index e306cb43c02..52948e1eb71 100644
--- a/.gitlab/pipeline/zombienet.yml
+++ b/.gitlab/pipeline/zombienet.yml
@@ -12,6 +12,4 @@ include:
   # polkadot tests
   - .gitlab/pipeline/zombienet/polkadot.yml
   # bridges tests
-  # TODO: https://github.com/paritytech/parity-bridges-common/pull/2884
-  # commenting until we have a new relatye, compatible with updated fees scheme
-  # - .gitlab/pipeline/zombienet/bridges.yml
+  - .gitlab/pipeline/zombienet/bridges.yml
diff --git a/.gitlab/pipeline/zombienet/bridges.yml b/.gitlab/pipeline/zombienet/bridges.yml
index 4278f59b1e9..9d7a8b93119 100644
--- a/.gitlab/pipeline/zombienet/bridges.yml
+++ b/.gitlab/pipeline/zombienet/bridges.yml
@@ -55,9 +55,9 @@ zombienet-bridges-0001-asset-transfer-works:
     - /home/nonroot/bridges-polkadot-sdk/bridges/testing/run-new-test.sh 0001-asset-transfer --docker
     - echo "Done"
 
-zombienet-bridges-0002-mandatory-headers-synced-while-idle:
+zombienet-bridges-0002-free-headers-synced-while-idle:
   extends:
     - .zombienet-bridges-common
   script:
-    - /home/nonroot/bridges-polkadot-sdk/bridges/testing/run-new-test.sh 0002-mandatory-headers-synced-while-idle --docker
+    - /home/nonroot/bridges-polkadot-sdk/bridges/testing/run-new-test.sh 0002-free-headers-synced-while-idle --docker
     - echo "Done"
diff --git a/bridges/testing/framework/js-helpers/only-mandatory-headers-synced-when-idle.js b/bridges/testing/framework/js-helpers/multiple-headers-synced.js
similarity index 61%
rename from bridges/testing/framework/js-helpers/only-mandatory-headers-synced-when-idle.js
rename to bridges/testing/framework/js-helpers/multiple-headers-synced.js
index 979179245eb..a30efc82165 100644
--- a/bridges/testing/framework/js-helpers/only-mandatory-headers-synced-when-idle.js
+++ b/bridges/testing/framework/js-helpers/multiple-headers-synced.js
@@ -10,33 +10,23 @@ async function run(nodeName, networkInfo, args) {
 
     // start listening to new blocks
     let totalGrandpaHeaders = 0;
-    let initialParachainHeaderImported = false;
+    let totalParachainHeaders = 0;
     api.rpc.chain.subscribeNewHeads(async function (header) {
         const apiAtParent = await api.at(header.parentHash);
         const apiAtCurrent = await api.at(header.hash);
         const currentEvents = await apiAtCurrent.query.system.events();
 
-        totalGrandpaHeaders += await utils.ensureOnlyMandatoryGrandpaHeadersImported(
-            bridgedChain,
-            apiAtParent,
-            apiAtCurrent,
-            currentEvents,
-        );
-        initialParachainHeaderImported = await utils.ensureOnlyInitialParachainHeaderImported(
-            bridgedChain,
-            apiAtParent,
-            apiAtCurrent,
-            currentEvents,
-        );
+        totalGrandpaHeaders += await utils.countGrandpaHeaderImports(bridgedChain, currentEvents);
+        totalParachainHeaders += await utils.countParachainHeaderImports(bridgedChain, currentEvents);
     });
 
     // wait given time
     await new Promise(resolve => setTimeout(resolve, exitAfterSeconds * 1000));
-    // if we haven't seen any new GRANDPA or parachain headers => fail
-    if (totalGrandpaHeaders == 0) {
+    // if we haven't seen many (>1) new GRANDPA or parachain headers => fail
+    if (totalGrandpaHeaders <= 1) {
         throw new Error("No bridged relay chain headers imported");
     }
-    if (!initialParachainHeaderImported) {
+    if (totalParachainHeaders <= 1) {
         throw new Error("No bridged parachain headers imported");
     }
 }
diff --git a/bridges/testing/tests/0002-free-headers-synced-while-idle/rococo-to-westend.zndsl b/bridges/testing/tests/0002-free-headers-synced-while-idle/rococo-to-westend.zndsl
new file mode 100644
index 00000000000..0f779caa87c
--- /dev/null
+++ b/bridges/testing/tests/0002-free-headers-synced-while-idle/rococo-to-westend.zndsl
@@ -0,0 +1,20 @@
+Description: While relayer is idle, we only sync free Rococo (and a single Rococo BH) headers to Westend BH.
+Network: {{ENV_PATH}}/bridge_hub_westend_local_network.toml
+Creds: config
+
+# local chain spec gives `1u64 << 60` tokens to every endowed account: if it'll ever
+# change, it'd need to be fixed here as well
+
+# //Charlie only submits free and mandatory relay chain headers, so the balance should stay the same
+bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y" return is 1152921504606846976 within 30 seconds
+# //Dave only submits free parachain headers, so the balance should stay the same
+bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy" return is 1152921504606846976 within 30 seconds
+
+# ensure that we have synced multiple relay and parachain headers while idle. This includes both
+# headers that were generated while relay was offline and those in the next 100 seconds while script is active.
+bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/multiple-headers-synced.js with "300,rococo-at-westend" within 600 seconds
+
+# //Charlie only submits free and mandatory relay chain headers, so the balance should stay the same
+bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y" return is 1152921504606846976 within 30 seconds
+# //Dave only submits free parachain headers, so the balance should stay the same
+bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy" return is 1152921504606846976 within 30 seconds
diff --git a/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/run.sh b/bridges/testing/tests/0002-free-headers-synced-while-idle/run.sh
similarity index 90%
rename from bridges/testing/tests/0002-mandatory-headers-synced-while-idle/run.sh
rename to bridges/testing/tests/0002-free-headers-synced-while-idle/run.sh
index 32419dc84f5..9d19a9688f9 100755
--- a/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/run.sh
+++ b/bridges/testing/tests/0002-free-headers-synced-while-idle/run.sh
@@ -22,7 +22,7 @@ echo
 # which is expected to be 60 seconds for the test environment.
 echo -e "Sleeping 90s before starting relayer ...\n"
 sleep 90
-${BASH_SOURCE%/*}/../../environments/rococo-westend/start_relayer.sh $rococo_dir $westend_dir relayer_pid
+${BASH_SOURCE%/*}/../../environments/rococo-westend/start_relayer.sh $rococo_dir $westend_dir finality_relayer_pid parachains_relayer_pid messages_relayer_pid
 
 run_zndsl ${BASH_SOURCE%/*}/rococo-to-westend.zndsl $westend_dir
 run_zndsl ${BASH_SOURCE%/*}/westend-to-rococo.zndsl $rococo_dir
diff --git a/bridges/testing/tests/0002-free-headers-synced-while-idle/westend-to-rococo.zndsl b/bridges/testing/tests/0002-free-headers-synced-while-idle/westend-to-rococo.zndsl
new file mode 100644
index 00000000000..7a6f1ec379d
--- /dev/null
+++ b/bridges/testing/tests/0002-free-headers-synced-while-idle/westend-to-rococo.zndsl
@@ -0,0 +1,20 @@
+Description: While relayer is idle, we only sync free Westend (and a single Westend BH) headers to Rococo BH.
+Network: {{ENV_PATH}}/bridge_hub_rococo_local_network.toml
+Creds: config
+
+# local chain spec gives `1u64 << 60` tokens to every endowed account: if it'll ever
+# change, it'd need to be fixed here as well
+
+# //Charlie has inital balance
+bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y" return is 1152921504606846976 within 30 seconds
+# //Dave has inital balance
+bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy" return is 1152921504606846976 within 30 seconds
+
+# ensure that we have synced multiple relay and parachain headers while idle. This includes both
+# headers that were generated while relay was offline and those in the next 100 seconds while script is active.
+bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/multiple-headers-synced.js with "300,westend-at-rococo" within 600 seconds
+
+# //Charlie only submits free and mandatory relay chain headers, so the balance should stay the same
+bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y" return is 1152921504606846976 within 30 seconds
+# //Dave only submits free parachain headers, so the balance should stay the same
+bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-asset-balance.js with "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy" return is 1152921504606846976 within 30 seconds
diff --git a/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/rococo-to-westend.zndsl b/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/rococo-to-westend.zndsl
deleted file mode 100644
index 6e381f53773..00000000000
--- a/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/rococo-to-westend.zndsl
+++ /dev/null
@@ -1,8 +0,0 @@
-Description: While relayer is idle, we only sync mandatory Rococo (and a single Rococo BH) headers to Westend BH.
-Network: {{ENV_PATH}}/bridge_hub_westend_local_network.toml
-Creds: config
-
-# ensure that relayer is only syncing mandatory headers while idle. This includes both headers that were
-# generated while relay was offline and those in the next 100 seconds while script is active.
-bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/only-mandatory-headers-synced-when-idle.js with "300,rococo-at-westend" within 600 seconds
-
diff --git a/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/westend-to-rococo.zndsl b/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/westend-to-rococo.zndsl
deleted file mode 100644
index b4b3e436791..00000000000
--- a/bridges/testing/tests/0002-mandatory-headers-synced-while-idle/westend-to-rococo.zndsl
+++ /dev/null
@@ -1,7 +0,0 @@
-Description: While relayer is idle, we only sync mandatory Westend (and a single Westend BH) headers to Rococo BH.
-Network: {{ENV_PATH}}/bridge_hub_rococo_local_network.toml
-Creds: config
-
-# ensure that relayer is only syncing mandatory headers while idle. This includes both headers that were
-# generated while relay was offline and those in the next 100 seconds while script is active.
-bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/only-mandatory-headers-synced-when-idle.js with "300,westend-at-rococo" within 600 seconds
diff --git a/docker/dockerfiles/bridges_zombienet_tests_injected.Dockerfile b/docker/dockerfiles/bridges_zombienet_tests_injected.Dockerfile
index 938f5cc45a1..196ba861f50 100644
--- a/docker/dockerfiles/bridges_zombienet_tests_injected.Dockerfile
+++ b/docker/dockerfiles/bridges_zombienet_tests_injected.Dockerfile
@@ -1,7 +1,7 @@
 # this image is built on top of existing Zombienet image
 ARG ZOMBIENET_IMAGE
 # this image uses substrate-relay image built elsewhere
-ARG SUBSTRATE_RELAY_IMAGE=docker.io/paritytech/substrate-relay:v1.2.1
+ARG SUBSTRATE_RELAY_IMAGE=docker.io/paritytech/substrate-relay:v1.5.0
 
 # metadata
 ARG VCS_REF
-- 
GitLab