#!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # . ./t/cli/common.sh git checkout conf/config.yaml # check restart with old nginx.pid exist echo "-1" > logs/nginx.pid out=$(./bin/apisix start 2>&1 || true) if echo "$out" | grep "the old APISIX is still running"; then rm logs/nginx.pid echo "failed: should reject bad nginx.pid" exit 1 fi ./bin/apisix stop sleep 0.5 rm logs/nginx.pid || true # check no corresponding process make run oldpid=$(< logs/nginx.pid) make stop sleep 0.5 echo $oldpid > logs/nginx.pid out=$(make run || true) if ! echo "$out" | grep "nginx.pid exists but there's no corresponding process with pid"; then echo "failed: should find no corresponding process" exit 1 fi make stop echo "pass: no corresponding process" # check running when run repeatedly out=$(make run; make run || true) if ! echo "$out" | grep "the old APISIX is still running"; then echo "failed: should find APISIX running" exit 1 fi make stop echo "pass: check APISIX running" # check customized config git checkout conf/config.yaml # start with not existed customized config make init if ./bin/apisix start -c conf/not_existed_config.yaml; then echo "failed: apisix still start with invalid customized config.yaml" exit 1 fi # start with customized config echo " deployment: admin: admin_listen: port: 9180 https_admin: true admin_api_mtls: admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt' admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key' admin_key_required: true # Enable Admin API authentication by default for security. admin_key: - name: admin # admin: write access to configurations. key: edd1c9f034335f136f87ad84b625c8f1 role: admin " > conf/customized_config.yaml ./bin/apisix start -c conf/customized_config.yaml # check if .customized_config_path has been created if [ ! -e conf/.customized_config_path ]; then rm conf/customized_config.yaml echo ".customized_config_path should exits" exit 1 fi # check if the custom config is used code=$(curl -k -i -m 20 -o /dev/null -s -w %{http_code} https://127.0.0.1:9180/apisix/admin/routes -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1") if [ ! $code -eq 200 ]; then rm conf/customized_config.yaml echo "failed: customized config.yaml not be used" exit 1 fi make stop # check if .customized_config_path has been removed if [ -e conf/.customized_config_path ]; then rm conf/customized_config_path.yaml echo ".customized_config_path should be removed" exit 1 fi # start with invalied config echo "abc" > conf/customized_config.yaml if ./bin/apisix start -c conf/customized_config.yaml ; then rm conf/customized_config.yaml echo "start should be failed" exit 1 fi # check if apisix can be started use correctly default config. (https://github.com/apache/apisix/issues/9700) ./bin/apisix start sleep 1 admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g') echo "look here" $admin_key code=$(curl -k -i -m 20 -o /dev/null -s -w %{http_code} http://127.0.0.1:9180/apisix/admin/routes -H "X-API-KEY: $admin_key") if [ ! $code -eq 200 ]; then rm conf/customized_config.yaml echo "failed: should use default config" exit 1 fi make stop # check if apisix can be started after multiple start failures. (https://github.com/apache/apisix/issues/9171) echo " deployment: admin: admin_listen: port: 9180 https_admin: true admin_api_mtls: admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt' admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key' etcd: host: - http://127.0.0.1:22379 " > conf/customized_config.yaml ./bin/apisix start -c conf/customized_config.yaml || true ./bin/apisix start -c conf/customized_config.yaml || true ./bin/apisix start -c conf/customized_config.yaml || true echo " deployment: admin: admin_listen: port: 9180 https_admin: true admin_api_mtls: admin_ssl_cert: '../t/certs/apisix_admin_ssl.crt' admin_ssl_cert_key: '../t/certs/apisix_admin_ssl.key' admin_key_required: true # Enable Admin API authentication by default for security. admin_key: - name: admin # admin: write access to configurations. key: edd1c9f034335f136f87ad84b625c8f1 role: admin " > conf/customized_config.yaml ./bin/apisix start -c conf/customized_config.yaml code=$(curl -k -i -m 20 -o /dev/null -s -w %{http_code} https://127.0.0.1:9180/apisix/admin/routes -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1") if [ ! $code -eq 200 ]; then rm conf/customized_config.yaml echo "failed: should use default config" exit 1 fi rm conf/customized_config.yaml echo "passed: test customized config successful" # test quit command bin/apisix start if ! ps -ef | grep "apisix" | grep "master process" | grep -v "grep"; then echo "apisix not started" exit 1 fi bin/apisix quit sleep 2 if ps -ef | grep "worker process is shutting down" | grep -v "grep"; then echo "all workers should exited" exit 1 fi echo "passed: test quit command successful" # test reload command bin/apisix start if ! ps -ef | grep "apisix" | grep "master process" | grep -v "grep"; then echo "apisix not started" exit 1 fi bin/apisix reload sleep 3 if ps -ef | grep "worker process is shutting down" | grep -v "grep"; then echo "old workers should exited" exit 1 fi echo "passed: test reload command successful"