chore(connlib): unit tests for additional fields in messages (#4337)

Fixes #4308
This commit is contained in:
Gabi
2024-03-27 23:14:02 -03:00
committed by GitHub
parent f879b430e4
commit ee34621ee8
2 changed files with 308 additions and 0 deletions

View File

@@ -297,6 +297,199 @@ mod test {
assert_eq!(m, ingress_message);
}
#[test]
fn messages_ignore_additional_fields() {
let m = PhoenixMessage::new_message(
"client",
IngressMessages::Init(InitClient {
interface: Interface {
ipv4: "100.72.112.111".parse().unwrap(),
ipv6: "fd00:2021:1111::13:efb9".parse().unwrap(),
upstream_dns: vec![],
},
resources: vec![
ResourceDescription::Cidr(ResourceDescriptionCidr {
id: "73037362-715d-4a83-a749-f18eadd970e6".parse().unwrap(),
address: "172.172.0.0/16".parse().unwrap(),
name: "172.172.0.0/16".to_string(),
}),
ResourceDescription::Dns(ResourceDescriptionDns {
id: "03000143-e25e-45c7-aafb-144990e57dcd".parse().unwrap(),
address: "gitlab.mycorp.com".to_string(),
name: "gitlab.mycorp.com".to_string(),
}),
],
}),
None,
);
let message = r#"{
"event": "init",
"payload": {
"interface": {
"ipv4": "100.72.112.111",
"ipv6": "fd00:2021:1111::13:efb9",
"upstream_dns": [],
"extra_config": "foo"
},
"resources": [
{
"address": "172.172.0.0/16",
"id": "73037362-715d-4a83-a749-f18eadd970e6",
"name": "172.172.0.0/16",
"type": "cidr",
"not": "relevant"
},
{
"address": "gitlab.mycorp.com",
"id": "03000143-e25e-45c7-aafb-144990e57dcd",
"ipv4": "100.126.44.50",
"ipv6": "fd00:2021:1111::e:7758",
"name": "gitlab.mycorp.com",
"type": "dns",
"not": "relevant"
}
]
},
"ref": null,
"topic": "client"
}"#;
let ingress_message: PhoenixMessage<IngressMessages, ReplyMessages> =
serde_json::from_str(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn messages_ignore_additional_bool_fields() {
let m = PhoenixMessage::new_message(
"client",
IngressMessages::Init(InitClient {
interface: Interface {
ipv4: "100.72.112.111".parse().unwrap(),
ipv6: "fd00:2021:1111::13:efb9".parse().unwrap(),
upstream_dns: vec![],
},
resources: vec![],
}),
None,
);
let message = r#"{
"event": "init",
"payload": {
"interface": {
"ipv4": "100.72.112.111",
"ipv6": "fd00:2021:1111::13:efb9",
"upstream_dns": [],
"additional": true
},
"resources": []
},
"ref": null,
"topic": "client"
}"#;
let ingress_message: PhoenixMessage<IngressMessages, ReplyMessages> =
serde_json::from_str(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn messages_ignore_additional_number_fields() {
let m = PhoenixMessage::new_message(
"client",
IngressMessages::Init(InitClient {
interface: Interface {
ipv4: "100.72.112.111".parse().unwrap(),
ipv6: "fd00:2021:1111::13:efb9".parse().unwrap(),
upstream_dns: vec![],
},
resources: vec![],
}),
None,
);
let message = r#"{
"event": "init",
"payload": {
"interface": {
"ipv4": "100.72.112.111",
"ipv6": "fd00:2021:1111::13:efb9",
"upstream_dns": [],
"additional": 0.3
},
"resources": []
},
"ref": null,
"topic": "client"
}"#;
let ingress_message: PhoenixMessage<IngressMessages, ReplyMessages> =
serde_json::from_str(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn messages_ignore_additional_object_fields() {
let m = PhoenixMessage::new_message(
"client",
IngressMessages::Init(InitClient {
interface: Interface {
ipv4: "100.72.112.111".parse().unwrap(),
ipv6: "fd00:2021:1111::13:efb9".parse().unwrap(),
upstream_dns: vec![],
},
resources: vec![],
}),
None,
);
let message = r#"{
"event": "init",
"payload": {
"interface": {
"ipv4": "100.72.112.111",
"ipv6": "fd00:2021:1111::13:efb9",
"upstream_dns": [],
"additional": { "ignored": "field" }
},
"resources": []
},
"ref": null,
"topic": "client"
}"#;
let ingress_message: PhoenixMessage<IngressMessages, ReplyMessages> =
serde_json::from_str(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn messages_ignore_additional_array_fields() {
let m = PhoenixMessage::new_message(
"client",
IngressMessages::Init(InitClient {
interface: Interface {
ipv4: "100.72.112.111".parse().unwrap(),
ipv6: "fd00:2021:1111::13:efb9".parse().unwrap(),
upstream_dns: vec![],
},
resources: vec![],
}),
None,
);
let message = r#"{
"event": "init",
"payload": {
"interface": {
"ipv4": "100.72.112.111",
"ipv6": "fd00:2021:1111::13:efb9",
"upstream_dns": [],
"additional": [true, false]
},
"resources": []
},
"ref": null,
"topic": "client"
}"#;
let ingress_message: PhoenixMessage<IngressMessages, ReplyMessages> =
serde_json::from_str(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn list_relays_message() {
let m = PhoenixMessage::<EgressMessages, ()>::new_message(

View File

@@ -202,6 +202,7 @@ mod test {
// TODO: We are just testing we can deserialize for now.
let _: PhoenixMessage<IngressMessages, ()> = serde_json::from_str(message).unwrap();
}
#[test]
fn init_phoenix_message() {
let m = InitMessage::Init(InitGateway {
@@ -220,4 +221,118 @@ mod test {
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn additional_fields_are_ignore() {
let m = InitMessage::Init(InitGateway {
interface: Interface {
ipv4: "100.115.164.78".parse().unwrap(),
ipv6: "fd00:2021:1111::2c:f6ab".parse().unwrap(),
upstream_dns: vec![],
},
config: Config {
ipv4_masquerade_enabled: true,
ipv6_masquerade_enabled: true,
},
});
let message = r#"{"event":"init","ref":null,"topic":"gateway","irrelevant":"field","payload":{"more":"info","interface":{"ipv6":"fd00:2021:1111::2c:f6ab","ipv4":"100.115.164.78"},"config":{"ipv4_masquerade_enabled":true,"ipv6_masquerade_enabled":true,"ignored":"field"}}}"#;
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn additional_null_fields_are_ignored() {
let m = InitMessage::Init(InitGateway {
interface: Interface {
ipv4: "100.115.164.78".parse().unwrap(),
ipv6: "fd00:2021:1111::2c:f6ab".parse().unwrap(),
upstream_dns: vec![],
},
config: Config {
ipv4_masquerade_enabled: true,
ipv6_masquerade_enabled: true,
},
});
let message = r#"{"event":"init","ref":null,"topic":"gateway","payload":{"additional":null,"interface":{"ipv6":"fd00:2021:1111::2c:f6ab","ipv4":"100.115.164.78"},"config":{"ipv4_masquerade_enabled":true,"ipv6_masquerade_enabled":true}}}"#;
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn additional_number_fields_are_ignored() {
let m = InitMessage::Init(InitGateway {
interface: Interface {
ipv4: "100.115.164.78".parse().unwrap(),
ipv6: "fd00:2021:1111::2c:f6ab".parse().unwrap(),
upstream_dns: vec![],
},
config: Config {
ipv4_masquerade_enabled: true,
ipv6_masquerade_enabled: true,
},
});
let message = r#"{"event":"init","ref":null,"topic":"gateway","payload":{"additional":0.3,"interface":{"ipv6":"fd00:2021:1111::2c:f6ab","ipv4":"100.115.164.78"},"config":{"ipv4_masquerade_enabled":true,"ipv6_masquerade_enabled":true}}}"#;
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn additional_boolean_fields_are_ignored() {
let m = InitMessage::Init(InitGateway {
interface: Interface {
ipv4: "100.115.164.78".parse().unwrap(),
ipv6: "fd00:2021:1111::2c:f6ab".parse().unwrap(),
upstream_dns: vec![],
},
config: Config {
ipv4_masquerade_enabled: true,
ipv6_masquerade_enabled: true,
},
});
let message = r#"{"event":"init","ref":null,"topic":"gateway","payload":{"additional":true,"interface":{"ipv6":"fd00:2021:1111::2c:f6ab","ipv4":"100.115.164.78"},"config":{"ipv4_masquerade_enabled":true,"ipv6_masquerade_enabled":true}}}"#;
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn additional_object_fields_are_ignored() {
let m = InitMessage::Init(InitGateway {
interface: Interface {
ipv4: "100.115.164.78".parse().unwrap(),
ipv6: "fd00:2021:1111::2c:f6ab".parse().unwrap(),
upstream_dns: vec![],
},
config: Config {
ipv4_masquerade_enabled: true,
ipv6_masquerade_enabled: true,
},
});
let message = r#"{"event":"init","ref":null,"topic":"gateway","payload":{"additional":{"ignored":"field"},"interface":{"ipv6":"fd00:2021:1111::2c:f6ab","ipv4":"100.115.164.78"},"config":{"ipv4_masquerade_enabled":true,"ipv6_masquerade_enabled":true}}}"#;
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
#[test]
fn additional_array_fields_are_ignored() {
let m = InitMessage::Init(InitGateway {
interface: Interface {
ipv4: "100.115.164.78".parse().unwrap(),
ipv6: "fd00:2021:1111::2c:f6ab".parse().unwrap(),
upstream_dns: vec![],
},
config: Config {
ipv4_masquerade_enabled: true,
ipv6_masquerade_enabled: true,
},
});
let message = r#"{"event":"init","ref":null,"topic":"gateway","payload":{"additional":[true,false],"interface":{"ipv6":"fd00:2021:1111::2c:f6ab","ipv4":"100.115.164.78"},"config":{"ipv4_masquerade_enabled":true,"ipv6_masquerade_enabled":true}}}"#;
let ingress_message = serde_json::from_str::<InitMessage<InitGateway>>(message).unwrap();
assert_eq!(m, ingress_message);
}
}