147 lines
4.3 KiB
Rust
147 lines
4.3 KiB
Rust
use rpki::rtr::error_type::{
|
|
ERROR_CODE_VERSION_SPECS, ErrorCode, ErrorCodeDisposition, ErrorCodeVersionSpec,
|
|
};
|
|
|
|
#[test]
|
|
fn error_code_version_specs_match_rfc_and_draft_table() {
|
|
use ErrorCode::*;
|
|
use ErrorCodeDisposition::*;
|
|
|
|
let expected = [
|
|
ErrorCodeVersionSpec {
|
|
code: CorruptData,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: InternalError,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: NoDataAvailable,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: NonFatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: InvalidRequest,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: UnsupportedProtocolVersion,
|
|
min_version: 0,
|
|
max_version: 1,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: UnsupportedProtocolVersion,
|
|
min_version: 2,
|
|
max_version: 2,
|
|
disposition: NonFatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: UnsupportedPduType,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: WithdrawalOfUnknownRecord,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: DuplicateAnnouncement,
|
|
min_version: 0,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: UnexpectedProtocolVersion,
|
|
min_version: 1,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: AspaProviderListError,
|
|
min_version: 2,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: TransportFailed,
|
|
min_version: 2,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: OrderingError,
|
|
min_version: 2,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: CacheRestart,
|
|
min_version: 2,
|
|
max_version: 2,
|
|
disposition: NonFatal,
|
|
},
|
|
ErrorCodeVersionSpec {
|
|
code: CacheShutdown,
|
|
min_version: 2,
|
|
max_version: 2,
|
|
disposition: Fatal,
|
|
},
|
|
];
|
|
|
|
assert_eq!(ERROR_CODE_VERSION_SPECS, &expected);
|
|
}
|
|
|
|
#[test]
|
|
fn error_code_definition_scope_is_version_sensitive() {
|
|
assert!(ErrorCode::DuplicateAnnouncement.is_defined_in_version(0));
|
|
assert!(!ErrorCode::UnexpectedProtocolVersion.is_defined_in_version(0));
|
|
assert!(ErrorCode::UnexpectedProtocolVersion.is_defined_in_version(1));
|
|
assert!(!ErrorCode::AspaProviderListError.is_defined_in_version(1));
|
|
assert!(ErrorCode::CacheShutdown.is_defined_in_version(2));
|
|
}
|
|
|
|
#[test]
|
|
fn error_code_disposition_is_version_sensitive() {
|
|
assert_eq!(
|
|
ErrorCode::NoDataAvailable.disposition_in_version(0),
|
|
Some(ErrorCodeDisposition::NonFatal)
|
|
);
|
|
assert_eq!(
|
|
ErrorCode::UnsupportedProtocolVersion.disposition_in_version(1),
|
|
Some(ErrorCodeDisposition::Fatal)
|
|
);
|
|
assert_eq!(
|
|
ErrorCode::UnsupportedProtocolVersion.disposition_in_version(2),
|
|
Some(ErrorCodeDisposition::NonFatal)
|
|
);
|
|
assert_eq!(
|
|
ErrorCode::CacheRestart.disposition_in_version(2),
|
|
Some(ErrorCodeDisposition::NonFatal)
|
|
);
|
|
assert_eq!(ErrorCode::CacheRestart.disposition_in_version(1), None);
|
|
assert_eq!(
|
|
ErrorCode::CacheShutdown.disposition_in_version(2),
|
|
Some(ErrorCodeDisposition::Fatal)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn raw_error_code_registry_mapping_accepts_defined_codes_only() {
|
|
assert_eq!(ErrorCode::try_from(12), Ok(ErrorCode::CacheRestart));
|
|
assert_eq!(ErrorCode::try_from(13), Ok(ErrorCode::CacheShutdown));
|
|
assert!(ErrorCode::try_from(14).is_err());
|
|
assert!(ErrorCode::try_from(255).is_err());
|
|
}
|