diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2019-09-03 12:24:29 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2019-09-03 12:36:04 +0200 |
commit | 7b9035fac61467482de683f890eb3c9971e955db (patch) | |
tree | 584024194ded707adaf620af6fc817ba39b93294 | |
parent | 7901c7ee84e7863c5227ded5f29a36beddbcecb8 (diff) |
openpgp: Assert that central types are Send and Sync.
- Add compile-time assertions that public types like Packet, TPK,
Message... can be send across thread boundaries, and can be
safely accessed from multiple threads.
- Fixes #334.
-rw-r--r-- | openpgp/src/fingerprint.rs | 7 | ||||
-rw-r--r-- | openpgp/src/keyid.rs | 6 | ||||
-rw-r--r-- | openpgp/src/message/mod.rs | 6 | ||||
-rw-r--r-- | openpgp/src/packet/mod.rs | 11 | ||||
-rw-r--r-- | openpgp/src/packet_pile.rs | 6 | ||||
-rw-r--r-- | openpgp/src/tpk/mod.rs | 6 |
6 files changed, 42 insertions, 0 deletions
diff --git a/openpgp/src/fingerprint.rs b/openpgp/src/fingerprint.rs index a12ec118..309313be 100644 --- a/openpgp/src/fingerprint.rs +++ b/openpgp/src/fingerprint.rs @@ -191,4 +191,11 @@ Charlie Delta Echo Foxtrot Zero One Two Three Four Five Six Seven"; assert_eq!(fpr.to_icao(), expected); } + + #[test] + fn fingerprint_is_send_and_sync() { + fn f<T: Send + Sync>(_: T) {} + f(Fingerprint::from_hex( + "0123 4567 89AB CDEF 0123 4567 89AB CDEF 0123 4567").unwrap()); + } } diff --git a/openpgp/src/keyid.rs b/openpgp/src/keyid.rs index 2e77c962..275599f9 100644 --- a/openpgp/src/keyid.rs +++ b/openpgp/src/keyid.rs @@ -215,4 +215,10 @@ mod test { assert_match!(KeyID::Invalid(_) = KeyID::from_hex("0x587DAEF1").unwrap()); } + + #[test] + fn keyid_is_send_and_sync() { + fn f<T: Send + Sync>(_: T) {} + f(KeyID::from_hex("89AB CDEF 0123 4567").unwrap()); + } } diff --git a/openpgp/src/message/mod.rs b/openpgp/src/message/mod.rs index 30f8268d..a2f8b7ce 100644 --- a/openpgp/src/message/mod.rs +++ b/openpgp/src/message/mod.rs @@ -1109,4 +1109,10 @@ mod tests { let message = Message::from_packets(packets.clone()); assert!(message.is_ok(), "{:#?}", message); } + + #[test] + fn message_is_send_and_sync() { + fn f<T: Send + Sync>(_: T) {} + f(Message::from_packets(vec![])); + } } diff --git a/openpgp/src/packet/mod.rs b/openpgp/src/packet/mod.rs index 1c457fac..23fa16c0 100644 --- a/openpgp/src/packet/mod.rs +++ b/openpgp/src/packet/mod.rs @@ -973,3 +973,14 @@ impl DerefMut for AED { } } } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn packet_is_send_and_sync() { + fn f<T: Send + Sync>(_: T) {} + f(Packet::Marker(Default::default())); + } +} diff --git a/openpgp/src/packet_pile.rs b/openpgp/src/packet_pile.rs index 275c0dba..4d6e29fa 100644 --- a/openpgp/src/packet_pile.rs +++ b/openpgp/src/packet_pile.rs @@ -861,4 +861,10 @@ mod test { assert!(pile.replace(&[ 0, 0 ], 0, Vec::new()).is_ok()); assert!(pile.replace(&[ 0, 1 ], 0, Vec::new()).is_err()); } + + #[test] + fn packet_pile_is_send_and_sync() { + fn f<T: Send + Sync>(_: T) {} + f(PacketPile::from(vec![])); + } } diff --git a/openpgp/src/tpk/mod.rs b/openpgp/src/tpk/mod.rs index fce5a9e5..18d23ce9 100644 --- a/openpgp/src/tpk/mod.rs +++ b/openpgp/src/tpk/mod.rs @@ -2616,4 +2616,10 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= keyring.extend_from_slice(crate::tests::key("neal.pgp")); assert!(TPK::from_bytes(&keyring).is_err()); } + + #[test] + fn tpk_is_send_and_sync() { + fn f<T: Send + Sync>(_: T) {} + f(TPK::from_bytes(crate::tests::key("testy-new.pgp")).unwrap()); + } } |