Add tests for sq key approvals list.
- Test that the user ID designators behave correctly.
This commit is contained in:
parent
52fdea48e2
commit
e227aecbc2
@ -8,6 +8,7 @@ mod integration {
|
|||||||
mod sq_cli_version;
|
mod sq_cli_version;
|
||||||
mod sq_decrypt;
|
mod sq_decrypt;
|
||||||
mod sq_encrypt;
|
mod sq_encrypt;
|
||||||
|
mod sq_key_approvals_list;
|
||||||
mod sq_key_approvals_update;
|
mod sq_key_approvals_update;
|
||||||
mod sq_key_delete;
|
mod sq_key_delete;
|
||||||
mod sq_key_expire;
|
mod sq_key_expire;
|
||||||
|
@ -1146,6 +1146,58 @@ impl Sq {
|
|||||||
.expect("sq key subkey bind succeeds")
|
.expect("sq key subkey bind succeeds")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn try_key_approvals_list<'a, H, U>(&self,
|
||||||
|
args: &[&str],
|
||||||
|
cert: H,
|
||||||
|
userids: &[U])
|
||||||
|
-> Result<Vec<u8>>
|
||||||
|
where H: Into<FileOrKeyHandle>,
|
||||||
|
U: Into<UserIDArg<'a>> + Clone,
|
||||||
|
{
|
||||||
|
let cert = cert.into();
|
||||||
|
let userids: Vec<UserIDArg> = userids.iter()
|
||||||
|
.cloned()
|
||||||
|
.map(|u| u.into())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let mut cmd = self.command();
|
||||||
|
cmd.arg("key").arg("approvals").arg("list");
|
||||||
|
|
||||||
|
cmd.args(args);
|
||||||
|
|
||||||
|
match &cert {
|
||||||
|
FileOrKeyHandle::FileOrStdin(file) => {
|
||||||
|
cmd.arg("--cert-file").arg(file);
|
||||||
|
}
|
||||||
|
FileOrKeyHandle::KeyHandle((_kh, s)) => {
|
||||||
|
cmd.arg("--cert").arg(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for userid in userids.iter() {
|
||||||
|
userid.as_arg(&mut cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
let output = self.run(cmd, None);
|
||||||
|
if output.status.success() {
|
||||||
|
Ok(output.stdout)
|
||||||
|
} else {
|
||||||
|
Err(anyhow::anyhow!("sq key approvals list returned an error"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn key_approvals_list<'a, H, U>(&self,
|
||||||
|
args: &[&str],
|
||||||
|
cert: H,
|
||||||
|
userids: &[U])
|
||||||
|
-> Vec<u8>
|
||||||
|
where H: Into<FileOrKeyHandle>,
|
||||||
|
U: Into<UserIDArg<'a>> + Clone,
|
||||||
|
{
|
||||||
|
self.try_key_approvals_list(args, cert, userids)
|
||||||
|
.expect("success")
|
||||||
|
}
|
||||||
|
|
||||||
pub fn key_approvals_update<'a, H, Q>(&self,
|
pub fn key_approvals_update<'a, H, Q>(&self,
|
||||||
cert: H,
|
cert: H,
|
||||||
args: &[&str],
|
args: &[&str],
|
||||||
|
31
tests/integration/sq_key_approvals_list.rs
Normal file
31
tests/integration/sq_key_approvals_list.rs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
use super::common::Sq;
|
||||||
|
use super::common::UserIDArg;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn userid_designators() {
|
||||||
|
let self_signed_email = "alice@example.org";
|
||||||
|
let self_signed_userid
|
||||||
|
= &format!("Alice <{}>", self_signed_email);
|
||||||
|
|
||||||
|
let other_email = "alice@other.org";
|
||||||
|
let other_userid = &format!("Alice <{}>", other_email);
|
||||||
|
|
||||||
|
let sq = Sq::new();
|
||||||
|
|
||||||
|
let (cert, cert_path, _rev_path)
|
||||||
|
= sq.key_generate(&[], &[ self_signed_userid ]);
|
||||||
|
sq.key_import(cert_path);
|
||||||
|
|
||||||
|
// 1. --userid: use the specified self-signed user ID.
|
||||||
|
sq.key_approvals_list(
|
||||||
|
&[], cert.key_handle(), &[ UserIDArg::UserID(self_signed_userid) ]);
|
||||||
|
assert!(sq.try_key_approvals_list(
|
||||||
|
&[], cert.key_handle(), &[ UserIDArg::UserID(other_userid) ]).is_err());
|
||||||
|
|
||||||
|
// 2. --email: use the self-signed user ID with the specified
|
||||||
|
// email address.
|
||||||
|
sq.key_approvals_list(
|
||||||
|
&[], cert.key_handle(), &[ UserIDArg::Email(self_signed_email) ]);
|
||||||
|
assert!(sq.try_key_approvals_list(
|
||||||
|
&[], cert.key_handle(), &[ UserIDArg::Email(other_email) ]).is_err());
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user