diff --git a/comps/nginx/docker/Dockerfile b/comps/nginx/docker/Dockerfile index 0aab193bc..6816fb0a5 100644 --- a/comps/nginx/docker/Dockerfile +++ b/comps/nginx/docker/Dockerfile @@ -14,4 +14,7 @@ ENV BACKEND_SERVICE_NAME=chatqna ENV BACKEND_SERVICE_IP=localhost ENV BACKEND_SERVICE_PORT=8888 -CMD /bin/sh -c "envsubst '${FRONTEND_SERVICE_IP} ${FRONTEND_SERVICE_PORT} ${BACKEND_SERVICE_NAME} ${BACKEND_SERVICE_IP} ${BACKEND_SERVICE_PORT}' < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" +COPY start-nginx.sh /usr/local/bin/start-nginx.sh +RUN chmod +x /usr/local/bin/start-nginx.sh + +CMD ["/usr/local/bin/start-nginx.sh"] diff --git a/comps/nginx/docker/nginx.conf.template b/comps/nginx/docker/nginx.conf.template index 6a823d354..5ba7223fc 100644 --- a/comps/nginx/docker/nginx.conf.template +++ b/comps/nginx/docker/nginx.conf.template @@ -7,8 +7,7 @@ server { listen [::]:80; location /home { - root /usr/share/nginx/html; - index index.html index.htm; + alias /usr/share/nginx/html/index.html; } location / { diff --git a/comps/nginx/docker/start-nginx.sh b/comps/nginx/docker/start-nginx.sh new file mode 100644 index 000000000..2a2a4d242 --- /dev/null +++ b/comps/nginx/docker/start-nginx.sh @@ -0,0 +1,6 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +#!/bin/sh +envsubst '${FRONTEND_SERVICE_IP} ${FRONTEND_SERVICE_PORT} ${BACKEND_SERVICE_NAME} ${BACKEND_SERVICE_IP} ${BACKEND_SERVICE_PORT}' < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf +nginx -g 'daemon off;' diff --git a/tests/test_nginx.sh b/tests/test_nginx.sh new file mode 100644 index 000000000..3675a5753 --- /dev/null +++ b/tests/test_nginx.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +set -x + +WORKPATH=$(dirname "$PWD") +LOG_PATH="$WORKPATH/tests" +ip_address=$(hostname -I | awk '{print $1}') + +function build_docker_images() { + cd $WORKPATH/comps/nginx/docker + docker build --no-cache --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -t opea/nginx:comps -f ./Dockerfile . + if [ $? -ne 0 ]; then + echo "opea/nginx built fail" + exit 1 + else + echo "opea/nginx built successful" + fi +} + +function start_service() { + export NGINX_PORT=80 + + # Start Docker Containers + docker run -d --name test-comps-nginx-server -p 80:80 opea/nginx:comps + + sleep 5s +} + +function validate_service() { + NGINX_PORT=80 + URL="http://${ip_address}:${NGINX_PORT}/home" + DOCKER_NAME="test-comps-nginx-server" + SERVICE_NAME="nginx" + EXPECTED_RESULT="Welcome to nginx!" + + HTTP_RESPONSE=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" "$URL") + HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') + RESPONSE_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g') + + docker logs ${DOCKER_NAME} >> ${LOG_PATH}/${SERVICE_NAME}.log + + # check response status + if [ "$HTTP_STATUS" -ne "200" ]; then + echo "[ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS" + exit 1 + else + echo "[ $SERVICE_NAME ] HTTP status is 200. Checking content..." + fi + # check response body + if [[ "$RESPONSE_BODY" != *"$EXPECTED_RESULT"* ]]; then + echo "[ $SERVICE_NAME ] Content does not match the expected result: $RESPONSE_BODY" + exit 1 + else + echo "[ $SERVICE_NAME ] Content is as expected." + fi +} + +function stop_docker() { + cid=$(docker ps -aq --filter "name=test-comps-nginx*") + if [[ ! -z "$cid" ]]; then docker stop $cid && docker rm $cid && sleep 1s; fi +} + +function main() { + + stop_docker + build_docker_images + start_service + + validate_service + + echo y | docker system prune + +} + +main