tests: Begin autopkgtest wrapper for selftests

To start with, just use kexec to test that each kernel boots.
This commit is contained in:
Ben Hutchings 2015-08-12 00:21:41 +02:00
parent 3b781b1ad1
commit 3d15b09115
5 changed files with 80 additions and 1 deletions

1
debian/.gitignore vendored
View File

@ -15,4 +15,5 @@
/po/
/rules.gen
/stamps/
/tests/control
/xen-linux-system-*

View File

@ -78,6 +78,9 @@ class Gencontrol(Base):
'# Translators should edit %s instead.\n'
'#\n' % path)
# Prepare to generate debian/tests/control
self.tests_control = None
def do_main_makefile(self, makefile, makeflags, extra):
fs_enabled = [featureset
for featureset in self.config['base', ]['featuresets']
@ -329,7 +332,8 @@ class Gencontrol(Base):
vars.setdefault('desc', None)
packages_own.append(self.process_real_image(image[0], image_fields, vars))
image_main = self.process_real_image(image[0], image_fields, vars)
packages_own.append(image_main)
packages_own.extend(self.process_packages(image[1:], vars))
if config_entry_build.get('modules', True):
@ -355,6 +359,16 @@ class Gencontrol(Base):
self.merge_packages(packages, packages_own + packages_dummy, arch)
tests_control = self.process_package(
self.templates['tests-control.main'][0], vars)
tests_control['Depends'].append(
PackageRelationGroup(image_main['Package'],
override_arches=(arch,)))
if self.tests_control:
self.tests_control['Depends'].extend(tests_control['Depends'])
else:
self.tests_control = tests_control
def get_config(*entry_name):
entry_real = ('image',) + entry_name
entry = self.config.get(entry_real, None)
@ -513,11 +527,16 @@ class Gencontrol(Base):
def write(self, packages, makefile):
self.write_config()
super(Gencontrol, self).write(packages, makefile)
self.write_tests_control()
def write_config(self):
f = open("debian/config.defines.dump", 'wb')
self.config.dump(f)
f.close()
def write_tests_control(self):
self.write_rfc822(codecs.open("debian/tests/control", 'w', 'utf-8'),
[self.tests_control])
if __name__ == '__main__':
Gencontrol()()

1
debian/changelog vendored
View File

@ -2,6 +2,7 @@ linux (4.3~rc7-1~exp2) UNRELEASED; urgency=medium
[ Ben Hutchings ]
* netfilter: Enable NFT_DUP_IPV4, NFT_DUP_IPV6 as modules (Closes: #803370)
* tests: Add autopkgtest support
[ Salvatore Bonaccorso ]
* Fix typo in image.plain.postinst template.

View File

@ -0,0 +1,3 @@
Tests: selftests
Restrictions: breaks-testbed, needs-root, isolation-machine
Depends: kexec-tools, python3

55
debian/tests/selftests vendored Normal file
View File

@ -0,0 +1,55 @@
#!/bin/bash -eu
PATH=/usr/sbin:/sbin:/usr/bin:/bin
getconfig() {
debian/bin/getconfig.py "$@"
}
# Look up current ABI name and 'localversion' (featureset/flavour) suffixes
abiname=$(getconfig version abiname)
arch=$(dpkg --print-architecture)
localversion=()
for featureset in $(getconfig base $arch featuresets); do
if [ "$(getconfig base '' $featureset enabled || echo True)" = True ]; then
for flavour in $(getconfig base $arch $featureset flavours); do
if [ "$featureset" = none ]; then
localversion+=(-$flavour)
else
localversion+=(-$featureset-$flavour)
fi
done
fi
done
steps=${#localversion[*]}
case "${ADT_REBOOT_MARK:-}" in
"")
step=-1
;;
step*)
step=${ADT_REBOOT_MARK#step}
;;
esac
if [ "$step" -ge 0 ]; then
ver=$abiname${localversion[$step]}
if [ "$(uname -r)" != "$ver" ]; then
echo >&2 "Should be running: $ver"
echo >&2 "Actually running: $(uname -r)"
fi
fi
# TODO: build and run tests
step=$((step + 1))
if [ "$step" -lt "$steps" ]; then
# Load the next kernel
ver=$abiname${localversion[$step]}
kexec -l /boot/vmlinuz-$ver --initrd /boot/initrd.img-$ver --reuse-cmdline
/tmp/autopkgtest-reboot step$step
fi
exit 0