refactor(config): generate scalar validation boundaries

This commit is contained in:
Onur Özkan committed 2026-08-09 22:45:38 +03:00
1 parent afafd126d7
commit 8134235f48
29 files changed
+1008 -480

No files matched your search

+8 -7
View File
@@ -8,8 +8,8 @@ use std::{
use kaptan_config::{Generation, ProfileStore};
use kaptan_flight_config::{
CandidateProfile, CborError, MAXIMUM_CANDIDATE_BYTES, VehicleProfile, decode_candidate,
encode_candidate,
CandidateProfile, CborEncodeError, CborError, MAXIMUM_CANDIDATE_BYTES, VehicleProfile,
decode_candidate, encode_candidate,
};
use kaptan_log::KaptanError;
@@ -134,12 +134,13 @@ fn write_candidate(
candidate: CandidateProfile,
generation: Generation,
) -> Result<(), FileStoreError> {
candidate
.validate_against(&CAPABILITIES)
.map_err(CborError::InvalidProfile)
.map_err(FileStoreError::Cbor)?;
let mut writer = minicbor::encode::write::Cursor::new([0_u8; MAXIMUM_CANDIDATE_BYTES]);
encode_candidate(candidate, &mut writer).map_err(|_| FileStoreError::Encode)?;
encode_candidate(candidate, &CAPABILITIES, &mut writer).map_err(|error| match error {
CborEncodeError::InvalidProfile(violation) => {
FileStoreError::Cbor(CborError::InvalidProfile(violation))
}
CborEncodeError::Encode(_) => FileStoreError::Encode,
})?;
let length = writer.position();
let bytes = writer.into_inner();
let mut envelope = minicbor::encode::write::Cursor::new([0_u8; MAXIMUM_CANDIDATE_BYTES + 64]);
+5 -5
View File
@@ -1,6 +1,6 @@
use std::fs;
use kaptan_config::{Generation, ProfileStore};
use kaptan_config::{ConfigModel, Generation, ProfileStore};
use kaptan_config_mavlink::{
Authorized, ConfigCommand, ResultKind, ServiceResponse, SnapshotImporter,
};
@@ -87,7 +87,7 @@ fn host_store_round_trips_a_complete_validated_snapshot() {
Err(CborError::Malformed)
));
let (_, candidate) = store.load().unwrap().expect("persisted candidate");
assert!(candidate.validate_against(&CAPABILITIES).is_ok());
assert!(candidate.validate(&CAPABILITIES).is_ok());
assert_eq!(
store.persist(&CandidateProfile::default()).unwrap(),
@@ -111,13 +111,13 @@ fn host_store_round_trips_a_complete_validated_snapshot() {
fn sitl_snapshot_importer_uses_the_real_schema_and_capabilities() {
let candidate = CandidateProfile::default();
let mut writer = minicbor::encode::write::Cursor::new([0_u8; MAXIMUM_CANDIDATE_BYTES]);
encode_candidate(candidate, &mut writer).unwrap();
encode_candidate(candidate, &CAPABILITIES, &mut writer).unwrap();
let length = writer.position();
let bytes = writer.into_inner();
let imported = SitlSnapshotImporter
.decode(&bytes[..length])
.expect("valid current candidate import");
assert!(imported.validate_against(&CAPABILITIES).is_ok());
assert!(imported.validate(&CAPABILITIES).is_ok());
}
#[test]
@@ -138,7 +138,7 @@ fn sitl_service_imports_a_real_cbor_candidate_only_into_its_transaction() {
},
)));
let mut writer = minicbor::encode::write::Cursor::new([0_u8; MAXIMUM_CANDIDATE_BYTES]);
encode_candidate(CandidateProfile::default(), &mut writer).unwrap();
encode_candidate(CandidateProfile::default(), &CAPABILITIES, &mut writer).unwrap();
let length = writer.position();
assert!(length <= 192);
let bytes = writer.into_inner();