use crate::signer_crypted::SignerCrypted;
use crate::signer_jwt::{self, SignerJWT};
use crate::signer_remote_resource::SignerRemoteResource;
use crate::signer_user::SignerUser;
use crate::{Result, SignerSigned};
use super::signer_fs_store;
#[test]
fn test_create_signer_user() -> Result<()> {
let sfs = signer_fs_store::SignerFsStore::new(String::from("./test_root/users"));
let u = SignerUser::generete("test")?;
sfs.save_signer_user(&u)?;
let list = sfs.list_signer_user()?;
assert!(list.len() > 0);
let u2 = sfs.load_signer_user(&u.public.pub_key)?;
assert_eq!(u.prv_key, u2.prv_key);
sfs.drop_signer_user(&u2)?;
Ok(())
}
#[test]
fn test_create_signature() -> Result<()> {
let u = SignerUser::generete("test")?;
let up_sig = SignerSigned::from_value(&u, &u.public)?;
let v = up_sig.verify_to_value()?;
assert_eq!(u.public, v);
Ok(())
}
#[test]
fn test_signer_jwt() -> Result<()> {
let u = SignerUser::generete("tester")?;
let jwt = SignerJWT::new(
signer_jwt::SignerJWTHeader::default(&u),
signer_jwt::SignerJWTClaims::default(&u, format!("http://aud.com"), format!("1001")),
);
let jwt_string = jwt.encode(&u)?;
println!("JWT_STRING :: {}", jwt_string);
let decode = SignerJWT::decode(&jwt_string)?;
assert_eq!(jwt.claims.jti, decode.claims.jti);
let invalid_jwt = jwt_string + "INVALID";
let invalid = SignerJWT::decode_unverify(&invalid_jwt)?;
assert_eq!(jwt.claims.jti, invalid.claims.jti);
matches!(SignerJWT::decode(&invalid_jwt), Err(_));
Ok(())
}
#[test]
fn test_signer_message() -> Result<()> {
let alice = SignerUser::generete("alice")?;
let bob = SignerUser::generete("bob")?;
let wisper = "i love u".to_string();
let message = SignerCrypted::create(&alice, &bob.public.pub_key, wisper.clone())?;
let decrypt = message.decrypt(&bob)?;
assert_eq!(wisper, decrypt);
println!("alice says: {}", decrypt);
Ok(())
}
#[test]
fn test_signer_remote_resource() {
let mut resource1 = SignerRemoteResource::new("pubkey1".to_string(), "hash1".to_string());
resource1.remotes.push("remote1".to_string());
let mut resource2 = SignerRemoteResource::new("pubkey1".to_string(), "hash1".to_string());
resource2.remotes.push("remote2".to_string());
resource1.merge(&resource2);
assert_eq!(resource1.remotes.len(), 2);
assert!(resource1.remotes.contains(&"remote1".to_string()));
assert!(resource1.remotes.contains(&"remote2".to_string()));
let resource3 = SignerRemoteResource::new("pubkey1".to_string(), "hash2".to_string());
resource1.merge(&resource3);
assert_eq!(resource1.remotes.len(), 2);
}