You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

533 lines
8.6 KiB

#!/usr/bin/env bash-shlib
# -*- mode: shell-script -*-
include shunit
depends sed grep git mkdir readlink
export -f matches
export grep
tmp=/tmp
tprog="../bin/compose-core"
tprog=$(readlink -f $tprog)
export PATH=".:$PATH"
short_tprog=$(basename "$tprog")
##
## Convenience function
##
init_test() {
test_tmpdir=$(mktemp -d -t tmp.XXXXXXXXXX)
cd "$test_tmpdir"
export CACHEDIR="$test_tmpdir/.cache"
export VARDIR="$test_tmpdir/.var"
mkdir -p "$CACHEDIR"
}
tear_test() {
rm -rf "$test_tmpdir"
}
##
## Tests
##
function test_all_relations_simple {
init_test
export DISABLE_SYSTEM_CONFIG_FILE=true
assert_list <<EOF
### Testing simple case
## -- simple case with only one service with one relation, no uses/provides
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
EOF2
touch $test_tmpdir/mysql/metadata.yml
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
relations:
mysql-db:
mysql:
label: value
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql | tr '\0' '\n') || exit 3
expected="www
mysql-db
mysql
label: value
True"
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "\$out"
exit 1
}
## -- simple case, 1 uses, already present
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
default-options:
label: from-default-options
label2: from-default-options
EOF2
touch $test_tmpdir/mysql/metadata.yml
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
relations:
mysql-db:
mysql:
label: value
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql | tr '\0' '\n') || exit 3
expected="www
mysql-db
mysql
label: value
label2: from-default-options
True"
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo --- OUT: >&2
echo "\$out" >&2
exit 1
}
## -- simple case, 1 uses, optional, not present
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
default-options:
label: from-default-options
label2: from-default-options
EOF2
touch $test_tmpdir/mysql/metadata.yml
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql 2>&1 >/dev/null) || exit 3
expected=""
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "\$out"
exit 1
}
out=\$(set -o pipefail
get_all_relations www mysql | tr '\0' '\n') || exit 3
expected=""
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "\$out"
exit 1
}
## -- simple case, 1 uses, optional with solves, not present
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
solves:
missing-feature: foo
default-options:
label: from-default-options
label2: from-default-options
EOF2
touch $test_tmpdir/mysql/metadata.yml
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql 2>&1 >/dev/null) || exit 3
expected="Notice"
[[ "\$out" == *"\$expected"* ]] || {
echo "doesn't contain: \$expected" >&2
echo "\$out"
exit 1
}
## -- simple case, 1 uses, auto-pair, present
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
auto: pair
default-options:
label: from-default-options
label2: from-default-options
EOF2
touch $test_tmpdir/mysql/metadata.yml
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
relations:
mysql-db:
mysql:
label: value
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql | tr '\0' '\n') || exit 3
expected="www
mysql-db
mysql
label: value
label2: from-default-options
True"
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "\$out"
exit 1
}
## -- simple case, 1 uses, auto-pair, not present, no provider
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
auto: pair
default-options:
label: from-default-options
label2: from-default-options
EOF2
touch $test_tmpdir/mysql/metadata.yml
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql | tr '\0' '\n') || exit 3
expected=""
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "\$out"
exit 1
}
## -- simple case, 1 uses, auto-pair, not present, 1 provider
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
auto: pair
default-options:
label: from-default-options
label2: from-default-options
EOF2
cat <<EOF2 > $test_tmpdir/mysql/metadata.yml
provides:
mysql-db:
EOF2
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql | tr '\0' '\n') || exit 3
expected="www
mysql-db
mysql
label: from-default-options
label2: from-default-options
True"
[[ "\$out" == "\$expected" ]] || {
echo "--- EXPECTED" >&2
echo "\$expected" >&2
echo "--- OUT" >&2
echo "\$out" >&2
exit 1
}
## -- simple case, 1 uses, auto-pair, not present, 2 providers
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql,mysql2}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
uses:
mysql-db:
constraint: optional
auto: pair
default-options:
label: from-default-options
label2: from-default-options
EOF2
cat <<EOF2 > $test_tmpdir/mysql/metadata.yml
provides:
mysql-db:
EOF2
cat <<EOF2 > $test_tmpdir/mysql2/metadata.yml
provides:
mysql-db:
EOF2
cat <<EOF2 > $test_tmpdir/compose.yml
www:
charm: www
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www mysql mysql2 2>&1 >/dev/null) || exit 3
expected="> 1"
[[ "\$out" == *"\$expected"* ]] || {
echo "doesn't contain: \$expected" >&2
echo "\$out"
exit 1
}
# Remember, it is cached
out=\$(set -o pipefail
get_all_relations www mysql mysql2 | tr '\0' '\n') || exit 3
expected=""
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "\$out"
exit 1
}
EOF
tear_test
}
function test_all_relations_missing {
init_test
export DISABLE_SYSTEM_CONFIG_FILE=true
assert_list <<EOF
### Testing missing services at first call
## -- 1 service, connection to another, no use/provide
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
EOF2
cat <<EOF2 > $test_tmpdir/mysql/metadata.yml
EOF2
cat <<EOF2 > $test_tmpdir/compose.yml
www:
relations:
mysql-db: mysql
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www | tr '\0' '\n') || exit 3
expected="www
mysql-db
mysql
True"
[[ "\$out" == "\$expected" ]] || {
echo "doesn't end with: \$expected" >&2
echo "OUT:" >&2
echo "\$out" >&2
exit 1
}
## -- 1 service, connection to another that auto-pair with first
export CHARM_STORE=$test_tmpdir
mkdir -p $test_tmpdir/{www,mysql}
cat <<EOF2 > $test_tmpdir/www/metadata.yml
provides:
www-proxy:
EOF2
cat <<EOF2 > $test_tmpdir/mysql/metadata.yml
uses:
www-proxy:
constraint: optional
auto: pair
EOF2
cat <<EOF2 > $test_tmpdir/compose.yml
www:
relations:
mysql-db: mysql
EOF2
. "$tprog"
_setup_state_dir
COMPOSE_YML_FILE=$test_tmpdir/compose.yml
out=\$(set -o pipefail
get_all_relations www | tr '\0' '\n') || exit 3
expected="\
www
mysql-db
mysql
True
mysql
www-proxy
www
True"
[[ "\$out" == "\$expected" ]] || {
echo "DIFF:" >&2
diff -u <(echo "\$expected") <(echo "\$out") >&2
exit 1
}
EOF
tear_test
}
continue_on_error="0" testbench $*