summaryrefslogtreecommitdiffstats
path: root/openpgp/src/packet/user_attribute.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openpgp/src/packet/user_attribute.rs')
-rw-r--r--openpgp/src/packet/user_attribute.rs64
1 files changed, 62 insertions, 2 deletions
diff --git a/openpgp/src/packet/user_attribute.rs b/openpgp/src/packet/user_attribute.rs
index 0e1505d3..03703c8c 100644
--- a/openpgp/src/packet/user_attribute.rs
+++ b/openpgp/src/packet/user_attribute.rs
@@ -266,12 +266,56 @@ mod tests {
quickcheck! {
fn roundtrip(p: UserAttribute) -> bool {
- let q = UserAttribute::from_bytes(&p.to_vec().unwrap()).unwrap();
+ let buf = p.to_vec().unwrap();
+ assert_eq!(p.serialized_len(), buf.len());
+ let q = UserAttribute::from_bytes(&buf).unwrap();
assert_eq!(p, q);
true
}
}
+ quickcheck! {
+ fn roundtrip_subpacket(sp: Subpacket) -> bool {
+ let value = sp.to_vec().unwrap();
+ assert_eq!(sp.serialized_len(), value.len());
+ let ua = UserAttribute {
+ common: Default::default(),
+ value,
+ };
+ let buf = ua.to_vec().unwrap();
+ let q = UserAttribute::from_bytes(&buf).unwrap();
+ let subpackets = q.subpackets().collect::<Vec<_>>();
+ assert_eq!(subpackets.len(), 1);
+ assert_eq!(&sp, subpackets[0].as_ref().unwrap());
+ true
+ }
+ }
+
+ quickcheck! {
+ fn roundtrip_image(img: Image) -> bool {
+ let mut body = img.to_vec().unwrap();
+ assert_eq!(img.serialized_len(), body.len());
+ let mut value =
+ BodyLength::Full(1 + body.len() as u32).to_vec().unwrap();
+ value.push(1); // Image subpacket tag.
+ value.append(&mut body);
+ let ua = UserAttribute {
+ common: Default::default(),
+ value,
+ };
+ let buf = ua.to_vec().unwrap();
+ let q = UserAttribute::from_bytes(&buf).unwrap();
+ let subpackets = q.subpackets().collect::<Vec<_>>();
+ assert_eq!(subpackets.len(), 1);
+ if let Ok(Subpacket::Image(i)) = &subpackets[0] {
+ assert_eq!(&img, i);
+ } else {
+ panic!("expected image subpacket, got {:?}", subpackets[0]);
+ }
+ true
+ }
+ }
+
#[test]
fn image() {
use crate::Packet;
@@ -300,11 +344,27 @@ ABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z
};
assert_eq!(subpackets.len(), 1);
if let Ok(Subpacket::Image(Image::JPEG(img))) = &subpackets[0] {
- assert_eq!(img.len(), 539);
+ assert_eq!(img.len(), 539 /* Image data */);
assert_eq!(&img[6..10], b"JFIF");
assert_eq!(&img[24..41], b"Created with GIMP");
} else {
panic!("Expected JPEG, got {:?}", &subpackets[0]);
}
+
+ if let Ok(Subpacket::Image(img)) = &subpackets[0] {
+ let buf = img.to_vec().unwrap();
+ assert_eq!(buf.len(), 539 + 16 /* Image header */);
+ assert_eq!(img.serialized_len(), 539 + 16 /* Image header */);
+ } else {
+ unreachable!("decomposed fine before");
+ }
+
+ if let Ok(img) = &subpackets[0] {
+ let buf = img.to_vec().unwrap();
+ assert_eq!(buf.len(), 539 + 16 + 3 /* Subpacket header */);
+ assert_eq!(img.serialized_len(), 539 + 16 + 3 /* Subpacket header */);
+ } else {
+ unreachable!("decomposed fine before");
+ }
}
}