blob: 24f0de50afd196eeeef9e849e6506fc6abf6776f [file]
#!/bin/sh
# 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.
set -eu
repository_root=$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)
temporary_directory=$(mktemp -d)
trap 'rm -f "$temporary_directory"/*.json; rmdir "$temporary_directory"' EXIT HUP INT TERM
assert_binding() {
config_file=$1
service=$2
target=$3
published=$4
host_ip=$5
jq -e \
--arg service "$service" \
--argjson target "$target" \
--arg published "$published" \
--arg host_ip "$host_ip" \
'.services[$service].ports
| any(.target == $target
and .published == $published
and .host_ip == $host_ip)' \
"$config_file" > /dev/null
}
assert_all_bindings() {
config_file=$1
expected_host=$2
jq -e \
--arg expected_host "$expected_host" \
'[.services[]?.ports[]?] | length > 0 and all(.host_ip == $expected_host)' \
"$config_file" > /dev/null
}
assert_non_hertzbeat_bindings() {
config_file=$1
expected_host=$2
jq -e \
--arg expected_host "$expected_host" \
'[.services | to_entries[] | select(.key != "hertzbeat") | .value.ports[]?]
| all(.host_ip == $expected_host)' \
"$config_file" > /dev/null
}
for variant in \
hertzbeat-mysql-iotdb \
hertzbeat-mysql-tdengine \
hertzbeat-mysql-victoria-metrics \
hertzbeat-postgresql-greptimedb \
hertzbeat-postgresql-victoria-metrics
do
compose_file="${repository_root}/script/docker-compose/${variant}/docker-compose.yaml"
default_config="${temporary_directory}/${variant}-default.json"
override_config="${temporary_directory}/${variant}-override.json"
unset HERTZBEAT_BIND_ADDRESS HERTZBEAT_OTLP_BIND_ADDRESS
POSTGRES_PASSWORD=compose-config-test \
docker compose -f "$compose_file" config --format json > "$default_config"
HERTZBEAT_BIND_ADDRESS=192.0.2.10 \
HERTZBEAT_OTLP_BIND_ADDRESS=192.0.2.20 \
POSTGRES_PASSWORD=compose-config-test \
docker compose -f "$compose_file" config --format json > "$override_config"
assert_all_bindings "$default_config" 127.0.0.1
for service_port in 1157 1158; do
assert_binding "$override_config" hertzbeat "$service_port" "$service_port" 192.0.2.10
done
assert_binding "$override_config" hertzbeat 14317 14317 192.0.2.20
assert_non_hertzbeat_bindings "$override_config" 127.0.0.1
done
echo "Quick-start Compose listener bindings are valid."