use crate::region::Region;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum ConnectorIntent {
AllIngress,
HttpIngress,
ShellIngress,
Egress,
}
impl ConnectorIntent {
pub const ALL: [ConnectorIntent; 4] = [
ConnectorIntent::AllIngress,
ConnectorIntent::HttpIngress,
ConnectorIntent::ShellIngress,
ConnectorIntent::Egress,
];
pub fn wire_name(self) -> &'static str {
match self {
ConnectorIntent::AllIngress => "ALL_INGRESS",
ConnectorIntent::HttpIngress => "HTTP_INGRESS",
ConnectorIntent::ShellIngress => "SHELL_INGRESS",
ConnectorIntent::Egress => "INTERNET_EGRESS",
}
}
pub fn arn(self, region: &Region) -> String {
format!(
"arn:aws:lambda:{}:aws:network-connector:aws-network-connector:{}",
region.as_str(),
self.wire_name()
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn the_ingress_arn_is_the_measured_literal() {
assert_eq!(
ConnectorIntent::AllIngress.arn(&Region::UsEast1),
"arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:ALL_INGRESS"
);
}
#[test]
fn the_egress_arn_uses_the_internet_egress_wire_name() {
assert_eq!(
ConnectorIntent::Egress.arn(&Region::UsEast1),
"arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:INTERNET_EGRESS"
);
}
#[test]
fn the_arn_carries_the_request_region_for_every_region() {
for region in crate::region::MICROVM_REGIONS {
let arn = ConnectorIntent::AllIngress.arn(®ion);
assert!(
arn.contains(&format!(":lambda:{}:aws:", region.as_str())),
"{arn}"
);
}
let unlisted = Region::unlisted("me-south-1");
assert!(
ConnectorIntent::Egress
.arn(&unlisted)
.contains(":lambda:me-south-1:aws:"),
"the escape hatch still derives an ARN for its own region"
);
}
#[test]
fn shell_ingress_is_one_deliberate_intent() {
assert_eq!(
ConnectorIntent::ALL.len(),
4,
"four intents, and shell is deliberately one of them"
);
let shells: Vec<ConnectorIntent> = ConnectorIntent::ALL
.into_iter()
.filter(|intent| intent.wire_name().contains("SHELL"))
.collect();
assert_eq!(
shells,
vec![ConnectorIntent::ShellIngress],
"exactly one intent names the shell, and it is the one that says so"
);
assert_eq!(
ConnectorIntent::ShellIngress.arn(&Region::UsEast1),
"arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:SHELL_INGRESS"
);
}
#[test]
fn the_http_ingress_arn_is_the_measured_literal() {
assert_eq!(
ConnectorIntent::HttpIngress.arn(&Region::UsEast1),
"arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:HTTP_INGRESS"
);
}
#[test]
fn no_two_intents_render_the_same_arn() {
let arns: Vec<String> = ConnectorIntent::ALL
.iter()
.map(|intent| intent.arn(&Region::EuWest1))
.collect();
for (i, a) in arns.iter().enumerate() {
for b in &arns[i + 1..] {
assert_ne!(a, b);
}
}
assert!(!arns[0].contains("INTERNET"), "{}", arns[0]);
}
#[test]
fn every_derived_arn_fits_the_models_connector_bounds() {
for region in crate::region::MICROVM_REGIONS {
for intent in ConnectorIntent::ALL {
let arn = intent.arn(®ion);
assert!((1..=2048).contains(&arn.len()), "{arn}");
assert!(arn.starts_with("arn:aws:lambda:"), "{arn}");
}
}
}
}