Files
runc/tests/integration/hooks.bats
Renaud Gaubert 861afa7509 Add integration tests for the new runc hooks
This patch adds a test based on real world usage of runc hooks
(libnvidia-container). We verify that mounting a library inside
a container and running ldconfig succeeds.

Signed-off-by: Renaud Gaubert <rgaubert@nvidia.com>
2020-06-19 02:39:20 +00:00

64 lines
2.0 KiB
Bash

#!/usr/bin/env bats
load helpers
# CR = CreateRuntime
# CC = CreataContainer
HOOKLIBCR=librunc-hooks-create-runtime.so
HOOKLIBCC=librunc-hooks-create-container.so
LIBPATH="$DEBIAN_BUNDLE/rootfs/lib/"
function setup() {
umount $LIBPATH/$HOOKLIBCR.1.0.0 &> /dev/null || true
umount $LIBPATH/$HOOKLIBCC.1.0.0 &> /dev/null || true
teardown_debian
setup_debian
}
function teardown() {
umount $LIBPATH/$HOOKLIBCR.1.0.0 &> /dev/null || true
umount $LIBPATH/$HOOKLIBCC.1.0.0 &> /dev/null || true
rm -f $HOOKLIBCR.1.0.0 $HOOKLIBCC.1.0.0
teardown_debian
}
@test "runc run (hooks library tests)" {
requires root
requires no_systemd
# setup some dummy libs
gcc -shared -Wl,-soname,librunc-hooks-create-runtime.so.1 -o "$HOOKLIBCR.1.0.0"
gcc -shared -Wl,-soname,librunc-hooks-create-container.so.1 -o "$HOOKLIBCC.1.0.0"
current_pwd="$(pwd)"
# To mount $HOOKLIBCR we need to do that in the container namespace
create_runtime_hook=$(cat <<-EOF
pid=\$(cat - | jq -r '.pid')
touch "$LIBPATH/$HOOKLIBCR.1.0.0"
nsenter -m \$ns -t \$pid mount --bind "$current_pwd/$HOOKLIBCR.1.0.0" "$LIBPATH/$HOOKLIBCR.1.0.0"
EOF)
create_container_hook="touch ./lib/$HOOKLIBCC.1.0.0 && mount --bind $current_pwd/$HOOKLIBCC.1.0.0 ./lib/$HOOKLIBCC.1.0.0"
CONFIG=$(jq --arg create_runtime_hook "$create_runtime_hook" --arg create_container_hook "$create_container_hook" '
.hooks |= . + {"createRuntime": [{"path": "/bin/sh", "args": ["/bin/sh", "-c", $create_runtime_hook]}]} |
.hooks |= . + {"createContainer": [{"path": "/bin/sh", "args": ["/bin/sh", "-c", $create_container_hook]}]} |
.hooks |= . + {"startContainer": [{"path": "/bin/sh", "args": ["/bin/sh", "-c", "ldconfig"]}]} |
.process.args = ["/bin/sh", "-c", "ldconfig -p | grep librunc"]' $DEBIAN_BUNDLE/config.json)
echo "${CONFIG}" > config.json
runc run test_debian
[ "$status" -eq 0 ]
echo "Checking create-runtime library"
echo $output | grep $HOOKLIBCR
[ "$?" -eq 0 ]
echo "Checking create-container library"
echo $output | grep $HOOKLIBCC
[ "$?" -eq 0 ]
}