Skip to content

Commit

Permalink
Rebase and update did_dht test vector
Browse files Browse the repository at this point in the history
  • Loading branch information
KendallWeihe committed Aug 16, 2024
1 parent 9ddf586 commit 4c0df0e
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 132 deletions.
62 changes: 0 additions & 62 deletions crates/web5/src/dids/methods/did_dht/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,65 +311,3 @@ mod tests {
assert_eq!(resolved_document, did_dht.document)
}
}

#[cfg(test)]
mod web5_test_vectors_did_dht {
use crate::dids::resolution::resolution_metadata::ResolutionMetadataError;
use crate::{
dids::resolution::resolution_metadata::ResolutionMetadata, test_helpers::TestVectorFile,
};

#[derive(Debug, PartialEq, serde::Deserialize)]
struct VectorInput {
#[serde(rename = "didUri")]
did_uri: String,
}

#[derive(Debug, PartialEq, serde::Deserialize)]
struct VectorOutput {
#[serde(rename = "didResolutionMetadata")]
did_resolution_metadata: ResolutionMetadata,
}

#[test]
fn resolve() {
let path = "did_dht/resolve.json";
let vectors: TestVectorFile<VectorInput, VectorOutput> =
TestVectorFile::load_from_path(path);

for vector in vectors.vectors {
let vector_input = vector.input;
let vector_output = &vector.output;

// As a replay attack protection protocol, if the same DID is doing a GET request within 5 minutes of each other, instead of a 404 it will start returning a 429.
// to get around this for our test we just create a new DID that is not published to get a fresh 404 for this error code
if let Some(ResolutionMetadataError::NotFound) =
vector_output.did_resolution_metadata.error
{
// TODO: According to the did dht spec a 404 should be returned when trying to resolve a DID that does not exists. Currently it incorrectly returns a 429 even on the first call.
// Uncomment this code block when resolved - https://github.com/TBD54566975/web5-rs/issues/286
continue;

// let private_jwk = Ed25519Generator::generate();
// let identity_key = ed25519::to_public_jwk(&private_jwk);
// let did_dht =
// DidDht::from_identity_key(identity_key.clone()).expect("Should create did:dht");
//
// vector_input = VectorInput{
// did_uri: did_dht.did.uri,
// };
}

let resolution_result = super::DidDht::resolve(&vector_input.did_uri);

let metadata_error = resolution_result.resolution_metadata.error.as_ref();
let expected_error = vector_output.did_resolution_metadata.error.as_ref();

assert_eq!(
metadata_error, expected_error,
"Document resolution metadata does not match. Expected '{:?}' but got '{:?}'.",
expected_error, metadata_error
);
}
}
}
68 changes: 0 additions & 68 deletions crates/web5/src/dids/methods/did_jwk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,71 +115,3 @@ impl DidJwk {
}
}
}

