diff --git a/Cargo.lock b/Cargo.lock index 05e6a1c..fee096d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2000,16 +2000,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "forwarded-header-value" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" -dependencies = [ - "nonempty", - "thiserror", -] - [[package]] name = "funty" version = "2.0.0" @@ -2214,26 +2204,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "governor" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" -dependencies = [ - "cfg-if", - "dashmap", - "futures", - "futures-timer", - "no-std-compat", - "nonzero_ext", - "parking_lot", - "portable-atomic", - "quanta", - "rand", - "smallvec", - "spinning_top", -] - [[package]] name = "group" version = "0.13.0" @@ -3379,7 +3349,6 @@ dependencies = [ "eyre", "futures", "futures-util", - "governor", "libp2p", "mini-moka", "once_cell", @@ -3395,7 +3364,6 @@ dependencies = [ "tokio", "tower", "tower-http", - "tower_governor", "tracing", "tracing-subscriber", "url", @@ -3561,12 +3529,6 @@ dependencies = [ "libc", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -3583,18 +3545,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - -[[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -3968,12 +3918,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" - [[package]] name = "powerfmt" version = "0.2.0" @@ -4093,21 +4037,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "quanta" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi", - "web-sys", - "winapi", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -4238,15 +4167,6 @@ dependencies = [ "rand_core", ] -[[package]] -name = "raw-cpuid" -version = "11.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1" -dependencies = [ - "bitflags 2.4.2", -] - [[package]] name = "rcgen" version = "0.11.3" @@ -4918,15 +4838,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spinning_top" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" -dependencies = [ - "lock_api", -] - [[package]] name = "spki" version = "0.7.3" @@ -5563,22 +5474,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" -[[package]] -name = "tower_governor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3790eac6ad3fb8d9d96c2b040ae06e2517aa24b067545d1078b96ae72f7bb9a7" -dependencies = [ - "axum", - "forwarded-header-value", - "governor", - "http 1.1.0", - "pin-project", - "thiserror", - "tower", - "tracing", -] - [[package]] name = "tracing" version = "0.1.40" diff --git a/Cargo.toml b/Cargo.toml index 7b778e8..d638521 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,8 +48,6 @@ url = "2.5.0" futures = "0.3.30" sha256 = "1.5.0" tower = { version = "0.4.13", features = ["full"] } -tower_governor = { version = "0.3.2", features = ["axum"] } -governor = { version = "0.6.0" } tower-http = { version = "0.5.2", features = ["cors", "compression-full", "trace"] } alloy = { git = "https://github.com/alloy-rs/alloy", rev = "17633df", features = [ "sol-types", diff --git a/src/api.rs b/src/api.rs index c996c3f..89d7ac9 100644 --- a/src/api.rs +++ b/src/api.rs @@ -14,8 +14,6 @@ use sqlx::SqlitePool; use std::time::Duration; use tokio::net::TcpListener; use tower::{BoxError, ServiceBuilder}; -use tower_governor::governor::GovernorConfigBuilder; -use tower_governor::GovernorLayer; #[derive(Clone)] pub struct AppState { @@ -32,6 +30,7 @@ impl AppState { .await .unwrap(); let db = recv.await.unwrap().expect("Failed to get db"); + Self { db, controller, @@ -41,23 +40,6 @@ impl AppState { } pub fn router_with_defaults(config: &Config) -> Router { - let governor_conf = Box::new( - GovernorConfigBuilder::default() - .per_second(1) - .burst_size(config.rate_limit_rps) - .finish() - .unwrap(), - ); - // rate limiter annoyingly needs a process to clean up the state - // a separate background task to clean up - let governor_limiter = governor_conf.limiter().clone(); - tokio::spawn(async move { - loop { - tokio::time::sleep(Duration::from_secs(60)).await; - governor_limiter.retain_recent(); - } - }); - Router::new() .route("/health", get(health)) .route("/list-all", get(list_all)) @@ -75,12 +57,9 @@ pub fn router_with_defaults(config: &Config) -> Router { .layer(tower_http::cors::CorsLayer::new().allow_origin(tower_http::cors::Any)) .layer(tower_http::compression::CompressionLayer::new().gzip(true)), ) - .layer(GovernorLayer { - config: Box::leak(governor_conf), - }) } -fn with_admin_routes(state: AppState, router: Router) -> Router { +pub fn with_admin_routes(state: AppState, router: Router) -> Router { let admin = Router::new() .route("/admin/node", get(admin::node_info)) .route("/admin/add-peer", post(admin::add_peer)) diff --git a/src/config.rs b/src/config.rs index 768250c..ac6c79f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -72,7 +72,6 @@ pub struct Config { } impl Config { - #[cfg(test)] pub fn test_default() -> Self { Config { seed: rand::random(), diff --git a/tests/api_test.rs b/tests/api_test.rs new file mode 100644 index 0000000..afdf137 --- /dev/null +++ b/tests/api_test.rs @@ -0,0 +1,39 @@ +#[cfg(test)] +mod api_test { + use axum::body::Body; + use axum::extract::Request; + use axum::http::StatusCode; + use axum::Router; + use mintpool::api; + use mintpool::api::{with_admin_routes, AppState}; + + use mintpool::config::Config; + use mintpool::rules::RulesEngine; + use mintpool::run::start_p2p_services; + use tower::ServiceExt; + + #[tokio::test] + async fn test_routes() { + let mut config = Config::test_default(); + config.api_port = 1111; + + let router = make_test_router(&config).await; + + let res = router + .oneshot(Request::get("/health").body(Body::empty()).unwrap()) + .await + .unwrap(); + assert_eq!(res.status(), StatusCode::OK); + } + + async fn make_test_router(config: &Config) -> Router { + let mut rules = RulesEngine::new(config); + rules.add_default_rules(); + let ctl = start_p2p_services(config, rules).await.unwrap(); + + let router = api::router_with_defaults(config); + let state = AppState::from(config, ctl.clone()).await; + + with_admin_routes(state.clone(), router).with_state(state) + } +}