1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-31 00:39:46 +00:00

oeqa/selftest: Fix imagefeature testcases not to interfere with testimage on AB

[YOCTO #8017] - selftest does not use pkill qemu
[YOCTO #7976] - tests do not touch .ssh/known_hosts
              - don't hardcode qemu IP
[YOCTO #8027] - use qemu nographic
Extra: removed unnecessary assert for bitbake and runCmd status

(From OE-Core rev: f58df3a630b774083934171463b2b07add29dc0e)

Signed-off-by: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Daniel Istrate
2015-07-21 15:54:40 +03:00
committed by Richard Purdie
parent aa05be4882
commit d6fa512d90
+48 -100
View File
@@ -2,13 +2,20 @@ from oeqa.selftest.base import oeSelfTest
from oeqa.utils.commands import runCmd, bitbake, get_bb_var from oeqa.utils.commands import runCmd, bitbake, get_bb_var
from oeqa.utils.decorators import testcase from oeqa.utils.decorators import testcase
import pexpect import pexpect
from os.path import expanduser, isfile from os.path import isfile
from os import system from os import system, killpg
import glob import glob
import signal
class ImageFeatures(oeSelfTest): class ImageFeatures(oeSelfTest):
test_user = 'tester'
root_user = 'root'
prompt = r'qemux86:\S+[$#]\s+'
ssh_cmd = "ssh {} -l {} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
get_ip_patt = r'\s+ip=(?P<qemu_ip>(\d+.){3}\d+)::'
@testcase(1107) @testcase(1107)
def test_non_root_user_can_connect_via_ssh_without_password(self): def test_non_root_user_can_connect_via_ssh_without_password(self):
""" """
@@ -20,69 +27,45 @@ class ImageFeatures(oeSelfTest):
AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com> AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
""" """
test_user = 'tester'
root_user = 'root'
prompt = r'qemux86:\S+[$#]\s+'
tap_inf_ip = '192.168.7.2'
features = 'EXTRA_IMAGE_FEATURES += "ssh-server-openssh empty-root-password"\n' features = 'EXTRA_IMAGE_FEATURES += "ssh-server-openssh empty-root-password"\n'
features += 'INHERIT += "extrausers"\n' features += 'INHERIT += "extrausers"\n'
features += 'EXTRA_USERS_PARAMS = "useradd -p \'\' {}; usermod -s /bin/sh {};"'.format(test_user, test_user) features += 'EXTRA_USERS_PARAMS = "useradd -p \'\' {}; usermod -s /bin/sh {};"'.format(self.test_user, self.test_user)
# Append 'features' to local.conf # Append 'features' to local.conf
self.append_config(features) self.append_config(features)
# Build a core-image-minimal # Build a core-image-minimal
ret = bitbake('core-image-minimal') bitbake('core-image-minimal')
self.assertEqual(0, ret.status, 'Failed to build a core-image-minimal')
rm_ssh_keys_cmd = 'ssh-keygen -f "{}/.ssh/known_hosts" -R {}'.format(expanduser('~'), tap_inf_ip)
# Delete the ssh keys for 192.168.7.2 (qemu)
ret = runCmd(rm_ssh_keys_cmd)
self.assertEqual(0, ret.status, 'Failed to delete ssh keys for qemu host.')
# Boot qemu image # Boot qemu image
proc_qemu = pexpect.spawn('runqemu qemux86 nographic') proc_qemu = pexpect.spawn('runqemu qemux86 nographic')
try: try:
proc_qemu.expect(self.get_ip_patt, timeout=100)
qemu_ip = proc_qemu.match.group('qemu_ip')
proc_qemu.expect('qemux86 login:', timeout=100) proc_qemu.expect('qemux86 login:', timeout=100)
except: except:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
self.fail('Failed to start qemu.') self.fail('Failed to start qemu.')
# Attempt to ssh with each user into qemu with empty password # Attempt to ssh with each user into qemu with empty password
for user in [root_user, test_user]: for user in [self.root_user, self.test_user]:
proc_ssh = pexpect.spawn('ssh {} -l {}'.format(tap_inf_ip, user)) proc_ssh = pexpect.spawn(self.ssh_cmd.format(qemu_ip, user))
index = proc_ssh.expect(['Are you sure you want to continue connecting', prompt, pexpect.TIMEOUT, pexpect.EOF]) index = proc_ssh.expect([self.prompt, pexpect.TIMEOUT, pexpect.EOF])
if index == 0: if index == 0:
proc_ssh.sendline('yes')
try:
proc_ssh.expect(prompt)
except:
system('pkill qemu')
proc_qemu.close()
proc_ssh.terminate()
self.fail('Failed to ssh with {} user into qemu.'.format(user))
elif index == 1:
# user successfully logged in with empty password # user successfully logged in with empty password
pass pass
elif index == 2: elif index == 1:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
proc_ssh.terminate() proc_ssh.terminate()
self.fail('Failed to ssh with {} user into qemu (timeout).'.format(user)) self.fail('Failed to ssh with {} user into qemu (timeout).'.format(user))
else: else:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
proc_ssh.terminate() proc_ssh.terminate()
self.fail('Failed to ssh with {} user into qemu (eof).'.format(user)) self.fail('Failed to ssh with {} user into qemu (eof).'.format(user))
proc_ssh.terminate()
# Cleanup # Cleanup
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
proc_ssh.terminate()
ret = runCmd(rm_ssh_keys_cmd)
self.assertEqual(0, ret.status, 'Failed to delete ssh keys for qemu host (at cleanup).')
@testcase(1115) @testcase(1115)
def test_all_users_can_connect_via_ssh_without_password(self): def test_all_users_can_connect_via_ssh_without_password(self):
@@ -93,69 +76,46 @@ class ImageFeatures(oeSelfTest):
Author: Ionut Chisanovici <ionutx.chisanovici@intel.com> Author: Ionut Chisanovici <ionutx.chisanovici@intel.com>
AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com> AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
""" """
test_user = 'tester'
root_user = 'root'
prompt = r'qemux86:\S+[$#]\s+'
tap_inf_ip = '192.168.7.2'
features = 'EXTRA_IMAGE_FEATURES += "ssh-server-openssh allow-empty-password"\n' features = 'EXTRA_IMAGE_FEATURES += "ssh-server-openssh allow-empty-password"\n'
features += 'INHERIT += "extrausers"\n' features += 'INHERIT += "extrausers"\n'
features += 'EXTRA_USERS_PARAMS = "useradd -p \'\' {}; usermod -s /bin/sh {};"'.format(test_user, test_user) features += 'EXTRA_USERS_PARAMS = "useradd -p \'\' {}; usermod -s /bin/sh {};"'.format(self.test_user, self.test_user)
# Append 'features' to local.conf # Append 'features' to local.conf
self.append_config(features) self.append_config(features)
# Build a core-image-minimal # Build a core-image-minimal
ret = bitbake('core-image-minimal') bitbake('core-image-minimal')
self.assertEqual(0, ret.status, 'Failed to build a core-image-minimal')
rm_ssh_keys_cmd = 'ssh-keygen -f "{}/.ssh/known_hosts" -R {}'.format(expanduser('~'), tap_inf_ip)
# Delete the ssh keys for 192.168.7.2 (qemu)
ret = runCmd(rm_ssh_keys_cmd)
self.assertEqual(0, ret.status, 'Failed to delete ssh keys for qemu host.')
# Boot qemu image # Boot qemu image
proc_qemu = pexpect.spawn('runqemu qemux86 nographic') proc_qemu = pexpect.spawn('runqemu qemux86 nographic')
try: try:
proc_qemu.expect(self.get_ip_patt, timeout=100)
qemu_ip = proc_qemu.match.group('qemu_ip')
proc_qemu.expect('qemux86 login:', timeout=100) proc_qemu.expect('qemux86 login:', timeout=100)
except: except:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
self.fail('Failed to start qemu.') self.fail('Failed to start qemu.')
# Attempt to ssh with each user into qemu with empty password # Attempt to ssh with each user into qemu with empty password
for user in [root_user, test_user]: for user in [self.root_user, self.test_user]:
proc_ssh = pexpect.spawn('ssh {} -l {}'.format(tap_inf_ip, user)) proc_ssh = pexpect.spawn(self.ssh_cmd.format(qemu_ip, user))
index = proc_ssh.expect(['Are you sure you want to continue connecting', prompt, pexpect.TIMEOUT, pexpect.EOF]) index = proc_ssh.expect([self.prompt, pexpect.TIMEOUT, pexpect.EOF])
if index == 0: if index == 0:
proc_ssh.sendline('yes')
try:
proc_ssh.expect(prompt)
except:
system('pkill qemu')
proc_qemu.close()
proc_ssh.terminate()
self.fail('Failed to ssh with {} user into qemu.'.format(user))
elif index == 1:
# user successfully logged in with empty password # user successfully logged in with empty password
pass pass
elif index == 2: elif index == 1:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
proc_ssh.terminate() proc_ssh.terminate()
self.fail('Failed to ssh with {} user into qemu (timeout).'.format(user)) self.fail('Failed to ssh with {} user into qemu (timeout).'.format(user))
else: else:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
proc_ssh.terminate() proc_ssh.terminate()
self.fail('Failed to ssh with {} user into qemu (eof).'.format(user)) self.fail('Failed to ssh with {} user into qemu (eof).'.format(user))
proc_ssh.terminate()
# Cleanup # Cleanup
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
proc_ssh.terminate()
ret = runCmd(rm_ssh_keys_cmd)
self.assertEqual(0, ret.status, 'Failed to delete ssh keys for qemu host (at cleanup).')
@testcase(1114) @testcase(1114)
def test_rpm_version_4_support_on_image(self): def test_rpm_version_4_support_on_image(self):
@@ -167,8 +127,6 @@ class ImageFeatures(oeSelfTest):
AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com> AutomatedBy: Daniel Istrate <daniel.alexandrux.istrate@intel.com>
""" """
root_user = 'root'
prompt = '{}@qemux86:~# '.format(root_user)
rpm_version = '4.11.2' rpm_version = '4.11.2'
features = 'IMAGE_INSTALL_append = " rpm"\n' features = 'IMAGE_INSTALL_append = " rpm"\n'
features += 'PREFERRED_VERSION_rpm = "{}"\n'.format(rpm_version) features += 'PREFERRED_VERSION_rpm = "{}"\n'.format(rpm_version)
@@ -179,33 +137,28 @@ class ImageFeatures(oeSelfTest):
self.append_config(features) self.append_config(features)
# Build a core-image-minimal # Build a core-image-minimal
ret = bitbake('core-image-minimal') bitbake('core-image-minimal')
self.assertEqual(0, ret.status, 'Failed to build a core-image-minimal')
# Boot qemu image & get rpm version # Boot qemu image & get rpm version
proc_qemu = pexpect.spawn('runqemu qemux86 nographic') proc_qemu = pexpect.spawn('runqemu qemux86 nographic')
try: try:
proc_qemu.expect('qemux86 login:', timeout=100) proc_qemu.expect('qemux86 login:', timeout=100)
proc_qemu.sendline(root_user) proc_qemu.sendline(self.root_user)
proc_qemu.expect(prompt) proc_qemu.expect(self.prompt)
proc_qemu.sendline('rpm --version') proc_qemu.sendline('rpm --version')
proc_qemu.expect(prompt) proc_qemu.expect(self.prompt)
except: except:
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
self.fail('Failed to boot qemu.') self.fail('Failed to boot qemu.')
found_rpm_version = proc_qemu.before found_rpm_version = proc_qemu.before
# Make sure the retrieved rpm version is the expected one # Make sure the retrieved rpm version is the expected one
if rpm_version not in found_rpm_version: self.assertIn(rpm_version, found_rpm_version,
system('pkill qemu') 'RPM version is not {}, found instead {}.'.format(rpm_version, found_rpm_version))
proc_qemu.close()
self.fail('RPM version is not {}, found instead {}.'.format(rpm_version, found_rpm_version))
# Cleanup (close qemu) # Cleanup (close qemu)
system('pkill qemu') killpg(proc_qemu.pid, signal.SIGTERM)
proc_qemu.close()
@testcase(1116) @testcase(1116)
def test_clutter_image_can_be_built(self): def test_clutter_image_can_be_built(self):
@@ -218,8 +171,7 @@ class ImageFeatures(oeSelfTest):
""" """
# Build a core-image-clutter # Build a core-image-clutter
ret = bitbake('core-image-clutter') bitbake('core-image-clutter')
self.assertEqual(0, ret.status, 'Failed to build core-image-clutter')
@testcase(1117) @testcase(1117)
def test_wayland_support_in_image(self): def test_wayland_support_in_image(self):
@@ -239,8 +191,7 @@ class ImageFeatures(oeSelfTest):
self.append_config(features) self.append_config(features)
# Build a core-image-weston # Build a core-image-weston
ret = bitbake('core-image-weston') bitbake('core-image-weston')
self.assertEqual(0, ret.status, 'Failed to build a core-image-weston')
class Gummiboot(oeSelfTest): class Gummiboot(oeSelfTest):
@@ -263,8 +214,7 @@ class Gummiboot(oeSelfTest):
self.add_command_to_tearDown('rm -rf ' + self.meta_intel_dir) self.add_command_to_tearDown('rm -rf ' + self.meta_intel_dir)
# Clone meta-intel # Clone meta-intel
ret = runCmd('git clone ' + meta_intel_repo + ' ' + self.meta_intel_dir) runCmd('git clone ' + meta_intel_repo + ' ' + self.meta_intel_dir)
self.assertEqual(0, ret.status, 'Failed to clone meta-intel.')
# Add meta-intel and meta-nuc layers in conf/bblayers.conf # Add meta-intel and meta-nuc layers in conf/bblayers.conf
features = 'BBLAYERS += "' + self.meta_intel_dir + ' ' + meta_nuc_dir + '"' features = 'BBLAYERS += "' + self.meta_intel_dir + ' ' + meta_nuc_dir + '"'
@@ -278,8 +228,7 @@ class Gummiboot(oeSelfTest):
# Run "bitbake syslinux syslinux-native parted-native dosfstools-native mtools-native core-image-minimal " # Run "bitbake syslinux syslinux-native parted-native dosfstools-native mtools-native core-image-minimal "
# to build a nuc/efi gummiboot image # to build a nuc/efi gummiboot image
ret = bitbake('syslinux syslinux-native parted-native dosfstools-native mtools-native core-image-minimal') bitbake('syslinux syslinux-native parted-native dosfstools-native mtools-native core-image-minimal')
self.assertEqual(0, ret.status, 'Failed to build a core-image-minimal')
@testcase(1101) @testcase(1101)
def test_efi_gummiboot_images_can_be_build(self): def test_efi_gummiboot_images_can_be_build(self):
@@ -310,8 +259,7 @@ class Gummiboot(oeSelfTest):
# Create efi/gummiboot installation images # Create efi/gummiboot installation images
wic_create_cmd = 'wic create mkgummidisk -e core-image-minimal' wic_create_cmd = 'wic create mkgummidisk -e core-image-minimal'
ret = runCmd(wic_create_cmd) runCmd(wic_create_cmd)
self.assertEqual(0, ret.status, 'Failed to create efi/gummiboot installation images.')
# Verify that a .direct file was created # Verify that a .direct file was created
direct_file = '/var/tmp/wic/build/*.direct' direct_file = '/var/tmp/wic/build/*.direct'