Skip to content

Commit

Permalink
Test against known md5 of output
Browse files Browse the repository at this point in the history
  • Loading branch information
bmflynn committed Jan 29, 2024
1 parent 1ba5d4c commit fbb522b
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 3 deletions.
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
7 changes: 4 additions & 3 deletions src/spacepacket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down
58 changes: 58 additions & 0 deletions tests/fixtures/snpp_synchronized_cadus.txt
Original file line number Diff line number Diff line change
@@ -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
```
[<Packet apid=802 seqid=9875 stamp=None size=3006 offset=0>,
<Packet apid=803 seqid=9859 stamp=2016-02-10 16:13:34.924259 size=180 offset
<Packet apid=803 seqid=9861 stamp=None size=4090 offset=3186>,
<Packet apid=803 seqid=9862 stamp=None size=5098 offset=7276>,
<Packet apid=803 seqid=9863 stamp=None size=5058 offset=12374>,
<Packet apid=803 seqid=9864 stamp=None size=5026 offset=17432>,
<Packet apid=803 seqid=9865 stamp=None size=5122 offset=22458>,
<Packet apid=803 seqid=9866 stamp=None size=5090 offset=27580>,
<Packet apid=803 seqid=9867 stamp=None size=5106 offset=32670>,
<Packet apid=803 seqid=9868 stamp=None size=5130 offset=37776>,
<Packet apid=803 seqid=9869 stamp=None size=5074 offset=42906>,
<Packet apid=803 seqid=9870 stamp=None size=5118 offset=47980>]
```
Note that APID 803 is missing sequence number 9860.


## Checksum
The output checksum:
```
5e11051d86c46ddc3500904c99bbe978
```
10 changes: 10 additions & 0 deletions tests/integration_tests.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use ccsds::*;
use md5::{Digest, Md5};
use std::fs;
use std::io::Error as IoError;
use std::path::PathBuf;
Expand Down Expand Up @@ -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<PacketGroup> = collect_packet_groups(Box::new(packets.into_iter()))
Expand Down

0 comments on commit fbb522b

Please sign in to comment.