diff --git a/Cargo.lock b/Cargo.lock index 7707d87531..39195ca8eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -329,6 +329,14 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "audit-cache" +version = "0.0.0" +dependencies = [ + "colored", + "reqwest", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -694,6 +702,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "colored" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" +dependencies = [ + "is-terminal", + "lazy_static", + "windows-sys 0.48.0", +] + [[package]] name = "concurrent-queue" version = "2.3.0" diff --git a/Cargo.toml b/Cargo.toml index 1521e1d377..7095fe5975 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ copyright = "The Ord Maintainers" maintainer = "The Ord Maintainers" [workspace] -members = [".", "test-bitcoincore-rpc"] +members = [".", "test-bitcoincore-rpc", "crates/*"] [dependencies] anyhow = { version = "1.0.56", features = ["backtrace"] } diff --git a/crates/audit-cache/Cargo.toml b/crates/audit-cache/Cargo.toml new file mode 100644 index 0000000000..4cde90b3e8 --- /dev/null +++ b/crates/audit-cache/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "audit-cache" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies] +colored = "2.0.4" +reqwest = { version = "0.11.22", features = ["blocking"] } diff --git a/crates/audit-cache/src/main.rs b/crates/audit-cache/src/main.rs new file mode 100644 index 0000000000..a1c870f7ce --- /dev/null +++ b/crates/audit-cache/src/main.rs @@ -0,0 +1,88 @@ +use { + colored::Colorize, + reqwest::{blocking::get, StatusCode}, + std::process, +}; + +const ENDPOINTS: &[(&str, StatusCode, &str)] = &[ + // PNG content is cached + ( + "/content/6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0", + StatusCode::OK, + "HIT", + ), + // HTML content is cached + ( + "/content/114c5c87c4d0a7facb2b4bf515a4ad385182c076a5cfcc2982bf2df103ec0fffi0", + StatusCode::OK, + "HIT", + ), + // content respopnses that aren't found aren't cached + ( + "/content/6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i1", + StatusCode::NOT_FOUND, + "BYPASS", + ), + // HTML previews are cached + ( + "/preview/114c5c87c4d0a7facb2b4bf515a4ad385182c076a5cfcc2982bf2df103ec0fffi0", + StatusCode::OK, + "HIT", + ), + // non-HTML previews are not cached + ( + "/preview/6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0", + StatusCode::OK, + "BYPASS", + ), + ("/static/index.css", StatusCode::OK, "HIT"), + ("/static/index.js", StatusCode::OK, "HIT"), + ("/sat/FOO", StatusCode::BAD_REQUEST, "HIT"), + ("/", StatusCode::OK, "BYPASS"), + ("/blockheight", StatusCode::OK, "BYPASS"), +]; + +fn main() { + eprint!("Warming up the cache"); + + for (endpoint, expected_status_code, _expected_cache_status) in ENDPOINTS { + let response = get(format!("https://ordinals.com{endpoint}")).unwrap(); + + assert_eq!(response.status(), *expected_status_code); + + eprint!("."); + } + + eprintln!(); + + let mut failures = 0; + + for (endpoint, expected_status_code, expected_cache_status) in ENDPOINTS { + eprint!("GET {endpoint}"); + + let response = get(format!("https://ordinals.com{endpoint}")).unwrap(); + + let status_code = response.status(); + + eprint!(" {}", status_code.as_u16()); + + assert_eq!(response.status(), *expected_status_code); + + let cache_status = response.headers().get("cf-cache-status").unwrap(); + + let pass = cache_status == expected_cache_status; + + if pass { + eprintln!(" {}", cache_status.to_str().unwrap().green()); + } else { + eprintln!(" {}", cache_status.to_str().unwrap().red()); + } + + failures += u32::from(!pass); + } + + if failures > 0 { + eprintln!("{failures} failures"); + process::exit(1); + } +} diff --git a/justfile b/justfile index b8c4e6ec4b..4e549d1f7c 100644 --- a/justfile +++ b/justfile @@ -219,3 +219,6 @@ convert-logo-to-favicon: update-mdbook-theme: curl https://raw.githubusercontent.com/rust-lang/mdBook/v0.4.35/src/theme/index.hbs > docs/theme/index.hbs + +audit-cache: + cargo run --package audit-cache