From 8b4f27d2c39d1e1f5f1cc455c58800e806ee98d0 Mon Sep 17 00:00:00 2001 From: rtkay123 Date: Sun, 10 Aug 2025 17:29:11 +0200 Subject: build(docker): pseudonyms --- crates/pseudonyms/.dockerignore | 3 ++ crates/pseudonyms/Cargo.toml | 5 +++ crates/pseudonyms/Dockerfile | 27 ++++++++++++++ crates/pseudonyms/tests/grpc/mod.rs | 1 + crates/pseudonyms/tests/grpc/mutate.rs | 1 + crates/pseudonyms/tests/grpc/mutate/create.rs | 23 ++++++++++++ crates/pseudonyms/tests/helpers.rs | 54 +++++++++++++++++++++++++++ crates/pseudonyms/tests/main.rs | 3 ++ 8 files changed, 117 insertions(+) create mode 100644 crates/pseudonyms/.dockerignore create mode 100644 crates/pseudonyms/Dockerfile create mode 100644 crates/pseudonyms/tests/grpc/mod.rs create mode 100644 crates/pseudonyms/tests/grpc/mutate.rs create mode 100644 crates/pseudonyms/tests/grpc/mutate/create.rs create mode 100644 crates/pseudonyms/tests/helpers.rs create mode 100644 crates/pseudonyms/tests/main.rs (limited to 'crates/pseudonyms') diff --git a/crates/pseudonyms/.dockerignore b/crates/pseudonyms/.dockerignore new file mode 100644 index 0000000..27fd8a4 --- /dev/null +++ b/crates/pseudonyms/.dockerignore @@ -0,0 +1,3 @@ +/target +.env +.git diff --git a/crates/pseudonyms/Cargo.toml b/crates/pseudonyms/Cargo.toml index 1efd5c5..9f06188 100644 --- a/crates/pseudonyms/Cargo.toml +++ b/crates/pseudonyms/Cargo.toml @@ -32,3 +32,8 @@ warden-core = { workspace = true, features = ["pseudonyms", "serde-time"] } [dependencies.warden-stack] workspace = true features = ["api", "cache", "postgres", "opentelemetry-tonic", "tracing-loki"] + +[profile.release] +lto = true +strip = true +codegen-units = 1 diff --git a/crates/pseudonyms/Dockerfile b/crates/pseudonyms/Dockerfile new file mode 100644 index 0000000..b4158d3 --- /dev/null +++ b/crates/pseudonyms/Dockerfile @@ -0,0 +1,27 @@ +FROM rust:1.89.0-slim AS builder + +ENV SQLX_OFFLINE=true + +RUN rustup target add x86_64-unknown-linux-musl +RUN apt update && apt install -y musl-tools musl-dev protobuf-compiler curl +RUN update-ca-certificates + +WORKDIR /usr/src/app + +RUN mkdir -p crates + +COPY ./.sqlx .sqlx +COPY ./crates/pseudonyms crates/pseudonyms +COPY ./lib lib +COPY ./Cargo.toml . +COPY ./Cargo.lock . + +RUN cargo fetch + +COPY ./proto proto + +RUN cargo build --target x86_64-unknown-linux-musl --release + +FROM scratch +COPY --from=builder /usr/src/app/target/x86_64-unknown-linux-musl/release/warden-pseudonyms ./ +CMD [ "./warden-pseudonyms" ] diff --git a/crates/pseudonyms/tests/grpc/mod.rs b/crates/pseudonyms/tests/grpc/mod.rs new file mode 100644 index 0000000..bfc9852 --- /dev/null +++ b/crates/pseudonyms/tests/grpc/mod.rs @@ -0,0 +1 @@ +mod mutate; diff --git a/crates/pseudonyms/tests/grpc/mutate.rs b/crates/pseudonyms/tests/grpc/mutate.rs new file mode 100644 index 0000000..0f562a4 --- /dev/null +++ b/crates/pseudonyms/tests/grpc/mutate.rs @@ -0,0 +1 @@ +mod create; diff --git a/crates/pseudonyms/tests/grpc/mutate/create.rs b/crates/pseudonyms/tests/grpc/mutate/create.rs new file mode 100644 index 0000000..02f1bc3 --- /dev/null +++ b/crates/pseudonyms/tests/grpc/mutate/create.rs @@ -0,0 +1,23 @@ +use anyhow::Result; +use sqlx::PgPool; +use tonic::{Code, IntoRequest}; +use warden_core::pseudonyms::transaction_relationship::CreatePseudonymRequest; + +use crate::helpers::TestApp; + +#[sqlx::test] +async fn data_loss_tr(pool: PgPool) -> Result<()> { + let mut app = TestApp::new(pool).await; + + let user_request = CreatePseudonymRequest::default(); + + let response = app + .mutate + .create_pseudonym(user_request.into_request()) + .await; + + dbg!(&response); + assert!(response.is_err_and(|value| { value.code() == Code::DataLoss })); + + Ok(()) +} diff --git a/crates/pseudonyms/tests/helpers.rs b/crates/pseudonyms/tests/helpers.rs new file mode 100644 index 0000000..9f512df --- /dev/null +++ b/crates/pseudonyms/tests/helpers.rs @@ -0,0 +1,54 @@ +use sqlx::PgPool; +use warden_stack::{Configuration, cache::RedisManager}; +use tokio::sync::oneshot; +use tonic::transport::Channel; +use warden_core::pseudonyms::transaction_relationship::mutate_pseudonym_client::MutatePseudonymClient; +use warden_pseudonyms::state::{AppHandle, AppState, Services}; + +use std::sync::Arc; + +pub struct TestApp { + state: AppHandle, + pub mutate: MutatePseudonymClient, +} + +impl TestApp { + pub async fn new(pool: PgPool) -> Self { + let (tx, rx) = oneshot::channel(); + // Set port to 0 so tests can spawn multiple servers on OS assigned ports. + // + let config_path = "pseudonyms.toml"; + + let config = config::Config::builder() + .add_source(config::File::new(config_path, config::FileFormat::Toml)) + .build() + .unwrap(); + + let mut config = config.try_deserialize::().unwrap(); + config.application.port = 0; + + let cache = RedisManager::new(&config.cache).await.unwrap(); + + let services = Services { + postgres: pool, + cache, + }; + + let state = AppHandle(Arc::new(AppState::new(services, config, None).unwrap())); + + dbg!(&state.addr.port()); + + tokio::spawn(warden_pseudonyms::run(state.clone(), tx)); + let port = rx.await.expect("channel to be open"); + let addr = format!("http://[::1]:{port}"); + + let mutation_client = MutatePseudonymClient::connect(addr.to_string()) + .await + .expect("expect server to be running"); + + Self { + state, + mutate: mutation_client, + } + } +} diff --git a/crates/pseudonyms/tests/main.rs b/crates/pseudonyms/tests/main.rs new file mode 100644 index 0000000..5dd7f19 --- /dev/null +++ b/crates/pseudonyms/tests/main.rs @@ -0,0 +1,3 @@ +#[cfg(target_os = "linux")] +mod grpc; +mod helpers; -- cgit v1.2.3