From 935eeb52239d938ed5bed79268fa0a60aa608e91 Mon Sep 17 00:00:00 2001
From: Alin Dima <alin@parity.io>
Date: Mon, 28 Oct 2024 11:41:30 +0200
Subject: [PATCH] fix experimental-ump-signals tests (#6214)

Resolves https://github.com/paritytech/polkadot-sdk/issues/6200

Also sets the feature on the rococo-parachain. Will be useful for
zombienet testing
---
 cumulus/pallets/parachain-system/src/tests.rs | 127 ++++++++++++++++--
 .../testing/rococo-parachain/Cargo.toml       |   2 +-
 prdoc/pr_6214.prdoc                           |   5 +
 3 files changed, 124 insertions(+), 10 deletions(-)
 create mode 100644 prdoc/pr_6214.prdoc

diff --git a/cumulus/pallets/parachain-system/src/tests.rs b/cumulus/pallets/parachain-system/src/tests.rs
index 23223627ebc..2b65dd6a921 100755
--- a/cumulus/pallets/parachain-system/src/tests.rs
+++ b/cumulus/pallets/parachain-system/src/tests.rs
@@ -25,6 +25,8 @@ use frame_support::{assert_ok, parameter_types, weights::Weight};
 use frame_system::RawOrigin;
 use hex_literal::hex;
 use rand::Rng;
+#[cfg(feature = "experimental-ump-signals")]
+use relay_chain::vstaging::{UMPSignal, UMP_SEPARATOR};
 use relay_chain::HrmpChannelId;
 use sp_core::H256;
 
@@ -583,7 +585,25 @@ fn send_upward_message_num_per_candidate() {
 			},
 			|| {
 				let v = UpwardMessages::<Test>::get();
-				assert_eq!(v, vec![b"Mr F was here".to_vec()]);
+				#[cfg(feature = "experimental-ump-signals")]
+				{
+					assert_eq!(
+						v,
+						vec![
+							b"Mr F was here".to_vec(),
+							UMP_SEPARATOR,
+							UMPSignal::SelectCore(
+								CoreSelector(1),
+								ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)
+							)
+							.encode()
+						]
+					);
+				}
+				#[cfg(not(feature = "experimental-ump-signals"))]
+				{
+					assert_eq!(v, vec![b"Mr F was here".to_vec()]);
+				}
 			},
 		)
 		.add_with_post_test(
@@ -594,7 +614,25 @@ fn send_upward_message_num_per_candidate() {
 			},
 			|| {
 				let v = UpwardMessages::<Test>::get();
-				assert_eq!(v, vec![b"message 2".to_vec()]);
+				#[cfg(feature = "experimental-ump-signals")]
+				{
+					assert_eq!(
+						v,
+						vec![
+							b"message 2".to_vec(),
+							UMP_SEPARATOR,
+							UMPSignal::SelectCore(
+								CoreSelector(2),
+								ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)
+							)
+							.encode()
+						]
+					);
+				}
+				#[cfg(not(feature = "experimental-ump-signals"))]
+				{
+					assert_eq!(v, vec![b"message 2".to_vec()]);
+				}
 			},
 		);
 }
@@ -620,7 +658,24 @@ fn send_upward_message_relay_bottleneck() {
 			|| {
 				// The message won't be sent because there is already one message in queue.
 				let v = UpwardMessages::<Test>::get();
-				assert!(v.is_empty());
+				#[cfg(feature = "experimental-ump-signals")]
+				{
+					assert_eq!(
+						v,
+						vec![
+							UMP_SEPARATOR,
+							UMPSignal::SelectCore(
+								CoreSelector(1),
+								ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)
+							)
+							.encode()
+						]
+					);
+				}
+				#[cfg(not(feature = "experimental-ump-signals"))]
+				{
+					assert!(v.is_empty());
+				}
 			},
 		)
 		.add_with_post_test(
@@ -628,7 +683,25 @@ fn send_upward_message_relay_bottleneck() {
 			|| { /* do nothing within block */ },
 			|| {
 				let v = UpwardMessages::<Test>::get();
-				assert_eq!(v, vec![vec![0u8; 8]]);
+				#[cfg(feature = "experimental-ump-signals")]
+				{
+					assert_eq!(
+						v,
+						vec![
+							vec![0u8; 8],
+							UMP_SEPARATOR,
+							UMPSignal::SelectCore(
+								CoreSelector(2),
+								ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)
+							)
+							.encode()
+						]
+					);
+				}
+				#[cfg(not(feature = "experimental-ump-signals"))]
+				{
+					assert_eq!(v, vec![vec![0u8; 8]]);
+				}
 			},
 		);
 }
