#!/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 < $test_tmpdir/www/metadata.yml EOF2 touch $test_tmpdir/mysql/metadata.yml cat < $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 < $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 < $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 < $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 < $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 < $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 < $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 < $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 < $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 < $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 < $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 < $test_tmpdir/www/metadata.yml uses: mysql-db: constraint: optional auto: pair default-options: label: from-default-options label2: from-default-options EOF2 cat < $test_tmpdir/mysql/metadata.yml provides: mysql-db: EOF2 cat < $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 < $test_tmpdir/www/metadata.yml uses: mysql-db: constraint: optional auto: pair default-options: label: from-default-options label2: from-default-options EOF2 cat < $test_tmpdir/mysql/metadata.yml provides: mysql-db: EOF2 cat < $test_tmpdir/mysql2/metadata.yml provides: mysql-db: EOF2 cat < $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 < $test_tmpdir/www/metadata.yml EOF2 cat < $test_tmpdir/mysql/metadata.yml EOF2 cat < $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 < $test_tmpdir/www/metadata.yml provides: www-proxy: EOF2 cat < $test_tmpdir/mysql/metadata.yml uses: www-proxy: constraint: optional auto: pair EOF2 cat < $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 $*