diff --git a/container/pod-quote/Dockerfile b/container/pod-quote/Dockerfile index a7e83afe..b59de446 100644 --- a/container/pod-quote/Dockerfile +++ b/container/pod-quote/Dockerfile @@ -2,12 +2,8 @@ FROM rust:1.74.0 as pod-quote-builder RUN apt-get update && apt-get install -y \ build-essential \ - curl \ - make \ libprotobuf-dev \ protobuf-compiler \ - musl-dev \ - wget \ libssl-dev \ pkg-config @@ -19,7 +15,9 @@ COPY service/pod-quote /pod-quote RUN cd /pod-quote && make build -FROM rust:1.74.0 +FROM rust:1.74.0-slim + +RUN apt-get update && apt-get install -y curl WORKDIR /app COPY --from=pod-quote-builder /pod-quote/target/release/pod_quote /app/pod_quote diff --git a/service/pod-quote/src/pod_quote.rs b/service/pod-quote/src/pod_quote.rs index 2d0de1a1..12ac204d 100644 --- a/service/pod-quote/src/pod_quote.rs +++ b/service/pod-quote/src/pod_quote.rs @@ -125,5 +125,61 @@ async fn main() -> Result<(), Box> { eprintln!("HTTP server error: {}", err); } }); + // Keep the main thread running until a termination signal is received + tokio::signal::ctrl_c().await?; + println!("Received Ctrl+C signal, shutting down."); + Ok(()) } + +#[cfg(test)] +mod tests { + use super::*; + use hyper::Client; + use hyper::body::HttpBody as _; + use tokio::sync::oneshot; + + // Helper function to start the server in a separate task + async fn start_server(addr: SocketAddr) -> (SocketAddr, oneshot::Receiver<()>) { + let (shutdown_tx, shutdown_rx) = oneshot::channel(); + let server_task = tokio::spawn(async move { + let http_server = PerPodQuoteServer::new(addr, { + match tee::get_tee_type() { + tee::TeeType::PLAIN => panic!("Not found any TEE device!"), + t => t, + } + }); + if let Err(err) = http_server.start().await { + eprintln!("HTTP server error: {}", err); + } + shutdown_tx.send(()).unwrap(); + }); + (addr, shutdown_rx) + } + + #[tokio::test] + async fn test_quote_endpoint() { + // Define the address to bind the server + let addr = "127.0.0.1:3000".parse().unwrap(); + + // Start the server in a separate task + let (server_addr, _shutdown_rx) = start_server(addr).await; + + // Make a request to the server + let client = Client::new(); + let uri = format!("http://{}", server_addr).parse().unwrap(); + let mut response = client.get(uri).await.unwrap(); + + // Read the response body asynchronously + let mut body = response.body_mut(); + let mut full_body = Vec::new(); + while let Some(chunk) = body.next().await { + let chunk = chunk.unwrap(); + full_body.extend_from_slice(&chunk); + } + + // Assert that the response is successful and contains some data + assert!(response.status().is_success()); + assert!(!full_body.is_empty()); + } +}