Add functional smoke test for disk-image-create

We do not have any testing inside DIB for testing disk-image-create
logic. Lets do some smoke testing for all our supported image formats.

Also adding a run_functests.sh so we can extend this later without editing
the jenkins job.

Change-Id: Ie491e27f00bde54f73af6b47c9696ec04d973b14
This commit is contained in:
Gregory Haynes 2015-03-31 04:53:30 +00:00 committed by Ben Nemec
parent 1fc2cbff50
commit 8266e14adc
8 changed files with 90 additions and 0 deletions

View File

@ -45,6 +45,9 @@ What tools are there?
* element-info : Extract information about elements.
* tests/run_functests.sh
This runs a set of functional tests for diskimage-builder.
Why?
----

View File

@ -205,6 +205,7 @@ fi
mk_build_dir
create_base
# This variable needs to be propagated into the chroot
mkdir -p $TMP_HOOKS_PATH/environment.d
echo "export DIB_DEFAULT_INSTALLTYPE=\"${DIB_DEFAULT_INSTALLTYPE}\"" > $TMP_HOOKS_PATH/environment.d/11-dib-install-type.bash
run_d extra-data
# Run pre-install scripts. These do things that prepare the chroot for package installs

View File

@ -0,0 +1,6 @@
fake-os
=======
This is not the element you are looking for.
This element does not provide an operating system, it provides a fake for testing purposes only.

View File

@ -0,0 +1 @@
operating-system

View File

@ -0,0 +1,16 @@
#!/bin/bash
set -eux
set -o pipefail
sudo touch $TARGET_ROOT/fake-os
sudo mkdir -p $TARGET_ROOT/etc
sudo mkdir -p $TARGET_ROOT/mnt
sudo mkdir -p $TARGET_ROOT/proc
sudo mkdir -p $TARGET_ROOT/dev
sudo mkdir -p $TARGET_ROOT/sys
# We need some size so the mkfs does not fail when making an fs of size 0
# We also need to account for the journal size on the FS
dd if=/dev/zero of=$TARGET_ROOT/fake-data bs=1M count=42

21
tests/image_output_formats.bash Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
set -eux
set -o pipefail
source $(dirname $0)/test_functions.bash
test_formats="tar raw qcow2"
if [ -z "$(which qemu-img)" ]; then
echo "Warning: No qemu-img binary found, cowardly refusing to run tests."
exit 0
fi
for format in '' $test_formats; do
build_test_image $format
echo "Test passed for output formats '$format'."
done
combined_format=$(echo $test_formats | tr ' ' ',')
build_test_image $combined_format
echo "Test passed for output format '$combined_format'."

8
tests/run_functests.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
set -eux
set -o pipefail
$(dirname $0)/image_output_formats.bash
echo "Tests passed!"

34
tests/test_functions.bash Normal file
View File

@ -0,0 +1,34 @@
export TEST_ELEMENTS=$(dirname $0)/elements
export DIB_ELEMENTS=$(dirname $0)/../elements
export DIB_CMD=$(dirname $0)/../bin/disk-image-create
function build_test_image() {
format=${1:-}
if [ -n "$format" ]; then
type_arg="-t $format"
else
type_arg=
format="qcow2"
fi
dest_dir=$(mktemp -d)
trap "rm -rf $dest_dir" EXIT
ELEMENTS_PATH=$DIB_ELEMENTS:$TEST_ELEMENTS \
$DIB_CMD $type_arg -o $dest_dir/image -n fake-os
format=$(echo $format | tr ',' ' ')
for format in $format; do
img_path="$dest_dir/image.$format"
if ! [ -f "$img_path" ]; then
echo "Error: No image with name $img_path found!"
exit 1
else
echo "Found image $img_path."
fi
done
trap EXIT
rm -rf $dest_dir
}