Files
deb-python-fuelclient/tools/prepare_nailgun.sh
Roman Prykhodchenko 224b490d7d Tox to manage all test environments on its own
Functional tests have been moved to a separate tox
enviroment called functional, so running either py26
or py27 one will only trigger unit tests.

Scripts for prepairing and cleaning up Nailgun environments
have been factored out of run_tests.sh.

run_tests.sh is kept just compatibility reasons and will be
removed once FuelCI is updated.

DocImpact
Partial-bug: #1476808
Closes-bug: #1486030
Change-Id: I492ce5d1ed26a182cc6876594d4508088afd5411
2015-08-19 11:45:24 +02:00

155 lines
3.8 KiB
Bash

#!/bin/bash
# Copyright 2015 Mirantis, Inc.
#
# Licensed 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
NAILGUN_CONFIG=$ARTIFACTS/test.yaml
err() {
printf "%s\n" "$1" >&2
}
msg() {
printf "%s\n" "$1"
}
# Synchronizes the schema of the database and loads default data.
setup_db() {
msg "Setting up database."
pushd $NAILGUN_ROOT > /dev/null
tox -e venv -- python manage.py syncdb > /dev/null
tox -e venv -- python manage.py loaddefault > /dev/null
popd > /dev/null
}
# Returns: a server pid, that you have to close manually
run_server() {
local run_server_cmd="\
python manage.py run \
--port=$NAILGUN_PORT \
--config=$NAILGUN_CONFIG \
--fake-tasks \
--fake-tasks-tick-count=80 \
--fake-tasks-tick-interval=1"
local server_log=$(mktemp $ARTIFACTS/test_nailgun_cli_server.XXXX)
local check_url="http://0.0.0.0:${NAILGUN_PORT}${NAILGUN_CHECK_PATH}"
# run new server instance
pushd $NAILGUN_ROOT > /dev/null
tox -e venv -- $run_server_cmd >> $server_log 2>&1 &
popd > /dev/null
# Wait for server's availability
which curl > /dev/null
if [[ $? -eq 0 ]]; then
local num_retries=$((NAILGUN_START_MAX_WAIT_TIME * 10))
local i=0
while true; do
# Fail if number of retries exeeded
if [[ $i -gt $((num_retries + 1)) ]]; then return 1; fi
local http_code=$(curl -s -w %{http_code} -o /dev/null $check_url)
if [[ "$http_code" = "200" ]]; then return 0; fi
sleep 0.1
i=$((i + 1))
done
else
err "Failed to start Nailgun in ${NAILGUN_START_MAX_WAIT_TIME} seconds."
exit 1
fi
}
# Set up test environment
prepare_env() {
mkdir -p $ARTIFACTS
}
# Generates server configuration file
create_settings_yaml() {
cat > $NAILGUN_CONFIG <<EOL
DEVELOPMENT: 1
STATIC_DIR: ${ARTIFACTS}/static_compressed
TEMPLATE_DIR: ${ARTIFACTS}/static_compressed
DATABASE:
name: ${TEST_NAILGUN_DB}
engine: "postgresql"
host: "localhost"
port: "5432"
user: "nailgun"
passwd: "nailgun"
API_LOG: ${ARTIFACTS}/api.log
APP_LOG: ${ARTIFACTS}/app.log
EOL
# Create appropriate Fuel Client config
cat > $FUELCLIENT_CUSTOM_SETTINGS <<EOL
# Connection settings
SERVER_ADDRESS: "127.0.0.1"
LISTEN_PORT: "${NAILGUN_PORT}"
KEYSTONE_USER: "admin"
KEYSTONE_PASS: "admin"
EOL
}
# Clones Nailgun from git, pulls specified patch and
# switches to the specified commit
obtain_nailgun() {
err "Obtaining Nailgun with the revision $FUEL_COMMIT"
if [[ "$FUEL_WEB_CLONE" == "yes" ]]; then
git clone $FUEL_WEB_REPO $FUEL_WEB_ROOT || \
{ err "Failed to clone Nailgun"; exit 1; }
fi
if [[ ! -d "$NAILGUN_ROOT" ]]; then
err "Nailgun directory $NAILGUN_ROOT not found."
exit 1
fi
pushd "$NAILGUN_ROOT" > /dev/null
echo $FETCH_REPO
if [[ -n $FETCH_REPO ]]; then
err "Fetching changes from $FETCH_REPO $FETCH_REFSPEC"
git fetch "$FETCH_REPO" "$FETCH_REFSPEC" || \
{ err "Failed to pull changes"; exit 1; }
fi
git checkout "$FUEL_COMMIT" || \
{ err "Failed to checkout to $FUEL_COMMIT"; exit 1; }
popd > /dev/null
}
prepare_env
obtain_nailgun
create_settings_yaml
setup_db
run_server