sequoia-sq/tests/integration/sq_keyring_merge.rs
Neal H. Walfield e1a4fa656c
Move sq toolbox keyring to sq keyring.
- Make `sq keyring` a top-level subcommand.

  - See #326.
2024-11-16 10:06:59 +01:00

76 lines
2.3 KiB
Rust

use std::fs::File;
use sequoia_openpgp as openpgp;
use openpgp::Packet;
use openpgp::Result;
use openpgp::cert::prelude::*;
use openpgp::serialize::Serialize;
use openpgp::types::RevocationStatus;
use super::common::Sq;
use super::common::STANDARD_POLICY;
#[test]
fn keyring_merge_revocation() -> Result<()> {
let sq = Sq::new();
// Generate a key. (We don't use sq on purpose: we want to make
// sure we have a bare revocation certificate.)
let (alice_cert, alice_rev) = CertBuilder::general_purpose(
None, Some("alice@example.org"))
.set_creation_time(sq.now())
.generate()?;
// Write out the certificate.
let alice_cert_file = sq.scratch_file("alice_cert");
alice_cert.as_tsk().serialize(&mut File::create(&alice_cert_file)?)?;
// Write out the revocation certificate.
let alice_rev_file = sq.scratch_file("alice_rev");
Packet::from(alice_rev).serialize(&mut File::create(&alice_rev_file)?)?;
let (_bob, bob_cert_file, _bob_rev_file)
= sq.key_generate(&[], &["bob"]);
// "Merge" a single cert.
let certs = sq.keyring_merge(
&[ &alice_cert_file ][..],
None, None);
assert_eq!(certs.len(), 1);
assert!(! matches!(
certs[0].revocation_status(STANDARD_POLICY, sq.now()),
RevocationStatus::Revoked(_)));
// "Merge" two certs.
let certs = sq.keyring_merge(
&[ &alice_cert_file, &bob_cert_file ][..],
None, None);
assert_eq!(certs.len(), 2);
assert!(! matches!(
certs[0].revocation_status(STANDARD_POLICY, sq.now()),
RevocationStatus::Revoked(_)));
// "Merge" a single cert and its revocation certificate.
let certs = sq.keyring_merge(
&[ &alice_rev_file, &alice_cert_file ][..],
None, None);
assert_eq!(certs.len(), 1);
assert!(matches!(
certs[0].revocation_status(STANDARD_POLICY, sq.now()),
RevocationStatus::Revoked(_)));
// Merging a revocation certificate without the certificate should
// result in an error.
assert!(sq.keyring_merge_maybe(
&[ &alice_rev_file ][..],
None, None).is_err());
// Merging a revocation certificate without the certificate should
// result in an error.
assert!(sq.keyring_merge_maybe(
&[ &alice_rev_file, &bob_cert_file ][..],
None, None).is_err());
Ok(())
}