From c70e180ace01be222793d56e41388d94b48f0d56 Mon Sep 17 00:00:00 2001
From: Javier Viola <363911+pepoviola@users.noreply.github.com>
Date: Tue, 26 Mar 2024 23:54:59 +0100
Subject: [PATCH] fix(k8s): collator port assignment to use in cmd (#197)

- [k8s] fix `cmd` generator for collators (needs to use exposed ports).
---
 crates/orchestrator/src/generators/command.rs | 38 +++++++++----------
 crates/sdk/tests/smoke.rs                     | 10 +++++
 2 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/crates/orchestrator/src/generators/command.rs b/crates/orchestrator/src/generators/command.rs
index 1baaec8..75a3acd 100644
--- a/crates/orchestrator/src/generators/command.rs
+++ b/crates/orchestrator/src/generators/command.rs
@@ -78,14 +78,17 @@ pub fn generate_for_cumulus_node(
     }
 
     // ports
+    let (prometheus_port, rpc_port, p2p_port) =
+        resolve_ports(node, options.use_default_ports_in_cmd);
+
     tmp_args.push("--prometheus-port".into());
-    tmp_args.push(node.prometheus_port.0.to_string());
+    tmp_args.push(prometheus_port.to_string());
 
     tmp_args.push("--rpc-port".into());
-    tmp_args.push(node.rpc_port.0.to_string());
+    tmp_args.push(rpc_port.to_string());
 
     tmp_args.push("--listen-addr".into());
-    tmp_args.push(format!("/ip4/0.0.0.0/tcp/{}/ws", node.p2p_port.0));
+    tmp_args.push(format!("/ip4/0.0.0.0/tcp/{}/ws", p2p_port));
 
     let mut collator_args: &[Arg] = &[];
     let mut full_node_args: &[Arg] = &[];
@@ -248,30 +251,18 @@ pub fn generate_for_node(
     }
 
     // ports
+    let (prometheus_port, rpc_port, p2p_port) =
+        resolve_ports(node, options.use_default_ports_in_cmd);
 
     // Prometheus
     tmp_args.push("--prometheus-port".into());
-    tmp_args.push(if options.use_default_ports_in_cmd {
-        PROMETHEUS_PORT.to_string()
-    } else {
-        node.prometheus_port.0.to_string()
-    });
+    tmp_args.push(prometheus_port.to_string());
 
     // RPC
     // TODO (team): do we want to support old --ws-port?
     tmp_args.push("--rpc-port".into());
-    tmp_args.push(if options.use_default_ports_in_cmd {
-        RPC_PORT.to_string()
-    } else {
-        node.rpc_port.0.to_string()
-    });
+    tmp_args.push(rpc_port.to_string());
 
-    // P2P
-    let p2p_port = if options.use_default_ports_in_cmd {
-        P2P_PORT
-    } else {
-        node.p2p_port.0
-    };
     let listen_value = if let Some(listen_val) = args.iter().find_map(|arg| match arg {
         Arg::Flag(_) => None,
         Arg::Option(k, v) => {
@@ -362,3 +353,12 @@ pub fn generate_for_node(
         (final_args.remove(0), final_args)
     }
 }
+
+/// Returns (prometheus, rpc, p2p) ports to use in the command
+fn resolve_ports(node: &NodeSpec, use_default_ports_in_cmd: bool) -> (u16, u16, u16) {
+    if use_default_ports_in_cmd {
+        (PROMETHEUS_PORT, RPC_PORT, P2P_PORT)
+    } else {
+        (node.prometheus_port.0, node.rpc_port.0, node.p2p_port.0)
+    }
+}
diff --git a/crates/sdk/tests/smoke.rs b/crates/sdk/tests/smoke.rs
index a022cbd..10b7031 100644
--- a/crates/sdk/tests/smoke.rs
+++ b/crates/sdk/tests/smoke.rs
@@ -119,6 +119,16 @@ async fn ci_k8s_basic_functionalities_should_works() {
 
     println!("parachains registered: {:?}", paras);
 
+    // collator
+    let collator = network.get_node("collator").unwrap();
+    let client = collator.client::<subxt::PolkadotConfig>().await.unwrap();
+
+    // wait 3 blocks
+    let mut blocks = client.blocks().subscribe_finalized().await.unwrap().take(3);
+    while let Some(block) = blocks.next().await {
+        println!("Block (para) #{}", block.unwrap().header().number);
+    }
+
     // tear down (optional if you don't detach the network)
     // network.destroy().await.unwrap();
 }
-- 
GitLab