@@ -1172,7 +1245,25 @@ fn ump_fee_factor_increases_and_decreases() {
 			|| {
 				// Factor decreases in `on_finalize`, but only if we are below the threshold
 				let messages = UpwardMessages::<Test>::get();
-				assert_eq!(messages, vec![b"Test".to_vec()]);
+				#[cfg(feature = "experimental-ump-signals")]
+				{
+					assert_eq!(
+						messages,
+						vec![
+							b"Test".to_vec(),
+							UMP_SEPARATOR,
+							UMPSignal::SelectCore(
+								CoreSelector(1),
+								ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)
+							)
+							.encode()
+						]
+					);
+				}
+				#[cfg(not(feature = "experimental-ump-signals"))]
+				{
+					assert_eq!(messages, vec![b"Test".to_vec()]);
+				}
 				assert_eq!(
 					UpwardDeliveryFeeFactor::<Test>::get(),
 					FixedU128::from_rational(105, 100)
@@ -1186,10 +1277,28 @@ fn ump_fee_factor_increases_and_decreases() {
 			},
 			|| {
 				let messages = UpwardMessages::<Test>::get();
-				assert_eq!(
-					messages,
-					vec![b"This message will be enough to increase the fee factor".to_vec(),]
-				);
+				#[cfg(feature = "experimental-ump-signals")]
+				{
+					assert_eq!(
+						messages,
+						vec![
+							b"This message will be enough to increase the fee factor".to_vec(),
+							UMP_SEPARATOR,
+							UMPSignal::SelectCore(
+								CoreSelector(2),
+								ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)
+							)
+							.encode()
+						]
+					);
+				}
+				#[cfg(not(feature = "experimental-ump-signals"))]
+				{
+					assert_eq!(
+						messages,
+						vec![b"This message will be enough to increase the fee factor".to_vec()]
+					);
+				}
 				// Now the delivery fee factor is decreased, since we are below the threshold
 				assert_eq!(UpwardDeliveryFeeFactor::<Test>::get(), FixedU128::from_u32(1));
 			},
diff --git a/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml
index bbc1185db0d..b0581c8d43f 100644
--- a/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml
+++ b/cumulus/parachains/runtimes/testing/rococo-parachain/Cargo.toml
@@ -49,7 +49,7 @@ polkadot-runtime-common = { workspace = true }
 # Cumulus
 cumulus-pallet-aura-ext = { workspace = true }
 pallet-message-queue = { workspace = true }
-cumulus-pallet-parachain-system = { workspace = true }
+cumulus-pallet-parachain-system = { workspace = true, features = ["experimental-ump-signals"] }
 cumulus-pallet-xcm = { workspace = true }
 cumulus-pallet-xcmp-queue = { workspace = true }
 cumulus-ping = { workspace = true }
diff --git a/prdoc/pr_6214.prdoc b/prdoc/pr_6214.prdoc
new file mode 100644
index 00000000000..c991df98630
--- /dev/null
+++ b/prdoc/pr_6214.prdoc
@@ -0,0 +1,5 @@
+crates:
+  - name: cumulus-pallet-parachain-system
+    bump: none
+  - name: rococo-parachain-runtime
+    bump: none
-- 
GitLab