#!/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.
#

# validate the config.yaml

. ./t/cli/common.sh

echo '
discovery:
    nacos:
        host: "127.0.0.1"
' > conf/config.yaml

out=$(make init 2>&1 || true)
if ! echo "$out" | grep 'property "host" validation failed: wrong type: expected array, got string'; then
    echo "failed: should check discovery schema during init"
    exit 1
fi

echo '
discovery:
    unknown:
        host: "127.0.0.1"
' > conf/config.yaml

if ! make init; then
    echo "failed: should ignore discovery without schema"
    exit 1
fi

echo "passed: check discovery schema during init"

echo '
apisix:
  dns_resolver_valid: "/apisix"
' > conf/config.yaml

out=$(make init 2>&1 || true)
if ! echo "$out" | grep 'property "dns_resolver_valid" validation failed: wrong type: expected integer, got string'; then
    echo "failed: dns_resolver_valid should be a number"
    exit 1
fi

echo "passed: dns_resolver_valid should be a number"

echo '
apisix:
  ssl:
    ssl_trusted_certificate: t/certs/mtls_ca.crt
' > conf/config.yaml

out=$(make run 2>&1)
if echo "$out" | grep 'no such file'; then
    echo "failed: find the certificate correctly"
    exit 1
fi
make stop

echo "passed: find the certificate correctly"

echo '
apisix:
    node_listen: 9080
    enable_admin: true
    port_admin: 9180
    stream_proxy:
        tcp:
            - "localhost:9100"
        udp:
            - "127.0.0.1:9101"
' > conf/config.yaml

out=$(make run 2>&1 || echo "ouch")
if echo "$out" | grep 'ouch'; then
    echo "failed: allow configuring address in stream_proxy"
    exit 1
fi
make stop

echo "passed: allow configuring address in stream_proxy"

sed -i 's/^  \(node_listen:\)/  #\1/g' conf/config-default.yaml
sed -i 's/^    \(- 9080\)/    #\1/g' conf/config-default.yaml
sed -i 's/^  # \(node_listen: 9080\)/  \1/g' conf/config-default.yaml

echo '
apisix:
    node_listen:
      - 9080
      - 9081
' > conf/config.yaml

out=$(make init 2>&1 || true)
if ! echo "$out"; then
    echo "failed: allow configuring node_listen as a number in the default config"
    exit 1
fi
git checkout conf/config-default.yaml

echo "passed: allow configuring node_listen as a number in the default config"

# apisix test
git checkout conf/config.yaml

out=$(./bin/apisix test 2>&1 || true)
if ! echo "$out" | grep "configuration test is successful"; then
    echo "failed: configuration test should be successful"
    exit 1
fi

echo "pass: apisix test"

./bin/apisix start
sleep 1 # wait for apisix starts

# set invalid configuration
echo '
nginx_config:
    main_configuration_snippet: |
        notexist on;
' > conf/config.yaml

# apisix restart
out=$(./bin/apisix restart 2>&1 || true)
if ! (echo "$out" | grep "\[emerg\] unknown directive \"notexist\"") && ! (echo "$out" | grep "APISIX is running"); then
    echo "failed: should restart failed when configuration invalid"
    exit 1
fi

echo "passed: apisix restart"

# apisix test - failure scenario
out=$(./bin/apisix test 2>&1 || true)
if ! echo "$out" | grep "configuration test failed"; then
    echo "failed: should test failed when configuration invalid"
    exit 1
fi

# apisix test failure should not affect apisix stop
out=$(./bin/apisix stop 2>&1 || true)
if echo "$out" | grep "\[emerg\] unknown directive \"notexist\""; then
    echo "failed: `apisix test` failure should not affect `apisix stop`"
    exit 1
fi

echo "passed: apisix test(failure scenario)"

echo '
plugins:
- batch-requests
nginx_config:
    http:
        real_ip_from:
        - "127.0.0.2"
' > conf/config.yaml

out=$(make init 2>&1 || true)
if ! echo "$out" | grep "missing '127.0.0.1' in the nginx_config.http.real_ip_from for plugin batch-requests"; then
    echo "failed: should check the realip configuration for batch-requests"
    exit 1
fi

echo "passed: check the realip configuration for batch-requests"
