diff --git a/.circleci/run_tests.sh b/.circleci/run_tests.sh index 4202eb5e..48303d70 100644 --- a/.circleci/run_tests.sh +++ b/.circleci/run_tests.sh @@ -3,6 +3,9 @@ set -e set -o xtrace +# non-zero exit code if we provide bad configs +(! ./target/debug/pgcat "fake_configs" 2>/dev/null) + # Start PgCat with a particular log level # for inspection. function start_pgcat() { diff --git a/Cargo.lock b/Cargo.lock index 2e20f709..af4826b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -159,6 +159,12 @@ dependencies = [ "termcolor", ] +[[package]] +name = "exitcode" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193" + [[package]] name = "fnv" version = "1.0.7" @@ -515,6 +521,7 @@ dependencies = [ "bytes", "chrono", "env_logger", + "exitcode", "hmac", "hyper", "log", diff --git a/Cargo.toml b/Cargo.toml index 37370244..226a20d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,3 +33,4 @@ tokio-rustls = "0.23" rustls-pemfile = "1" hyper = { version = "0.14", features = ["full"] } phf = { version = "0.10", features = ["macros"] } +exitcode = "1.1.2" diff --git a/src/main.rs b/src/main.rs index 0b2e1d59..db546f24 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,6 +24,7 @@ extern crate async_trait; extern crate bb8; extern crate bytes; extern crate env_logger; +extern crate exitcode; extern crate log; extern crate md5; extern crate num_cpus; @@ -77,7 +78,7 @@ async fn main() { if !query_router::QueryRouter::setup() { error!("Could not setup query router"); - return; + std::process::exit(exitcode::CONFIG); } let args = std::env::args().collect::>(); @@ -92,7 +93,7 @@ async fn main() { Ok(_) => (), Err(err) => { error!("Config parse error: {:?}", err); - return; + std::process::exit(exitcode::CONFIG); } }; @@ -107,7 +108,7 @@ async fn main() { Ok(addr) => addr, Err(err) => { error!("Invalid http address: {}", err); - return; + std::process::exit(exitcode::CONFIG); } }; tokio::task::spawn(async move { @@ -121,7 +122,7 @@ async fn main() { Ok(sock) => sock, Err(err) => { error!("Listener socket error: {:?}", err); - return; + std::process::exit(exitcode::CONFIG); } }; @@ -141,7 +142,7 @@ async fn main() { Ok(_) => (), Err(err) => { error!("Pool error: {:?}", err); - return; + std::process::exit(exitcode::CONFIG); } };