Skip to content

Commit 3057721

Browse files
Merge pull request #6212 from nymtech/probe-fixes
gateway-probe fixes for run-local
2 parents 96e3ff2 + bcce854 commit 3057721

File tree

3 files changed

+63
-16
lines changed

3 files changed

+63
-16
lines changed

nym-gateway-probe/src/lib.rs

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,20 @@ pub enum TestedNode {
130130
SameAsEntry,
131131
Custom {
132132
identity: NodeIdentity,
133+
shares_entry: bool,
133134
},
134135
}
135136

136137
impl TestedNode {
137138
pub fn is_same_as_entry(&self) -> bool {
138-
matches!(self, TestedNode::SameAsEntry)
139+
matches!(
140+
self,
141+
TestedNode::SameAsEntry
142+
| TestedNode::Custom {
143+
shares_entry: true,
144+
..
145+
}
146+
)
139147
}
140148
}
141149

@@ -309,7 +317,20 @@ impl Probe {
309317
let entry_gateway = directory.entry_gateway(&self.entrypoint)?;
310318

311319
let node_info: TestedNodeDetails = match self.tested_node {
312-
TestedNode::Custom { identity } => {
320+
TestedNode::Custom {
321+
identity: _,
322+
shares_entry: true,
323+
} => {
324+
debug!(
325+
"testing node {} as both entry and exit",
326+
entry_gateway.identity()
327+
);
328+
entry_gateway.to_testable_node()?
329+
}
330+
TestedNode::Custom {
331+
identity,
332+
shares_entry: false,
333+
} => {
313334
let node = directory.get_nym_node(identity)?;
314335
info!(
315336
"testing node {} (via entry {})",
@@ -421,12 +442,17 @@ impl Probe {
421442
storage.credential_store().clone(),
422443
client,
423444
);
424-
let credential = bw_controller
425-
.prepare_ecash_ticket(
445+
let (wg_ticket_type, credential_provider) = if tested_entry {
446+
(
426447
TicketType::V1WireguardEntry,
427448
nym_address.gateway().to_bytes(),
428-
1,
429449
)
450+
} else {
451+
(TicketType::V1WireguardExit, node_info.identity.to_bytes())
452+
};
453+
454+
let credential = bw_controller
455+
.prepare_ecash_ticket(wg_ticket_type, credential_provider, 1)
430456
.await?
431457
.data;
432458

@@ -711,11 +737,7 @@ async fn do_ping_entry(
711737
}
712738
info!("Successfully mixnet pinged ourselves");
713739

714-
if tested_entry {
715-
Entry::success()
716-
} else {
717-
Entry::NotTested
718-
}
740+
Entry::success()
719741
}
720742

721743
async fn connect_exit(

nym-gateway-probe/src/nodes.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,16 @@ impl NymApiDirectory {
199199
.map(|(id, _)| *id)
200200
}
201201

202+
pub fn random_entry_gateway(&self) -> anyhow::Result<NodeIdentity> {
203+
info!("Selecting random entry gateway");
204+
self.nodes
205+
.iter()
206+
.filter(|(_, n)| n.described.description.declared_role.entry)
207+
.choose(&mut rand::thread_rng())
208+
.ok_or(anyhow!("no entry gateways available"))
209+
.map(|(id, _)| *id)
210+
}
211+
202212
pub fn get_nym_node(&self, identity: NodeIdentity) -> anyhow::Result<DirectoryNode> {
203213
self.nodes
204214
.get(&identity)

nym-gateway-probe/src/run.rs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,16 +124,31 @@ pub(crate) async fn run() -> anyhow::Result<ProbeResult> {
124124

125125
let directory = NymApiDirectory::new(api_url).await?;
126126

127-
let entry = if let Some(gateway) = &args.entry_gateway {
128-
NodeIdentity::from_base58_string(gateway)?
127+
let node_override = args.node;
128+
let entry_override = if let Some(gateway) = &args.entry_gateway {
129+
Some(NodeIdentity::from_base58_string(gateway)?)
129130
} else {
130-
directory.random_exit_with_ipr()?
131+
None
131132
};
132133

133-
let test_point = if let Some(node) = args.node {
134-
TestedNode::Custom { identity: node }
134+
let entry = if let Some(entry) = entry_override {
135+
entry
136+
} else if let Some(node) = node_override {
137+
node
135138
} else {
136-
TestedNode::SameAsEntry
139+
directory.random_entry_gateway()?
140+
};
141+
142+
let test_point = match (node_override, entry_override) {
143+
(Some(node), Some(_)) => TestedNode::Custom {
144+
identity: node,
145+
shares_entry: false,
146+
},
147+
(Some(node), None) => TestedNode::Custom {
148+
identity: node,
149+
shares_entry: true,
150+
},
151+
(None, _) => TestedNode::SameAsEntry,
137152
};
138153

139154
let mut trial =

0 commit comments

Comments
 (0)