From aa414cdd9fc7fec8c0d94bb41be5135e65ba9609 Mon Sep 17 00:00:00 2001 From: Jean-Yves <7360784+docjyJ@users.noreply.github.com> Date: Sat, 21 Sep 2024 19:55:36 +0200 Subject: [PATCH] Test: Create test script to validate script (#21) * Update test.sh Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> * Update test.sh Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> * Add healthcheck.sh Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> * fix curl version Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> --------- Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> --- Dockerfile | 8 +++++++- healthcheck.sh | 3 +++ test.sh | 46 +++++++++++++++++++++++++++++++++++++--------- 3 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 healthcheck.sh diff --git a/Dockerfile b/Dockerfile index 287d74d..58b1328 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,8 +2,14 @@ FROM stalwartlabs/mail-server:v0.9.4 COPY --chmod=775 entrypoint.sh /entrypoint.sh +COPY --chmod=775 healthcheck.sh /healthcheck.sh + +RUN apt-get install --no-install-recommends -y curl=7.88.1-10+deb12u7 EXPOSE 10003 -ENTRYPOINT [ "/bin/bash", "/entrypoint.sh" ] +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \ + CMD bash /healthcheck.sh + +ENTRYPOINT [ "/entrypoint.sh" ] CMD ["/usr/local/bin/stalwart-mail", "--config", "/opt/stalwart-mail/etc/config.toml"] diff --git a/healthcheck.sh b/healthcheck.sh new file mode 100644 index 0000000..0234f29 --- /dev/null +++ b/healthcheck.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +test "$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:10003/healthz/ready)" == "200" diff --git a/test.sh b/test.sh index 9b8667a..7ca29da 100755 --- a/test.sh +++ b/test.sh @@ -1,16 +1,44 @@ #!/bin/bash -# NOTE: This script use podman instead of docker ! -docker() { - podman "$@" +STEP_NB=5 +STEP_I=0 +print_step() { + STEP_I=$((STEP_I+1)) + echo "" + echo "=====[$STEP_I/$STEP_NB]=====" + echo "$3" } -# -# Work in progress -# -IMAGE=$(docker build . | tee /dev/tty | tail -n 1) +NC_DOMAIN="example.com" +CADDY="my_caddy_example_com" +STALWART="my_stalwart_example_com" +SSL_PATH="caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.$NC_DOMAIN" +PASSWORD="password" -echo "Script generated :" +print_step "Build Docker Image" +docker container rm $STALWART -f +docker volume rm $STALWART $CADDY -f +docker build -t "$STALWART" . +echo "docker run --rm -v $STALWART:/opt/stalwart-mail -v $CADDY:/caddy:ro --env "NC_DOMAIN=$NC_DOMAIN" $STALWART stalwart-cli --help" -docker run --rm --env AUTO_CONFIG_TLS_CERT=OFF "$IMAGE" cat /opt/stalwart-mail/etc/config.toml + +print_step "Generate prepare env" +docker run --rm -v $CADDY:/ssl --entrypoint /bin/mkdir $STALWART -p "/ssl/$SSL_PATH/" +docker run --rm -v $CADDY:/ssl --entrypoint /bin/openssl $STALWART req -x509 -noenc -subj "/C=AA/ST=A/O=A/CN=mail.$NC_DOMAIN" -keyout "/ssl/$SSL_PATH/mail.$NC_DOMAIN.key" -out "/ssl/$SSL_PATH/mail.$NC_DOMAIN.crt" + +print_step "Run container" +docker run --rm -v $CADDY:/caddy:ro -v $STALWART:/opt/stalwart-mail \ + -e "NC_DOMAIN=$NC_DOMAIN" \ + -e "STALWART_USER_PASS=$PASSWORD" \ + --name $STALWART $STALWART & +STALWART_PID=$! +sleep 11 + +print_step "Test" +docker exec $STALWART stalwart-cli -u http://127.0.0.1:10003 -c "admin:$PASSWORD" server list-config | sort > out.txt + +print_step "Remove volume" +docker container rm $STALWART -f +docker volume rm $STALWART $CADDY +tail --pid=$STALWART_PID -f /dev/null