mod de;
mod ser;
#[cfg(test)]
mod tests {
use crate::vlad;
use multi_key::{EncodedMultikey, Multikey};
use multi_trait::Null;
fn test_signing_key() -> Multikey {
let s = "fba2480260874657374206b657901012064e58adf88f85cbec6a0448a0803f9d28cf9231a7141be413f83cf6aa883cd04";
EncodedMultikey::try_from(s).unwrap().to_inner()
}
fn test_wasm_message() -> Vec<u8> {
vec![0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]
}
#[test]
fn test_vlad_serde_encoded_string() {
let mk = test_signing_key();
let msg = test_wasm_message();
let vlad = vlad::Builder::default()
.with_signing_key(&mk)
.with_message(&msg)
.try_build_encoded()
.unwrap();
let s = vlad.to_string();
let decoded = vlad::EncodedVlad::try_from(s.as_str()).unwrap();
assert_eq!(vlad, decoded);
}
#[test]
fn test_vlad_serde_json() {
let mk = test_signing_key();
let msg = test_wasm_message();
let vlad = vlad::Builder::default()
.with_signing_key(&mk)
.with_message(&msg)
.try_build()
.unwrap();
let s = serde_json::to_string(&vlad).unwrap();
let deserialized: vlad::Vlad = serde_json::from_str(&s).unwrap();
assert_eq!(vlad, deserialized);
let json: serde_json::Value = serde_json::from_str(&s).unwrap();
assert!(
json.get("multisig").is_some(),
"JSON should have 'multisig' field"
);
}
#[cfg(not(feature = "dag_cbor"))]
#[test]
fn test_vlad_serde_cbor() {
let mk = test_signing_key();
let msg = test_wasm_message();
let vlad = vlad::Builder::default()
.with_signing_key(&mk)
.with_message(&msg)
.try_build()
.unwrap();
let v = multi_cbor::to_vec(&vlad).unwrap();
let deserialized: vlad::Vlad = multi_cbor::from_slice(&v).unwrap();
assert_eq!(vlad, deserialized);
}
#[cfg(feature = "dag_cbor")]
#[test]
fn test_vlad_serde_dag_cbor() {
let mk = test_signing_key();
let msg = test_wasm_message();
let vlad = vlad::Builder::default()
.with_signing_key(&mk)
.with_message(&msg)
.try_build()
.unwrap();
let v = multi_cbor::to_vec(&vlad).unwrap();
let deserialized: vlad::Vlad = multi_cbor::from_slice(&v).unwrap();
assert_eq!(vlad, deserialized);
}
#[test]
fn test_null_vlad_serde_compact() {
let v = vlad::Vlad::null();
let bytes: Vec<u8> = v.clone().into();
let deserialized = vlad::Vlad::try_from(bytes.as_ref()).unwrap();
assert_eq!(v, deserialized);
let cbor = multi_cbor::to_vec(&v).unwrap();
let from_cbor: vlad::Vlad = multi_cbor::from_slice(&cbor).unwrap();
assert_eq!(v, from_cbor);
}
#[test]
fn test_null_vlad_serde_readable() {
let v = vlad::Vlad::null();
let s = serde_json::to_string(&v).unwrap();
let deserialized: vlad::Vlad = serde_json::from_str(&s).unwrap();
assert_eq!(v, deserialized);
let json: serde_json::Value = serde_json::from_str(&s).unwrap();
assert!(
json.get("multisig").is_some(),
"null Vlad JSON should have 'multisig' field"
);
}
#[test]
fn test_encoded_null_vlad_serde_readable() {
let v: vlad::EncodedVlad = vlad::Vlad::null().into();
let s = v.to_string();
let decoded = vlad::EncodedVlad::try_from(s.as_str()).unwrap();
assert_eq!(v, decoded);
}
#[test]
fn test_vlad_serde_verify_after_roundtrip() {
let mk = test_signing_key();
let msg = test_wasm_message();
let vlad = vlad::Builder::default()
.with_signing_key(&mk)
.with_message(&msg)
.try_build()
.unwrap();
vlad.verify(&mk).unwrap();
let s = serde_json::to_string(&vlad).unwrap();
let deserialized: vlad::Vlad = serde_json::from_str(&s).unwrap();
deserialized.verify(&mk).unwrap();
let v = multi_cbor::to_vec(&vlad).unwrap();
let from_cbor: vlad::Vlad = multi_cbor::from_slice(&v).unwrap();
from_cbor.verify(&mk).unwrap();
}
}