add dockerfile

This commit is contained in:
xiuting.xu
2026-04-10 14:29:40 +08:00
parent 23cdad095d
commit c1d3112a45
10 changed files with 257 additions and 18 deletions

View File

@@ -20,9 +20,13 @@ fn sample_ski() -> [u8; 20] {
]
}
fn sample_ski_b64() -> String {
STANDARD_NO_PAD.encode(sample_ski())
}
#[test]
fn parses_rfc8416_v1_slurm() {
let ski_hex = hex::encode(sample_ski());
let ski_b64 = sample_ski_b64();
let router_public_key = STANDARD_NO_PAD.encode(sample_spki());
let json = format!(
r#"{{
@@ -32,7 +36,7 @@ fn parses_rfc8416_v1_slurm() {
{{ "prefix": "192.0.2.0/24", "asn": 64496, "comment": "drop roa" }}
],
"bgpsecFilters": [
{{ "asn": 64497, "SKI": "{ski_hex}" }}
{{ "asn": 64497, "SKI": "{ski_b64}" }}
]
}},
"locallyAddedAssertions": {{
@@ -40,7 +44,7 @@ fn parses_rfc8416_v1_slurm() {
{{ "prefix": "198.51.100.0/24", "asn": 64500, "maxPrefixLength": 24 }}
],
"bgpsecAssertions": [
{{ "asn": 64501, "SKI": "{ski_hex}", "routerPublicKey": "{router_public_key}" }}
{{ "asn": 64501, "SKI": "{ski_b64}", "routerPublicKey": "{router_public_key}" }}
]
}}
}}"#
@@ -145,7 +149,7 @@ fn applies_filters_before_assertions_and_excludes_duplicates() {
let ski = Ski::from_bytes(sample_ski());
let spki = sample_spki();
let spki_b64 = STANDARD_NO_PAD.encode(&spki);
let ski_hex = hex::encode(sample_ski());
let ski_b64 = sample_ski_b64();
let json = format!(
r#"{{
"slurmVersion": 2,
@@ -154,7 +158,7 @@ fn applies_filters_before_assertions_and_excludes_duplicates() {
{{ "prefix": "192.0.2.0/24", "asn": 64496 }}
],
"bgpsecFilters": [
{{ "SKI": "{ski_hex}" }}
{{ "SKI": "{ski_b64}" }}
],
"aspaFilters": [
{{ "customerAsn": 64496 }}
@@ -166,7 +170,7 @@ fn applies_filters_before_assertions_and_excludes_duplicates() {
{{ "prefix": "198.51.100.0/24", "asn": 64500, "maxPrefixLength": 24 }}
],
"bgpsecAssertions": [
{{ "asn": 64501, "SKI": "{ski_hex}", "routerPublicKey": "{spki_b64}" }}
{{ "asn": 64501, "SKI": "{ski_b64}", "routerPublicKey": "{spki_b64}" }}
],
"aspaAssertions": [
{{ "customerAsn": 64510, "providerAsns": [64511, 64512] }}
@@ -216,6 +220,55 @@ fn applies_filters_before_assertions_and_excludes_duplicates() {
)));
}
#[test]
fn rejects_hex_encoded_ski_and_aspa_customer_in_providers() {
let ski_hex = hex::encode(sample_ski());
let router_public_key = STANDARD_NO_PAD.encode(sample_spki());
let invalid_ski = format!(
r#"{{
"slurmVersion": 1,
"validationOutputFilters": {{
"prefixFilters": [],
"bgpsecFilters": [
{{ "SKI": "{ski_hex}" }}
]
}},
"locallyAddedAssertions": {{
"prefixAssertions": [],
"bgpsecAssertions": [
{{ "asn": 64501, "SKI": "{ski_hex}", "routerPublicKey": "{router_public_key}" }}
]
}}
}}"#
);
let ski_err = SlurmFile::from_slice(invalid_ski.as_bytes()).unwrap_err();
let ski_err_text = ski_err.to_string();
assert!(
ski_err_text.contains("invalid SKI base64")
|| ski_err_text.contains("SKI must be exactly 20 bytes")
);
let invalid_aspa = r#"{
"slurmVersion": 2,
"validationOutputFilters": {
"prefixFilters": [],
"bgpsecFilters": [],
"aspaFilters": []
},
"locallyAddedAssertions": {
"prefixAssertions": [],
"bgpsecAssertions": [],
"aspaAssertions": [
{ "customerAsn": 64500, "providerAsns": [64500, 64501] }
]
}
}"#;
let aspa_err = SlurmFile::from_slice(invalid_aspa.as_bytes()).unwrap_err();
assert!(aspa_err
.to_string()
.contains("providerAsns must not contain customerAsn"));
}
#[test]
fn merges_multiple_slurm_files_without_conflict() {
let a = r#"{