mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-22 01:31:03 +00:00
tests: Add virtme fluster tests
Set up a test suite that runs fluster in a virtual machine using virtme. This test only runs when a kernel image path is set in the new `virtme_kernel_image` meson option. The kernel iimage must have support for visl. The suite contains 4 tests, 1 for each supported codec in visl: - vp8 - vp9 - h.264 - hevc Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5434>
This commit is contained in:
parent
095ed3edf0
commit
3796ee2466
7 changed files with 217 additions and 2 deletions
|
@ -761,6 +761,55 @@ gstreamer-full-minimal static build:
|
||||||
- strip build/libgstreamer-full-1.0.so
|
- strip build/libgstreamer-full-1.0.so
|
||||||
- ls -l build/libgstreamer-full-1.0.so
|
- ls -l build/libgstreamer-full-1.0.so
|
||||||
|
|
||||||
|
# v4l2-stateless-decoders tests
|
||||||
|
fluster v4l2-stateless on visl:
|
||||||
|
extends: 'gstreamer-full static build'
|
||||||
|
stage: 'test'
|
||||||
|
variables:
|
||||||
|
BUILD_GST_DEBUG: '-Dgstreamer:gst_debug=false'
|
||||||
|
GST_WERROR: "true"
|
||||||
|
BUILD_TYPE: "--default-library=static"
|
||||||
|
MESON_ARGS: >-
|
||||||
|
-Dvirtme_kernel_image=/opt/linux/bzImage
|
||||||
|
-Dauto_features=disabled
|
||||||
|
-Dgstreamer:check=enabled
|
||||||
|
-Ddoc=disabled
|
||||||
|
-Dtests=enabled
|
||||||
|
-Dtools=enabled
|
||||||
|
-Dbase=enabled
|
||||||
|
-Dbad=enabled
|
||||||
|
-Dugly=disabled
|
||||||
|
-Dlibav=disabled
|
||||||
|
-Drtsp_server=disabled
|
||||||
|
-Dges=disabled
|
||||||
|
-Dgst-plugins-bad:debugutils=enabled
|
||||||
|
-Dgst-plugins-bad:ivfparse=enabled
|
||||||
|
-Dgst-plugins-bad:v4l2codecs=enabled
|
||||||
|
-Dgst-plugins-bad:videoparsers=enabled
|
||||||
|
-Dgst-plugins-base:app=enabled
|
||||||
|
-Dgst-plugins-base:videoconvertscale=enabled
|
||||||
|
-Dgst-plugins-base:typefind=enabled
|
||||||
|
-Dgst-plugins-base:playback=enabled
|
||||||
|
-Dgst-plugins-good:matroska=enabled
|
||||||
|
SUBPROJECTS_CACHE_DIR: "/subprojects"
|
||||||
|
script:
|
||||||
|
- *build
|
||||||
|
- meson test -C build -v --suite v4l2-stateless-decoders
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
junit: build/fluster-results-*.xml
|
||||||
|
rules:
|
||||||
|
- changes:
|
||||||
|
- .gitlab-ci.yml
|
||||||
|
- .gitlab-image-tags.yml
|
||||||
|
- subprojects/gst-plugins-bad/sys/v4l2codecs/*
|
||||||
|
- subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/*
|
||||||
|
- subprojects/gst-plugins-bad/gst-libs/gst/codecs/*
|
||||||
|
- subprojects/gst-plugins-bad/gst/videoparsers/*
|
||||||
|
- tests/virtme/*
|
||||||
|
- ci/scripts/build-linux.sh
|
||||||
|
- ci/docker/fedora/*
|
||||||
|
|
||||||
# Valgrind
|
# Valgrind
|
||||||
.valgrind fedora x86_64:
|
.valgrind fedora x86_64:
|
||||||
extends: '.test fedora x86_64'
|
extends: '.test fedora x86_64'
|
||||||
|
|
|
@ -41,6 +41,7 @@ option('gst-full-target-type', type : 'combo', value : 'shared_library', choices
|
||||||
description : '''The type of library of gstreamer-full-1.0.''')
|
description : '''The type of library of gstreamer-full-1.0.''')
|
||||||
option('orc-source', type: 'combo', choices: ['system', 'subproject', 'auto'], value: 'subproject')
|
option('orc-source', type: 'combo', choices: ['system', 'subproject', 'auto'], value: 'subproject')
|
||||||
option('build-tools-source', type: 'combo', choices: ['system', 'subproject'], value: 'subproject')
|
option('build-tools-source', type: 'combo', choices: ['system', 'subproject'], value: 'subproject')
|
||||||
|
option('virtme_kernel_image', type: 'string', value: '', description: 'Path to a Linux kernel image to be used for virtme testing')
|
||||||
|
|
||||||
# License-related feature options
|
# License-related feature options
|
||||||
option('gpl', type: 'feature', value: 'disabled',
|
option('gpl', type: 'feature', value: 'disabled',
|
||||||
|
@ -72,4 +73,4 @@ option('glib-checks', type : 'feature', value : 'enabled', yield : true,
|
||||||
option('package-name', type : 'string', yield : true,
|
option('package-name', type : 'string', yield : true,
|
||||||
description : 'package name to use in plugins')
|
description : 'package name to use in plugins')
|
||||||
option('gstreamer-full-license', type : 'string', value : 'unknown',
|
option('gstreamer-full-license', type : 'string', value : 'unknown',
|
||||||
description : 'gstreamer-full license (default unknown)')
|
description : 'gstreamer-full license (default unknown)')
|
||||||
|
|
|
@ -2,4 +2,5 @@ if get_option('tests').disabled()
|
||||||
subdir_done()
|
subdir_done()
|
||||||
endif
|
endif
|
||||||
subdir('static-plugins')
|
subdir('static-plugins')
|
||||||
subdir('python')
|
subdir('python')
|
||||||
|
subdir('virtme')
|
||||||
|
|
16
tests/virtme/README.md
Normal file
16
tests/virtme/README.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
## High level description of the files in this directory.
|
||||||
|
|
||||||
|
### virtme-run.sh
|
||||||
|
|
||||||
|
A helper script that uses 'virtme' to launch a qemu virtual machine with the
|
||||||
|
host filesystem exposed inside the virtual machine.
|
||||||
|
|
||||||
|
### run-virt-test.sh
|
||||||
|
|
||||||
|
Run the given command and retrieve the command status in the given status file.
|
||||||
|
This is necessary because virtme doesn't return the exit code of the command.
|
||||||
|
|
||||||
|
### meson.build
|
||||||
|
|
||||||
|
Contains one rule for meson test cases that launches tests inside virtual
|
||||||
|
machines.
|
52
tests/virtme/meson.build
Normal file
52
tests/virtme/meson.build
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
kernel_image_path = get_option('virtme_kernel_image')
|
||||||
|
if kernel_image_path != ''
|
||||||
|
if not fs.is_absolute(kernel_image_path)
|
||||||
|
error('Kernel image path @0@ must be absolute'.format(kernel_image_path))
|
||||||
|
endif
|
||||||
|
if not fs.is_file(kernel_image_path)
|
||||||
|
error('Kernel image @0@ does not exist'.format(kernel_image_path))
|
||||||
|
endif
|
||||||
|
|
||||||
|
virtme_run = find_program('virtme-run.sh')
|
||||||
|
|
||||||
|
supported_decoders = {
|
||||||
|
'vp8': [],
|
||||||
|
'vp9': [],
|
||||||
|
'h.264': [
|
||||||
|
'FM1_BT_B',
|
||||||
|
'FM2_SVA_C'
|
||||||
|
],
|
||||||
|
'h.265': [
|
||||||
|
'PICSIZE_A_Bossen_1',
|
||||||
|
'PICSIZE_B_Bossen_1',
|
||||||
|
'PICSIZE_C_Bossen_1',
|
||||||
|
'PICSIZE_D_Bossen_1',
|
||||||
|
'EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_16BIT_RExt_Sony_1',
|
||||||
|
'EXTPREC_MAIN_444_16_INTRA_16BIT_RExt_Sony_1',
|
||||||
|
'GENERAL_12b_400_RExt_Sony_1',
|
||||||
|
'GENERAL_16b_400_RExt_Sony_1',
|
||||||
|
'GENERAL_16b_444_highThroughput_RExt_Sony_2',
|
||||||
|
'GENERAL_16b_444_RExt_Sony_2',
|
||||||
|
'GENERAL_8b_400_RExt_Sony_1',
|
||||||
|
'WAVETILES_RExt_Sony_2'
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach decoder, skipped : supported_decoders
|
||||||
|
test('v4l2-stateless-decoders-' + decoder, virtme_run,
|
||||||
|
workdir: meson.current_source_dir(),
|
||||||
|
suite: 'v4l2-stateless-decoders',
|
||||||
|
args: [
|
||||||
|
kernel_image_path,
|
||||||
|
meson.project_build_root(),
|
||||||
|
meson.source_root(),
|
||||||
|
decoder,
|
||||||
|
skipped,
|
||||||
|
],
|
||||||
|
is_parallel: true,
|
||||||
|
timeout: 180,
|
||||||
|
)
|
||||||
|
endforeach
|
||||||
|
else
|
||||||
|
warning('No kernel image path specified, skipping virtme tests')
|
||||||
|
endif
|
21
tests/virtme/run-virt-test.sh
Executable file
21
tests/virtme/run-virt-test.sh
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Run the given command in the meson dev environment.
|
||||||
|
# The command return value will be stored in the given
|
||||||
|
# status file.
|
||||||
|
#
|
||||||
|
# $1: The command to be run
|
||||||
|
# $2: The status file
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
COMMAND="${1}"
|
||||||
|
STATUS_FILE="${2}"
|
||||||
|
|
||||||
|
echo Run ${COMMAND} in the devenv
|
||||||
|
meson devenv -C ${MESON_BUILD_DIR} ${COMMAND}
|
||||||
|
|
||||||
|
STATUS=$?
|
||||||
|
echo $STATUS > ${STATUS_FILE}
|
||||||
|
|
||||||
|
exit $STATUS
|
75
tests/virtme/virtme-run.sh
Executable file
75
tests/virtme/virtme-run.sh
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Based on the virtme-run.sh script from the Mutter project:
|
||||||
|
# https://gitlab.gnome.org/GNOME/mutter/-/blob/main/src/tests/kvm/virtme-run.sh
|
||||||
|
#
|
||||||
|
# Run fluster tests in a virtual machine using virtme-ng.
|
||||||
|
#
|
||||||
|
# $1: A Linux kernel image
|
||||||
|
# $2: The test build dir
|
||||||
|
# $3: GStreamer source dir
|
||||||
|
# $4: The decoder to be run in [vp8, vp9, h.264, h.265, av1]
|
||||||
|
# ($@: The test vectors to be skipped)
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DIRNAME="$(dirname "$0")"
|
||||||
|
IMAGE="$1"
|
||||||
|
MESON_BUILD_DIR="$2"
|
||||||
|
MESON_SOURCE_DIR="$3"
|
||||||
|
DECODER="${4}"
|
||||||
|
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
|
||||||
|
SKIPPED="$@"
|
||||||
|
|
||||||
|
if [ ! -z "${SKIPPED}" ]; then
|
||||||
|
sv="-sv ${SKIPPED}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
TEST_RESULT_FILE=$(mktemp -p "$MESON_BUILD_DIR" -t test-result-XXXXXX)
|
||||||
|
echo 1 > "$TEST_RESULT_FILE"
|
||||||
|
|
||||||
|
VIRTME_ENV="\
|
||||||
|
MESON_BUILD_DIR=${MESON_BUILD_DIR} \
|
||||||
|
"
|
||||||
|
|
||||||
|
TEST_SUITES_DIR="${MESON_SOURCE_DIR}/ci/fluster/visl_references"
|
||||||
|
|
||||||
|
FLUSTER_PATH=/opt/fluster
|
||||||
|
TEST_COMMAND="${FLUSTER_PATH}/fluster.py -tsd ${TEST_SUITES_DIR} run -d GStreamer-${DECODER}-V4L2SL-Gst1.0 -f junitxml -so $MESON_BUILD_DIR/fluster-results-${DECODER}.xml ${sv} -t 60"
|
||||||
|
|
||||||
|
SCRIPT="\
|
||||||
|
env $VIRTME_ENV $DIRNAME/run-virt-test.sh \
|
||||||
|
\\\"$TEST_COMMAND\\\" \
|
||||||
|
\\\"$TEST_RESULT_FILE\\\" \
|
||||||
|
"
|
||||||
|
|
||||||
|
HALF_MEMORY="$(grep MemTotal /proc/meminfo | awk '{print $2}' | xargs -I {} echo "scale=0; 1+{}/1024^2/2" | bc)G"
|
||||||
|
|
||||||
|
echo Running tests in virtual machine ...
|
||||||
|
virtme-run \
|
||||||
|
--memory=${HALF_MEMORY} \
|
||||||
|
--rw \
|
||||||
|
--pwd \
|
||||||
|
--kimg "$IMAGE" \
|
||||||
|
--script-sh "sh -c \"$SCRIPT\"" \
|
||||||
|
-a visl.stable_output=true \
|
||||||
|
-a visl.codec_variability=true \
|
||||||
|
--show-boot-console --show-command \
|
||||||
|
--qemu-opts -cpu host,pdcm=off -smp 8
|
||||||
|
VM_RESULT=$?
|
||||||
|
if [ $VM_RESULT != 0 ]; then
|
||||||
|
echo Virtual machine exited with a failure: $VM_RESULT
|
||||||
|
else
|
||||||
|
echo Virtual machine terminated.
|
||||||
|
fi
|
||||||
|
TEST_RESULT="$(cat "$TEST_RESULT_FILE")"
|
||||||
|
|
||||||
|
echo Test result exit status: $TEST_RESULT
|
||||||
|
|
||||||
|
rm "$TEST_RESULT_FILE"
|
||||||
|
exit "$TEST_RESULT"
|
Loading…
Reference in a new issue