blob: 1e013460bfc4ba728388c0b8f28bd24c1619393b [file] [log] [blame]
set -eux
if [[ $(dirname "$(dirname "$(realpath "$SYSREPO_REPOSITORY_PATH")")") != "@CMAKE_CURRENT_BINARY_DIR@" ]]; then
echo "\$SYSREPO_REPOSITORY_PATH is not inside the build dir! Aborting. ($SYSREPO_REPOSITORY_PATH)"
exit 1
fi
if [[ -z "$SYSREPO_SHM_PREFIX" ]]; then
echo '$SYSREPO_SHM_PREFIX is empty! Aborting.'
exit 1
fi
rm -rf "$SYSREPO_REPOSITORY_PATH"
rm -rf "/dev/shm/$SYSREPO_SHM_PREFIX"*
cp -r "@SYSREPO_SR_REPO_PATH@" "$SYSREPO_REPOSITORY_PATH"
SYSREPOCTL="@SYSREPOCTL_EXECUTABLE@"
SYSREPOCFG="@SYSREPOCFG_EXECUTABLE@"
MODULE="$1"
YANG_DIR=$(dirname "$1")
shift
# Uninstall the module
"$SYSREPOCTL" --uninstall "$(basename "$MODULE" ".yang")" -v3 || true
# Install the module
"$SYSREPOCTL" --search-dirs "$YANG_DIR" --install "$MODULE" -v3
BACKEND="$1"
shift
if [[ "$BACKEND" = "netconf" ]]; then
# Kill previous instances of Netopeer2 that are associated with this test. These can appear when you run tests and
# press CTRL-C before let the cleanup tests run.
pkill -f "${SYSREPO_SHM_PREFIX}_netopeer2-server" || true
NETOPEER2="@NETOPEER2_EXECUTABLE@"
# Setup netopeer config
"$SYSREPOCFG" --import --datastore=running --format=xml --module=ietf-netconf-server <<< ""
# Disable nacm
for datastore in startup running; do
"$SYSREPOCFG" --import="@CMAKE_CURRENT_SOURCE_DIR@/tests/disable-nacm.xml" --datastore="$datastore" --format=xml --module=ietf-netconf-acm
done
# I need to run netopeer in the foreground, because I want to get its standard outputs. However, ctest doesn't like
# when child processes don't exit and always waits fot them. The `setsid` command runs a program in a separate
# session and also forks, which means it becomes invisible to ctest. I want the name of the process to be
# recognizable. For that `exec -a` can be used. Unfortunately `exec` is shell-builtin, so I need to run bash instead
# of running `exec` directly. Finally, I redirect its stdout and stderr to a file.
NETOPEER_PIDFILE="@CMAKE_CURRENT_BINARY_DIR@/test_netopeer_files/$SYSREPO_SHM_PREFIX.pid"
setsid -f \
bash -c "exec -a '${SYSREPO_SHM_PREFIX}_netopeer2-server' '$NETOPEER2' -d -v2 '-U$NETOPEER_SOCKET' -p'$NETOPEER_PIDFILE'" \
< /dev/null &> "@CMAKE_CURRENT_BINARY_DIR@/test_netopeer_outputs/$SYSREPO_SHM_PREFIX.out"
sleep 5
fi