diff --git a/Cargo.toml b/Cargo.toml index 00697c4..731c1fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ edition = "2018" members = [ "database", "hagridctl", + "high-level-tests", ] [dependencies] diff --git a/high-level-tests/Cargo.toml b/high-level-tests/Cargo.toml new file mode 100644 index 0000000..ba96b09 --- /dev/null +++ b/high-level-tests/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "high-level-tests" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.55" +reqwest = { version = "0.11.9", features = ["blocking"] } +tokio = { version = "1.17.0", features = ["macros"] } diff --git a/high-level-tests/src/main.rs b/high-level-tests/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/high-level-tests/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/high-level-tests/tests/vks.rs b/high-level-tests/tests/vks.rs new file mode 100644 index 0000000..3e29119 --- /dev/null +++ b/high-level-tests/tests/vks.rs @@ -0,0 +1,73 @@ +use reqwest::Url; +use reqwest::blocking::Client; +use anyhow::Result; +use reqwest::StatusCode; + +static SERVER_URL: &str = "https://keys.openpgp.org"; + +fn assert_request(client: &Client, url: Url, status: StatusCode) -> Result<()> { + let response = client.head(url) + .send()?; + assert_eq!(response.status(), status); + Ok(()) +} + +#[test] +fn vks_by_fingerprint() -> Result<()> { + let client = Client::new(); + + let endpoint = Url::parse(SERVER_URL)? + .join("/vks/v1/by-fingerprint/")?; + + let nora_primary = "379D09E0A09685C48312D46E9F4EE06E0E229F37"; + assert_request(&client, endpoint.join(nora_primary)?, StatusCode::OK)?; + let too_short = "379D09E0A09685C48312"; + assert_request(&client, endpoint.join(too_short)?, StatusCode::NOT_FOUND)?; + let too_long = "379D09E0A09685C48312D46E9F4EE06E0E229F37ABC"; + assert_request(&client, endpoint.join(too_long)?, StatusCode::NOT_FOUND)?; + let improbable = "1111111111111111111111111111111111111111"; + assert_request(&client, endpoint.join(improbable)?, StatusCode::NOT_FOUND)?; + // XXX: Api docs say "MUST NOT be prefixed with 0x", but this succeeds + let with_0x = "0x379D09E0A09685C48312D46E9F4EE06E0E229F37"; + assert_request(&client, endpoint.join(with_0x)?, StatusCode::OK)?; + let lowercase = "379d09e0a09685c48312d46e9f4ee06e0e229f37"; + assert_request(&client, endpoint.join(lowercase)?, StatusCode::NOT_FOUND)?; + // XXX: query by subkey + Ok(()) +} + +#[test] +fn vks_by_keyid() -> Result<()> { + let client = Client::new(); + + let endpoint = Url::parse(SERVER_URL)? + .join("/vks/v1/by-keyid/")?; + + let nora_primary = "9F4EE06E0E229F37"; + assert_request(&client, endpoint.join(nora_primary)?, StatusCode::OK)?; + let too_short = "9F4EE06E0E229F"; + assert_request(&client, endpoint.join(too_short)?, StatusCode::NOT_FOUND)?; + let too_long = "379D09E0A09685C48312D46E9F4EE06E0E229F37"; + assert_request(&client, endpoint.join(too_long)?, StatusCode::NOT_FOUND)?; + let improbable = "1111111111111111"; + assert_request(&client, endpoint.join(improbable)?, StatusCode::NOT_FOUND)?; + // XXX: Api docs say "MUST NOT be prefixed with 0x", but this succeeds + let with_0x = "0x9F4EE06E0E229F37"; + assert_request(&client, endpoint.join(with_0x)?, StatusCode::OK)?; + let lowercase = "9f4ee06e0e229f37"; + assert_request(&client, endpoint.join(lowercase)?, StatusCode::NOT_FOUND)?; + // XXX: query by subkey + Ok(()) +} + +#[test] +fn vks_by_email() -> Result<()> { + let client = Client::new(); + + let endpoint = Url::parse(SERVER_URL)? + .join("/vks/v1/by-email/")?; + + let nora = "nora@sequoia-pgp.org"; + assert_request(&client, endpoint.join(nora)?, StatusCode::OK)?; + Ok(()) +}