Vendor dib-run-parts
The dib-utils repository was retired as part of retirement of TripleO. This imports the tiny dib-run-parts script because it's used by os-refresh-config now. This also removes direct execution of os_refresh_config.py, which is required only for testing. Change-Id: Ia516e604bafdc59dbcfa81796348191b03cbe0b7
This commit is contained in:
parent
72929598e7
commit
4b510162e5
@ -1,4 +1,4 @@
|
|||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
test_path=./os_refresh_config/tests
|
test_path=${OS_TEST_PATH:-./os_refresh_config/tests/unit}
|
||||||
top_dir=./
|
top_dir=./
|
||||||
|
|
||||||
|
5
os_refresh_config/os_refresh_config.py
Executable file → Normal file
5
os_refresh_config/os_refresh_config.py
Executable file → Normal file
@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# Copyright 2013 Hewlett-Packard Development Company, L.P.
|
# Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@ -159,7 +158,3 @@ def main(argv=sys.argv):
|
|||||||
log.debug('No dir for phase %s' % phase)
|
log.debug('No dir for phase %s' % phase)
|
||||||
|
|
||||||
return exit(lock)
|
return exit(lock)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main(sys.argv))
|
|
||||||
|
0
os_refresh_config/tests/functional/__init__.py
Normal file
0
os_refresh_config/tests/functional/__init__.py
Normal file
@ -17,16 +17,11 @@ import time
|
|||||||
import fixtures
|
import fixtures
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
script_path = os.path.join(
|
|
||||||
os.path.dirname(os.path.realpath(__file__)),
|
|
||||||
'../os_refresh_config.py')
|
|
||||||
|
|
||||||
|
|
||||||
class TestCmd(testtools.TestCase):
|
class TestCmd(testtools.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestCmd, self).setUp()
|
super(TestCmd, self).setUp()
|
||||||
self.assertTrue(os.path.exists(script_path))
|
|
||||||
self.useFixture(fixtures.NestedTempfile())
|
self.useFixture(fixtures.NestedTempfile())
|
||||||
self.base_dir = self.useFixture(fixtures.TempDir())
|
self.base_dir = self.useFixture(fixtures.TempDir())
|
||||||
self.lockdir = self.useFixture(fixtures.TempDir())
|
self.lockdir = self.useFixture(fixtures.TempDir())
|
||||||
@ -49,8 +44,7 @@ class TestCmd(testtools.TestCase):
|
|||||||
'PATH': os.environ.get('PATH')
|
'PATH': os.environ.get('PATH')
|
||||||
}
|
}
|
||||||
cmd_args = [
|
cmd_args = [
|
||||||
script_path,
|
'os-refresh-config', '--lockfile', self.lockfile
|
||||||
'--lockfile', self.lockfile
|
|
||||||
]
|
]
|
||||||
if args:
|
if args:
|
||||||
cmd_args.extend(args)
|
cmd_args.extend(args)
|
0
os_refresh_config/tests/unit/__init__.py
Normal file
0
os_refresh_config/tests/unit/__init__.py
Normal file
@ -1,3 +1,2 @@
|
|||||||
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
||||||
dib-utils>=0.0.8 # Apache-2.0
|
|
||||||
psutil>=3.2.2 # BSD
|
psutil>=3.2.2 # BSD
|
||||||
|
@ -27,6 +27,8 @@ classifier =
|
|||||||
[files]
|
[files]
|
||||||
packages =
|
packages =
|
||||||
os_refresh_config
|
os_refresh_config
|
||||||
|
scripts =
|
||||||
|
tools/dib-run-parts
|
||||||
|
|
||||||
[entry_points]
|
[entry_points]
|
||||||
console_scripts =
|
console_scripts =
|
||||||
|
144
tools/dib-run-parts
Executable file
144
tools/dib-run-parts
Executable file
@ -0,0 +1,144 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Inspired by Debian and RedHat run-parts but portable and specific to di-b.
|
||||||
|
#
|
||||||
|
# Copyright 2012 Hewlett-Packard Development Company, L.P.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
allowed_regex=${RUN_PARTS_REGEX:-"^[0-9A-Za-z_-]+$"}
|
||||||
|
show_list=
|
||||||
|
|
||||||
|
set -ue
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
name=$(basename $0)
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $name [OPTION] scripts_directory"
|
||||||
|
echo "Option:"
|
||||||
|
echo " --list print names of all valid files"
|
||||||
|
echo
|
||||||
|
echo "Examples:"
|
||||||
|
echo " dib-run-parts --list /opt/stack/os-config-refresh/configure.d/"
|
||||||
|
echo " dib-run-parts /opt/stack/os-config-refresh/configure.d/"
|
||||||
|
exit 1
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
|
||||||
|
output_prefix() {
|
||||||
|
printf "%s %s " "${name}" "$(date)" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
output () {
|
||||||
|
output_prefix
|
||||||
|
echo $* >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
output_printf () {
|
||||||
|
local FORMAT="$1"
|
||||||
|
shift
|
||||||
|
output_prefix
|
||||||
|
printf "${FORMAT}" $@ >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
# source the environment files from environment.d
|
||||||
|
# arg : target_dir
|
||||||
|
source_environment() {
|
||||||
|
|
||||||
|
local dir=$target_dir/../environment.d
|
||||||
|
local env_files
|
||||||
|
local xtrace
|
||||||
|
|
||||||
|
if [ -d ${dir} ] ; then
|
||||||
|
env_files=$(find ${dir} -maxdepth 1 -xtype f | \
|
||||||
|
grep -E "/[0-9A-Za-z_\.-]+$" | \
|
||||||
|
LANG=C sort -n)
|
||||||
|
for env_file in $env_files ; do
|
||||||
|
output "Sourcing environment file ${env_file}"
|
||||||
|
# Set tracing as we import these environment files; it's
|
||||||
|
# nice to see the definitions in the logs
|
||||||
|
xtrace=$(set +o | grep xtrace)
|
||||||
|
set -o xtrace
|
||||||
|
source $env_file
|
||||||
|
$xtrace
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -lt 1 ] ; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" == "--list" ] ; then
|
||||||
|
show_list="1"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
target_dir="${1:-}"
|
||||||
|
|
||||||
|
if ! [ -d "$target_dir" ] ; then
|
||||||
|
output "Scripts directory [$target_dir] must exist and be a directory"
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We specifically only want to sort *by the numbers*.
|
||||||
|
# Lexical sorting is not guaranteed, and identical numbers may be
|
||||||
|
# parallelized later
|
||||||
|
# Note: -maxdepth 1 ensures only files in the target directory (but not
|
||||||
|
# subdirectories) are run, which is the way run-parts behaves.
|
||||||
|
targets=$(find $target_dir -maxdepth 1 -xtype f -executable -printf '%f\n' | grep -E "$allowed_regex" | LANG=C sort -n || echo "")
|
||||||
|
|
||||||
|
if [ "$show_list" == "1" ] ; then
|
||||||
|
for target in $targets ; do
|
||||||
|
echo "${target_dir}/${target}"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
PROFILE_DIR=$(mktemp -d --tmpdir profiledir.XXXXXX)
|
||||||
|
|
||||||
|
# note, run this in a sub-shell so we don't pollute our
|
||||||
|
# own environment with source_environment
|
||||||
|
(
|
||||||
|
source_environment
|
||||||
|
|
||||||
|
for target in $targets ; do
|
||||||
|
output "Running $target_dir/$target"
|
||||||
|
target_tag=${target//\//_}
|
||||||
|
date +%s.%N > $PROFILE_DIR/start_$target_tag
|
||||||
|
$target_dir/$target
|
||||||
|
target_tag=${target//\//_}
|
||||||
|
date +%s.%N > $PROFILE_DIR/stop_$target_tag
|
||||||
|
output "$target completed"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
|
output "----------------------- PROFILING -----------------------"
|
||||||
|
output ""
|
||||||
|
output "Target: $(basename $target_dir)"
|
||||||
|
output ""
|
||||||
|
output_printf "%-40s %9s\n" Script Seconds
|
||||||
|
output_printf "%-40s %9s\n" --------------------------------------- ----------
|
||||||
|
output ""
|
||||||
|
pushd $PROFILE_DIR > /dev/null
|
||||||
|
for target in $(find . -name 'start_*' -printf '%f\n' | env LC_ALL=C sort -n) ; do
|
||||||
|
stop_file=stop_${target##start_}
|
||||||
|
start_seconds=$(cat $target)
|
||||||
|
stop_seconds=$(cat $stop_file)
|
||||||
|
duration=$(echo - | awk "{ print $stop_seconds - $start_seconds }")
|
||||||
|
LC_NUMERIC=C LC_ALL=C output_printf "%-40s %10.3f\n" ${target##start_} $duration
|
||||||
|
done
|
||||||
|
popd > /dev/null
|
||||||
|
rm -rf $PROFILE_DIR
|
||||||
|
output ""
|
||||||
|
output "--------------------- END PROFILING ---------------------"
|
16
tools/tests/run_tests.sh
Executable file
16
tools/tests/run_tests.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Runs all test cases in this directory
|
||||||
|
#
|
||||||
|
|
||||||
|
set -ue
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
TESTS_BASE_DIR=$(cd $(dirname "$0") && pwd)
|
||||||
|
|
||||||
|
for tc in ${TESTS_BASE_DIR}/tc??.sh; do
|
||||||
|
echo "--- Running ${tc} ---"
|
||||||
|
${tc}
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "--- TESTS COMPLETE ---"
|
39
tools/tests/tc01.sh
Executable file
39
tools/tests/tc01.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Runs dib-run-parts on an empty directory.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -ue
|
||||||
|
set -o pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
TESTS_BASE_DIR=$(cd $(dirname "$0") && pwd)
|
||||||
|
|
||||||
|
DRP_BIN=${TESTS_BASE_DIR}/../dib-run-parts
|
||||||
|
|
||||||
|
TEST_EXEC_DIR=${TESTS_BASE_DIR}/tc01/td
|
||||||
|
|
||||||
|
mkdir -p ${TEST_EXEC_DIR}
|
||||||
|
rval=0
|
||||||
|
|
||||||
|
RES=$(${DRP_BIN} --list ${TEST_EXEC_DIR})
|
||||||
|
if test $? -ne 0; then
|
||||||
|
echo "*** FAILED: --list of empty dir failed"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
if test -n "${RES}"; then
|
||||||
|
echo "*** FAILED: --list of empty dir not empty"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RES=$(${DRP_BIN} ${TEST_EXEC_DIR} 2>/dev/null)
|
||||||
|
if test $? -ne 0; then
|
||||||
|
echo "*** FAILED: dib-run-parts on empty dir failed"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
if test -n "${RES}"; then
|
||||||
|
echo "*** FAILED: dib-run-parts on empty dir not empty"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${rval}
|
46
tools/tests/tc02.sh
Executable file
46
tools/tests/tc02.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Runs dib-run-parts on directory containing some scripts.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -ue
|
||||||
|
set -o pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
TESTS_BASE_DIR=$(cd $(dirname "$0") && pwd)
|
||||||
|
|
||||||
|
DRP_BIN=${TESTS_BASE_DIR}/../dib-run-parts
|
||||||
|
|
||||||
|
TEST_EXEC_DIR=${TESTS_BASE_DIR}/tc02/td
|
||||||
|
|
||||||
|
rval=0
|
||||||
|
|
||||||
|
RES=$(${DRP_BIN} --list ${TEST_EXEC_DIR})
|
||||||
|
if test $? -ne 0; then
|
||||||
|
echo "*** FAILED: --list failed"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXPECTED="${TESTS_BASE_DIR}/tc02/td/call_me_1
|
||||||
|
${TESTS_BASE_DIR}/tc02/td/call_me_2"
|
||||||
|
|
||||||
|
if test "${EXPECTED}" != "${RES}"; then
|
||||||
|
echo "*** FAILED: --list returns incorrect result"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RES=$(${DRP_BIN} ${TEST_EXEC_DIR} 2>/dev/null)
|
||||||
|
if test $? -ne 0; then
|
||||||
|
echo "*** FAILED: dib-run-parts on empty dir failed"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXPECTED="call_me_1 called
|
||||||
|
call_me_2 called"
|
||||||
|
|
||||||
|
if test "${EXPECTED}" != "${RES}"; then
|
||||||
|
echo "*** FAILED: dib-run-parts returns incorrect result"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${rval}
|
3
tools/tests/tc02/td/call_me_1
Executable file
3
tools/tests/tc02/td/call_me_1
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "call_me_1 called"
|
3
tools/tests/tc02/td/call_me_2
Executable file
3
tools/tests/tc02/td/call_me_2
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "call_me_2 called"
|
33
tools/tests/tc03.sh
Executable file
33
tools/tests/tc03.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Runs dib-run-parts on directory containing some scripts
|
||||||
|
# and using the environment directory.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -ue
|
||||||
|
set -o pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
TESTS_BASE_DIR=$(dirname $0)
|
||||||
|
|
||||||
|
DRP_BIN=${TESTS_BASE_DIR}/../dib-run-parts
|
||||||
|
|
||||||
|
TEST_EXEC_DIR=${TESTS_BASE_DIR}/tc03/td
|
||||||
|
|
||||||
|
rval=0
|
||||||
|
|
||||||
|
RES=$(${DRP_BIN} ${TEST_EXEC_DIR} 2>/dev/null)
|
||||||
|
if test $? -ne 0; then
|
||||||
|
echo "*** FAILED: dib-run-parts failed"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXPECTED="call_me_1 called [Some thing]
|
||||||
|
call_me_2 called [Other thing]"
|
||||||
|
|
||||||
|
if test "${EXPECTED}" != "${RES}"; then
|
||||||
|
echo "*** FAILED: dib-run-parts returns incorrect result"
|
||||||
|
rval=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${rval}
|
5
tools/tests/tc03/environment.d/set_var.bash
Normal file
5
tools/tests/tc03/environment.d/set_var.bash
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export CM1="Some thing"
|
||||||
|
export CM2="Other thing"
|
||||||
|
|
3
tools/tests/tc03/td/call_me_1
Executable file
3
tools/tests/tc03/td/call_me_1
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "call_me_1 called [${CM1}]"
|
3
tools/tests/tc03/td/call_me_2
Executable file
3
tools/tests/tc03/td/call_me_2
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "call_me_2 called [${CM2}]"
|
12
tox.ini
12
tox.ini
@ -1,7 +1,7 @@
|
|||||||
[tox]
|
[tox]
|
||||||
minversion = 3.1.0
|
minversion = 3.1.0
|
||||||
skipsdist = True
|
|
||||||
envlist = py3,pep8
|
envlist = py3,pep8
|
||||||
|
skipsdist = false
|
||||||
skip_missing_interpreters = true
|
skip_missing_interpreters = true
|
||||||
# this allows tox to infer the base python from the environment name
|
# this allows tox to infer the base python from the environment name
|
||||||
# and override any basepython configured in this file
|
# and override any basepython configured in this file
|
||||||
@ -9,7 +9,6 @@ ignore_basepython_conflict=true
|
|||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
basepython = python3
|
basepython = python3
|
||||||
usedevelop = True
|
|
||||||
deps =
|
deps =
|
||||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||||
-r{toxinidir}/requirements.txt
|
-r{toxinidir}/requirements.txt
|
||||||
@ -35,6 +34,15 @@ commands =
|
|||||||
[testenv:venv]
|
[testenv:venv]
|
||||||
commands = {posargs}
|
commands = {posargs}
|
||||||
|
|
||||||
|
[testenv:functional]
|
||||||
|
setenv =
|
||||||
|
OS_TEST_PATH=os_refresh_config/tests/functional
|
||||||
|
commands =
|
||||||
|
stestr run --slowest {posargs}
|
||||||
|
{toxinidir}/tools/tests/run_tests.sh {posargs}
|
||||||
|
allowlist_externals =
|
||||||
|
{toxinidir}/tools/tests/run_tests.sh
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
ignore = E125
|
ignore = E125
|
||||||
exclude = .venv,.tox,dist,doc,*.egg
|
exclude = .venv,.tox,dist,doc,*.egg
|
||||||
|
@ -3,3 +3,9 @@
|
|||||||
- check-requirements
|
- check-requirements
|
||||||
- openstack-cover-jobs
|
- openstack-cover-jobs
|
||||||
- openstack-python3-jobs
|
- openstack-python3-jobs
|
||||||
|
check:
|
||||||
|
jobs:
|
||||||
|
- openstack-tox-functional
|
||||||
|
gate:
|
||||||
|
jobs:
|
||||||
|
- openstack-tox-functional
|
||||||
|
Loading…
Reference in New Issue
Block a user