Skip to content

Commit

Permalink
Add audit-cache binary to audit Cloudflare caching (#2787)
Browse files Browse the repository at this point in the history
  • Loading branch information
casey authored Dec 1, 2023
1 parent 172c65d commit e216892
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 1 deletion.
19 changes: 19 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"] }
Expand Down
9 changes: 9 additions & 0 deletions crates/audit-cache/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"] }
88 changes: 88 additions & 0 deletions crates/audit-cache/src/main.rs
Original file line number Diff line number Diff line change
@@ -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);
}
}
3 changes: 3 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit e216892

Please sign in to comment.