From fbb522b815c97e1b281b0cd317ac11f9943857f4 Mon Sep 17 00:00:00 2001 From: Bruce Flynn Date: Mon, 29 Jan 2024 09:19:14 -0600 Subject: [PATCH] Test against known md5 of output --- Cargo.toml | 3 ++ src/spacepacket.rs | 7 +-- tests/fixtures/snpp_synchronized_cadus.txt | 58 ++++++++++++++++++++++ tests/integration_tests.rs | 10 ++++ 4 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 tests/fixtures/snpp_synchronized_cadus.txt diff --git a/Cargo.toml b/Cargo.toml index a9baa4b..1d86cfa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,4 +26,7 @@ name = "ccsds" path = "src/lib.rs" [dev-dependencies] +hex = "0.4.3" +md-5 = "0.10.6" rand = "0.8.5" +tempfile = "3.9.0" diff --git a/src/spacepacket.rs b/src/spacepacket.rs index e3335be..2428d62 100644 --- a/src/spacepacket.rs +++ b/src/spacepacket.rs @@ -504,7 +504,7 @@ impl<'a> Iterator for FramedPacketIter<'a> { if tracker.cache.len() < PrimaryHeader::LEN { continue 'next_frame; // need more frame data for this vcid } - let header = PrimaryHeader::decode(&tracker.cache).unwrap(); + let mut header = PrimaryHeader::decode(&tracker.cache).unwrap(); let mut need = header.len_minus1 as usize + 1 + PrimaryHeader::LEN; if tracker.cache.len() < need { continue; // need more frame data for this vcid @@ -514,16 +514,17 @@ impl<'a> Iterator for FramedPacketIter<'a> { // Grab data we need and update the cache let (data, tail) = tracker.cache.split_at(need); let packet = Packet { - header, + header: PrimaryHeader::decode(&data)?, data: data.to_vec(), }; + println!("{:?}", packet.header); tracker.cache = tail.to_vec(); self.ready.push_back(packet); if tracker.cache.len() < PrimaryHeader::LEN { break; } - let header = PrimaryHeader::decode(&tracker.cache).unwrap(); + header = PrimaryHeader::decode(&tracker.cache).unwrap(); need = header.len_minus1 as usize + 1 + PrimaryHeader::LEN; if tracker.cache.len() < need { break; diff --git a/tests/fixtures/snpp_synchronized_cadus.txt b/tests/fixtures/snpp_synchronized_cadus.txt new file mode 100644 index 0000000..9ee2274 --- /dev/null +++ b/tests/fixtures/snpp_synchronized_cadus.txt @@ -0,0 +1,58 @@ + +## From dldecode: +``` +./dldecode -i snpp_synchronized_cadus.dat -s 157 -o packets.bin +``` + +``` +CADU Decoder + Count: 65 + Bytes: 66560 + RSCorrected: 0 + RSUncorrectable: 0 + +Frame Decoder + Count: 65 + Bytes: 57980 + InvalidCount: 0 + SequenceErr: 1 + Missing: 1 + + VCID: 16 Count: 65 Bytes: 57980 SequenceErr: 1 Missing: 1 + +Packet Decoder + Count: 12 + Bytes: 53098 + InvalidCount: 0 + SequenceErr: 1 + Missing: 1 + + APID 802 Count: 1 Bytes: 3006 SequenceErr: 0 Missing: 0 + APID 803 Count: 11 Bytes: 50092 SequenceErr: 1 Missing: 1 + +Total Frame Bytes 66560 +``` + +## From edosl0util +``` +[, + , + , + , + , + , + , + , + , + , + ] +``` +Note that APID 803 is missing sequence number 9860. + + +## Checksum +The output checksum: +``` +5e11051d86c46ddc3500904c99bbe978 +``` diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 836ba89..e43d688 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -1,4 +1,5 @@ use ccsds::*; +use md5::{Digest, Md5}; use std::fs; use std::io::Error as IoError; use std::path::PathBuf; @@ -75,6 +76,15 @@ fn full_decode() { decode_framed_packets(157, Box::new(frames.into_iter()), 0, 0).collect(); assert_eq!(packets.len(), 12, "expected packet count doesn't match"); + let mut hasher = Md5::new(); + packets.iter().for_each(|p| hasher.update(&p.data)); + let result = hasher.finalize(); + assert_eq!( + result[..], + hex::decode("5e11051d86c46ddc3500904c99bbe978").expect("bad fixture checksum"), + "output checksum does not match fixture file checksum" + ); + // The VIIRS sensor on Suomi-NPP uses packet grouping, so here we collect the packets // into their associated groups. let groups: Vec = collect_packet_groups(Box::new(packets.into_iter()))