#[cfg(test)]
mod web5_test_vectors_did_jwk {
use crate::{
dids::{
data_model::document::Document,
resolution::{
document_metadata::DocumentMetadata, resolution_metadata::ResolutionMetadata,
},
},
test_helpers::TestVectorFile,
};

// #[derive(Debug, PartialEq, serde::Deserialize)]
// struct VectorOutput {
// #[serde(rename = "@context")]
// context: String,
// #[serde(rename = "didDocument")]
// did_document: Option<Document>,
// #[serde(rename = "didDocumentMetadata")]
// did_document_metadata: DocumentMetadata,
// #[serde(rename = "didResolutionMetadata")]
// did_resolution_metadata: ResolutionMetadata,
// }

#[test]
fn resolve() {
let path = "did_jwk/resolve.json";
let vectors: TestVectorFile<String, VectorOutput> = TestVectorFile::load_from_path(path);

// for vector in vectors.vectors {
// let did_uri = vector.input;
// let resolution_result = super::DidJwk::resolve(&did_uri);

// let all_none = vector.output.did_document_metadata.created.is_none()
// && vector.output.did_document_metadata.updated.is_none()
// && vector.output.did_document_metadata.deactivated.is_none()
// && vector.output.did_document_metadata.next_update.is_none()
// && vector.output.did_document_metadata.version_id.is_none()
// && vector
// .output
// .did_document_metadata
// .next_version_id
// .is_none()
// && vector.output.did_document_metadata.equivalent_id.is_none()
// && vector.output.did_document_metadata.canonical_id.is_none();

// let vector_document_metadata = if all_none {
// None
// } else {
// Some(vector.output.did_document_metadata.clone())
// };

// assert_eq!(
// resolution_result.resolution_metadata, vector.output.did_resolution_metadata,
// "Resolution metadata does not match."
// );
// assert_eq!(
// resolution_result.document, vector.output.did_document,
// "DID Document does not match."
// );
// assert_eq!(
// resolution_result.document_metadata, vector_document_metadata,
// "Document metadata does not match."
// );
// }
// }
// }
66 changes: 64 additions & 2 deletions crates/web5/src/test_vectors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ mod test_vectors {
}

#[test]
fn test_did_jwk_resolve() {
fn resolve() {
let path = "did_jwk/resolve.json";
let vectors: TestVectorFile<String, VectorOutput> =
TestVectorFile::load_from_path(path);
Expand Down Expand Up @@ -97,6 +97,68 @@ mod test_vectors {
}
}

mod did_dht {
use super::*;
use crate::dids::{
methods::did_dht::DidDht,
resolution::resolution_metadata::{ResolutionMetadata, ResolutionMetadataError},
};

#[derive(Debug, PartialEq, serde::Deserialize)]
struct VectorInput {
#[serde(rename = "didUri")]
did_uri: String,
}

#[derive(Debug, PartialEq, serde::Deserialize)]
struct VectorOutput {
#[serde(rename = "didResolutionMetadata")]
did_resolution_metadata: ResolutionMetadata,
}

#[test]
fn resolve() {
let path = "did_dht/resolve.json";
let vectors: TestVectorFile<VectorInput, VectorOutput> =
TestVectorFile::load_from_path(path);

for vector in vectors.vectors {
let vector_input = vector.input;
let vector_output = &vector.output;

// As a replay attack protection protocol, if the same DID is doing a GET request within 5 minutes of each other, instead of a 404 it will start returning a 429.
// to get around this for our test we just create a new DID that is not published to get a fresh 404 for this error code
if let Some(ResolutionMetadataError::NotFound) =
vector_output.did_resolution_metadata.error
{
// TODO: According to the did dht spec a 404 should be returned when trying to resolve a DID that does not exists. Currently it incorrectly returns a 429 even on the first call.
// Uncomment this code block when resolved - https://github.com/TBD54566975/web5-rs/issues/286
continue;

// let private_jwk = Ed25519Generator::generate();
// let identity_key = ed25519::to_public_jwk(&private_jwk);
// let did_dht =
// DidDht::from_identity_key(identity_key.clone()).expect("Should create did:dht");
//
// vector_input = VectorInput{
// did_uri: did_dht.did.uri,
// };
}

let resolution_result = DidDht::resolve(&vector_input.did_uri);

let metadata_error = resolution_result.resolution_metadata.error.as_ref();
let expected_error = vector_output.did_resolution_metadata.error.as_ref();

assert_eq!(
metadata_error, expected_error,
"Document resolution metadata does not match. Expected '{:?}' but got '{:?}'.",
expected_error, metadata_error
);
}
}
}

mod presentation_definition {
use super::*;
use crate::credentials::presentation_definition::PresentationDefinition;
Expand All @@ -118,7 +180,7 @@ mod test_vectors {

#[test]
#[ignore] // TODO temporarily ignoring, because web5-spec test vectors use did:key which isn't supported
fn test_presentation_exchange_select_credentials() {
fn select_credentials() {
let path = "presentation_exchange/select_credentials.json";
let vectors: TestVectorFile<VectorInput, VectorOutput> =
TestVectorFile::load_from_path(path);
Expand Down

0 comments on commit 4c0df0e

Please sign in to comment.