diff --git a/proxy/src/cplane_mock.rs b/proxy/src/cplane_mock.rs
new file mode 100644
index 0000000000..cfff3e8f9f
--- /dev/null
+++ b/proxy/src/cplane_mock.rs
@@ -0,0 +1,66 @@
+use anyhow::anyhow;
+use hyper::{Body, Request, Response, StatusCode};
+use routerify::RouterBuilder;
+use routerify::ext::RequestExt;
+use tokio::net::TcpStream;
+use std::net::TcpListener;
+use zenith_utils::http::endpoint;
+use zenith_utils::http::error::ApiError;
+use zenith_utils::http::json::json_response;
+
+use crate::{cplane_api::{DatabaseInfo, ProxyAuthResponse}, mgmt::{PsqlSessionResponse, PsqlSessionResult}};
+
+async fn auth_handler(_: Request
) -> Result, ApiError> {
+ Ok(json_response(StatusCode::OK, ProxyAuthResponse::Ready {
+ conn_info: DatabaseInfo {
+ host: "127.0.0.1".into(),
+ port: 5432,
+ dbname: "postgres".into(),
+ user: "postgres".into(),
+ password: Some("postgres".into()),
+ }
+ })?)
+}
+
+async fn link_handler(req: Request) -> Result, ApiError> {
+ let session_id = req.param("sessionId").unwrap().to_string();
+
+ let payload = PsqlSessionResponse {
+ session_id,
+ result: PsqlSessionResult::Success(DatabaseInfo {
+ host: "127.0.0.1".into(),
+ port: 5432,
+ dbname: "postgres".into(),
+ user: "postgres".into(),
+ password: Some("postgres".into()),
+ })
+
+ };
+ let query_text = &serde_json::to_string(&payload).unwrap();
+
+ let _output = std::process::Command::new("psql")
+ .args(["-h", "127.0.0.1",
+ "-p", "7000",
+ "-c", query_text])
+ .output()
+ .unwrap();
+
+ Ok(json_response(StatusCode::OK, "")?)
+}
+
+fn make_router() -> RouterBuilder {
+ let router = endpoint::make_router();
+ router
+ .get("/authenticate_proxy_request", auth_handler)
+ .get("/psql_session/:sessionId", link_handler)
+}
+
+pub async fn thread_main(http_listener: TcpListener) -> anyhow::Result<()> {
+ let service = || routerify::RouterService::new(make_router().build()?);
+
+ hyper::Server::from_tcp(http_listener)?
+ .serve(service().map_err(|e| anyhow!(e))?)
+ .await?;
+
+ Ok(())
+}
diff --git a/proxy/src/main.rs b/proxy/src/main.rs
index 84230de65c..caa5b2706f 100644
--- a/proxy/src/main.rs
+++ b/proxy/src/main.rs
@@ -46,8 +46,7 @@ async fn main() -> anyhow::Result<()> {
)
.arg(
Arg::new("auth-method")
- .short('a')
- .long("router")
+ .long("auth-method")
.takes_value(true)
.help("Possible values: password | link | mixed")
.default_value("mixed"),