From dc62db979e1360d3ab90778d2fc76f7943fe2168 Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 25 Jan 2016 22:43:45 +0100 Subject: [PATCH] add tests --- .gitignore | 4 + metadata.yml | 3 + tests/pillar/agent_cluster.sls | 24 +++++ tests/pillar/agent_single.sls | 23 +++++ tests/pillar/server_cluster.sls | 41 ++++++++ tests/pillar/server_single.sls | 35 +++++++ tests/run_tests.sh | 160 ++++++++++++++++++++++++++++++++ 7 files changed, 290 insertions(+) create mode 100644 .gitignore create mode 100644 metadata.yml create mode 100644 tests/pillar/agent_cluster.sls create mode 100644 tests/pillar/agent_single.sls create mode 100644 tests/pillar/server_cluster.sls create mode 100644 tests/pillar/server_single.sls create mode 100755 tests/run_tests.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bfce6e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +tests/build/ +*.swp +*.pyc +.ropeproject \ No newline at end of file diff --git a/metadata.yml b/metadata.yml new file mode 100644 index 0000000..d2d44ab --- /dev/null +++ b/metadata.yml @@ -0,0 +1,3 @@ +name: "ceilometer" +version: "0.2" +source: "https://github.com/tcpcloud/salt-formula-ceilometer" \ No newline at end of file diff --git a/tests/pillar/agent_cluster.sls b/tests/pillar/agent_cluster.sls new file mode 100644 index 0000000..a3e9d4c --- /dev/null +++ b/tests/pillar/agent_cluster.sls @@ -0,0 +1,24 @@ +ceilometer: + agent: + enabled: true + version: liberty + secret: password + publisher: + default: + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: ceilometer + password: password + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: ${_param:rabbitmq_openstack_password} + virtual_host: '/openstack' + ha_queues: true + # Workaround for https://bugs.launchpad.net/ceilometer/+bug/1337715 + rpc_thread_pool_size: 5 diff --git a/tests/pillar/agent_single.sls b/tests/pillar/agent_single.sls new file mode 100644 index 0000000..a4e54de --- /dev/null +++ b/tests/pillar/agent_single.sls @@ -0,0 +1,23 @@ +ceilometer: + agent: + enabled: true + version: liberty + secret: password + publisher: + default: + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: ceilometer + password: password + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: password + virtual_host: '/openstack' + # Workaround for https://bugs.launchpad.net/ceilometer/+bug/1337715 + rpc_thread_pool_size: 5 diff --git a/tests/pillar/server_cluster.sls b/tests/pillar/server_cluster.sls new file mode 100644 index 0000000..b273bd3 --- /dev/null +++ b/tests/pillar/server_cluster.sls @@ -0,0 +1,41 @@ +ceilometer: + server: + enabled: true + version: liberty + cluster: true + secret: password + ttl: 86400 + publisher: + default: + bind: + host: 127.0.0.1 + port: 8777 + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: ceilometer + password: password + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: password + virtual_host: '/openstack' + ha_queues: true + # Workaround for https://bugs.launchpad.net/ceilometer/+bug/1337715 + rpc_thread_pool_size: 5 + database: + engine: mongodb + members: + - host: 127.0.0.1 + port: 27017 + - host: 127.0.0.1 + port: 27017 + - host: 127.0.0.1 + port: 27017 + name: ceilometer + user: ceilometer + password: password diff --git a/tests/pillar/server_single.sls b/tests/pillar/server_single.sls new file mode 100644 index 0000000..201f3d1 --- /dev/null +++ b/tests/pillar/server_single.sls @@ -0,0 +1,35 @@ +ceilometer: + server: + enabled: true + version: liberty + secret: password + ttl: 86400 + publisher: + default: + bind: + host: 127.0.0.1 + port: 8777 + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: ceilometer + password: password + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: password + virtual_host: '/openstack' + ha_queues: true + # Workaround for https://bugs.launchpad.net/ceilometer/+bug/1337715 + rpc_thread_pool_size: 5 + database: + engine: mongodb + host: 127.0.0.1 + port: 27017 + name: ceilometer + user: ceilometer + password: password diff --git a/tests/run_tests.sh b/tests/run_tests.sh new file mode 100755 index 0000000..1f1316f --- /dev/null +++ b/tests/run_tests.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +set -e +[ -n "$DEBUG" ] && set -x + +CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +METADATA=${CURDIR}/../metadata.yml +FORMULA_NAME=$(cat $METADATA | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']") + +## Overrideable parameters +PILLARDIR=${PILLARDIR:-${CURDIR}/pillar} +BUILDDIR=${BUILDDIR:-${CURDIR}/build} +VENV_DIR=${VENV_DIR:-${BUILDDIR}/virtualenv} +DEPSDIR=${BUILDDIR}/deps + +SALT_FILE_DIR=${SALT_FILE_DIR:-${BUILDDIR}/file_root} +SALT_PILLAR_DIR=${SALT_PILLAR_DIR:-${BUILDDIR}/pillar_root} +SALT_CONFIG_DIR=${SALT_CONFIG_DIR:-${BUILDDIR}/salt} +SALT_CACHE_DIR=${SALT_CACHE_DIR:-${SALT_CONFIG_DIR}/cache} + +SALT_OPTS="${SALT_OPTS} --retcode-passthrough --local -c ${SALT_CONFIG_DIR}" + +if [ "x${SALT_VERSION}" != "x" ]; then + PIP_SALT_VERSION="==${SALT_VERSION}" +fi + +## Functions +log_info() { + echo "[INFO] $*" +} + +log_err() { + echo "[ERROR] $*" >&2 +} + +setup_virtualenv() { + log_info "Setting up Python virtualenv" + virtualenv $VENV_DIR + source ${VENV_DIR}/bin/activate + pip install salt${PIP_SALT_VERSION} +} + +setup_pillar() { + [ ! -d ${SALT_PILLAR_DIR} ] && mkdir -p ${SALT_PILLAR_DIR} + echo "base:" > ${SALT_PILLAR_DIR}/top.sls + for pillar in ${PILLARDIR}/*; do + state_name=$(basename ${pillar%.sls}) + echo -e " ${state_name}:\n - ${state_name}" >> ${SALT_PILLAR_DIR}/top.sls + done +} + +setup_salt() { + [ ! -d ${SALT_FILE_DIR} ] && mkdir -p ${SALT_FILE_DIR} + [ ! -d ${SALT_CONFIG_DIR} ] && mkdir -p ${SALT_CONFIG_DIR} + [ ! -d ${SALT_CACHE_DIR} ] && mkdir -p ${SALT_CACHE_DIR} + + echo "base:" > ${SALT_FILE_DIR}/top.sls + for pillar in ${PILLARDIR}/*.sls; do + state_name=$(basename ${pillar%.sls}) + echo -e " ${state_name}:\n - ${FORMULA_NAME}" >> ${SALT_FILE_DIR}/top.sls + done + + cat << EOF > ${SALT_CONFIG_DIR}/minion +file_client: local +cachedir: ${SALT_CACHE_DIR} +verify_env: False + +file_roots: + base: + - ${SALT_FILE_DIR} + - ${CURDIR}/.. + +pillar_roots: + base: + - ${SALT_PILLAR_DIR} + - ${PILLARDIR} +EOF +} + +fetch_dependency() { + dep_root="${DEPSDIR}/$(basename $1 .git)" + dep_metadata="${dep_root}/metadata.yml" + + [ -d $dep_root ] && log_info "Dependency $1 already fetched" && return 0 + + log_info "Fetching dependency $1" + [ ! -d ${DEPSDIR} ] && mkdir -p ${DEPSDIR} + git clone $1 ${DEPSDIR}/$(basename $1 .git) + + dep_name=$(cat $dep_metadata | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']") + ln -s ${dep_root}/${dep_name} ${SALT_FILE_DIR}/${dep_name} + + METADATA="${dep_metadata}" install_dependencies +} + +install_dependencies() { + grep -E "^dependencies:" ${METADATA} >/dev/null || return 0 + (python - | while read dep; do fetch_dependency "$dep"; done) << EOF +import sys,yaml +for dep in yaml.load(open('${METADATA}', 'ro'))['dependencies']: + print dep["source"] +EOF +} + +clean() { + log_info "Cleaning up ${BUILDDIR}" + [ -d ${BUILDDIR} ] && rm -rf ${BUILDDIR} || exit 0 +} + +salt_run() { + source ${VENV_DIR}/bin/activate + salt-call ${SALT_OPTS} $* +} + +prepare() { + [ -d ${BUILDDIR} ] && mkdir -p ${BUILDDIR} + + setup_virtualenv + setup_pillar + setup_salt + install_dependencies +} + +run() { + for pillar in ${PILLARDIR}/*.sls; do + state_name=$(basename ${pillar%.sls}) + salt_run --id=${state_name} state.show_sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1) + done +} + +_atexit() { + RETVAL=$? + trap true INT TERM EXIT + + if [ $RETVAL -ne 0 ]; then + log_err "Execution failed" + else + log_info "Execution successful" + fi + return $RETVAL +} + +## Main +trap _atexit INT TERM EXIT + +case $1 in + clean) + clean + ;; + prepare) + prepare + ;; + run) + run + ;; + *) + prepare + run + ;; +esac