diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/oeqa/selftest/cases/testutils.py | 38 | ||||
| -rw-r--r-- | lib/oeqa/selftest/cases/updater_minnowboard.py | 12 | ||||
| -rw-r--r-- | lib/oeqa/selftest/cases/updater_native.py | 1 | ||||
| -rw-r--r-- | lib/oeqa/selftest/cases/updater_qemux86_64.py | 107 | ||||
| -rw-r--r-- | lib/oeqa/selftest/cases/updater_qemux86_64_ptest.py | 13 | ||||
| -rw-r--r-- | lib/oeqa/selftest/cases/updater_raspberrypi.py | 11 |
6 files changed, 79 insertions, 103 deletions
diff --git a/lib/oeqa/selftest/cases/testutils.py b/lib/oeqa/selftest/cases/testutils.py index f8b1904..8d618a6 100644 --- a/lib/oeqa/selftest/cases/testutils.py +++ b/lib/oeqa/selftest/cases/testutils.py | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | import os | 1 | import os |
| 2 | import oe.path | ||
| 2 | import logging | 3 | import logging |
| 3 | import re | 4 | import re |
| 4 | import subprocess | 5 | import subprocess |
| @@ -33,6 +34,7 @@ def qemu_boot_image(imagename, **kwargs): | |||
| 33 | args.dir = 'tmp/deploy/images' | 34 | args.dir = 'tmp/deploy/images' |
| 34 | args.efi = kwargs.get('efi', False) | 35 | args.efi = kwargs.get('efi', False) |
| 35 | args.machine = kwargs.get('machine', None) | 36 | args.machine = kwargs.get('machine', None) |
| 37 | args.mem = kwargs.get('mem', '128M') | ||
| 36 | qemu_use_kvm = get_bb_var("QEMU_USE_KVM") | 38 | qemu_use_kvm = get_bb_var("QEMU_USE_KVM") |
| 37 | if qemu_use_kvm and \ | 39 | if qemu_use_kvm and \ |
| 38 | (qemu_use_kvm == 'True' and 'x86' in args.machine or | 40 | (qemu_use_kvm == 'True' and 'x86' in args.machine or |
| @@ -60,7 +62,7 @@ def qemu_bake_image(imagename): | |||
| 60 | bitbake(imagename) | 62 | bitbake(imagename) |
| 61 | 63 | ||
| 62 | 64 | ||
| 63 | def qemu_send_command(port, command, timeout=60): | 65 | def qemu_send_command(port, command, timeout=120): |
| 64 | command = ['ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost -p ' + | 66 | command = ['ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost -p ' + |
| 65 | str(port) + ' "' + command + '"'] | 67 | str(port) + ' "' + command + '"'] |
| 66 | s2 = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | 68 | s2 = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
| @@ -68,24 +70,30 @@ def qemu_send_command(port, command, timeout=60): | |||
| 68 | return stdout, stderr, s2.returncode | 70 | return stdout, stderr, s2.returncode |
| 69 | 71 | ||
| 70 | 72 | ||
| 73 | def metadir(): | ||
| 74 | # Assume the directory layout for finding other layers. We could also | ||
| 75 | # make assumptions by using 'show-layers', but either way, if the | ||
| 76 | # layers we need aren't where we expect them, we are out of luck. | ||
| 77 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 78 | metadir = path + "/../../../../../" | ||
| 79 | |||
| 80 | return metadir | ||
| 81 | |||
| 82 | |||
| 71 | def akt_native_run(testInst, cmd, **kwargs): | 83 | def akt_native_run(testInst, cmd, **kwargs): |
| 72 | # run a command supplied by aktualizr-native and checks that: | 84 | # run a command supplied by aktualizr-native and checks that: |
| 73 | # - the executable exists | 85 | # - the executable exists |
| 74 | # - the command runs without error | 86 | # - the command runs without error |
| 75 | # NOTE: the base test class must have built aktualizr-native (in | 87 | # |
| 76 | # setUpClass, for example) | 88 | # Requirements in base test class (setUpClass for example): |
| 77 | bb_vars = get_bb_vars(['SYSROOT_DESTDIR', 'base_prefix', 'libdir', 'bindir'], | 89 | # bitbake aktualizr-native |
| 78 | 'aktualizr-native') | 90 | # bitbake build-sysroots -c build_native_sysroot |
| 79 | sysroot = bb_vars['SYSROOT_DESTDIR'] + bb_vars['base_prefix'] | 91 | # |
| 80 | sysrootbin = bb_vars['SYSROOT_DESTDIR'] + bb_vars['bindir'] | 92 | # (technique found in poky/meta/lib/oeqa/selftest/cases/package.py) |
| 81 | libdir = bb_vars['libdir'] | 93 | bb_vars = get_bb_vars(['STAGING_DIR', 'BUILD_ARCH']) |
| 82 | 94 | sysroot = oe.path.join(bb_vars['STAGING_DIR'], bb_vars['BUILD_ARCH']) | |
| 83 | program, *_ = cmd.split(' ') | 95 | |
| 84 | p = '{}/{}'.format(sysrootbin, program) | 96 | result = runCmd(cmd, native_sysroot=sysroot, ignore_status=True, **kwargs) |
| 85 | testInst.assertTrue(os.path.isfile(p), msg="No {} found ({})".format(program, p)) | ||
| 86 | env = dict(os.environ) | ||
| 87 | env['LD_LIBRARY_PATH'] = libdir | ||
| 88 | result = runCmd(cmd, env=env, native_sysroot=sysroot, ignore_status=True, **kwargs) | ||
| 89 | testInst.assertEqual(result.status, 0, "Status not equal to 0. output: %s" % result.output) | 97 | testInst.assertEqual(result.status, 0, "Status not equal to 0. output: %s" % result.output) |
| 90 | 98 | ||
| 91 | 99 | ||
diff --git a/lib/oeqa/selftest/cases/updater_minnowboard.py b/lib/oeqa/selftest/cases/updater_minnowboard.py index 267445b..855bd20 100644 --- a/lib/oeqa/selftest/cases/updater_minnowboard.py +++ b/lib/oeqa/selftest/cases/updater_minnowboard.py | |||
| @@ -1,9 +1,8 @@ | |||
| 1 | import os | ||
| 2 | import re | 1 | import re |
| 3 | 2 | ||
| 4 | from oeqa.selftest.case import OESelftestTestCase | 3 | from oeqa.selftest.case import OESelftestTestCase |
| 5 | from oeqa.utils.commands import runCmd, get_bb_var | 4 | from oeqa.utils.commands import runCmd, get_bb_var |
| 6 | from testutils import qemu_launch, qemu_send_command, qemu_terminate, verifyProvisioned | 5 | from testutils import metadir, qemu_launch, qemu_send_command, qemu_terminate, verifyProvisioned |
| 7 | 6 | ||
| 8 | 7 | ||
| 9 | class MinnowTests(OESelftestTestCase): | 8 | class MinnowTests(OESelftestTestCase): |
| @@ -12,18 +11,13 @@ class MinnowTests(OESelftestTestCase): | |||
| 12 | layer_intel = "meta-intel" | 11 | layer_intel = "meta-intel" |
| 13 | layer_minnow = "meta-updater-minnowboard" | 12 | layer_minnow = "meta-updater-minnowboard" |
| 14 | result = runCmd('bitbake-layers show-layers') | 13 | result = runCmd('bitbake-layers show-layers') |
| 15 | # Assume the directory layout for finding other layers. We could also | ||
| 16 | # make assumptions by using 'show-layers', but either way, if the | ||
| 17 | # layers we need aren't where we expect them, we are out of luck. | ||
| 18 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 19 | metadir = path + "/../../../../../" | ||
| 20 | if re.search(layer_intel, result.output) is None: | 14 | if re.search(layer_intel, result.output) is None: |
| 21 | self.meta_intel = metadir + layer_intel | 15 | self.meta_intel = metadir() + layer_intel |
| 22 | runCmd('bitbake-layers add-layer "%s"' % self.meta_intel) | 16 | runCmd('bitbake-layers add-layer "%s"' % self.meta_intel) |
| 23 | else: | 17 | else: |
| 24 | self.meta_intel = None | 18 | self.meta_intel = None |
| 25 | if re.search(layer_minnow, result.output) is None: | 19 | if re.search(layer_minnow, result.output) is None: |
| 26 | self.meta_minnow = metadir + layer_minnow | 20 | self.meta_minnow = metadir() + layer_minnow |
| 27 | runCmd('bitbake-layers add-layer "%s"' % self.meta_minnow) | 21 | runCmd('bitbake-layers add-layer "%s"' % self.meta_minnow) |
| 28 | else: | 22 | else: |
| 29 | self.meta_minnow = None | 23 | self.meta_minnow = None |
diff --git a/lib/oeqa/selftest/cases/updater_native.py b/lib/oeqa/selftest/cases/updater_native.py index 1fc9cb8..d2bf341 100644 --- a/lib/oeqa/selftest/cases/updater_native.py +++ b/lib/oeqa/selftest/cases/updater_native.py | |||
| @@ -14,6 +14,7 @@ class SotaToolsTests(OESelftestTestCase): | |||
| 14 | logger = logging.getLogger("selftest") | 14 | logger = logging.getLogger("selftest") |
| 15 | logger.info('Running bitbake to build aktualizr-native tools') | 15 | logger.info('Running bitbake to build aktualizr-native tools') |
| 16 | bitbake('aktualizr-native') | 16 | bitbake('aktualizr-native') |
| 17 | bitbake('build-sysroots -c build_native_sysroot') | ||
| 17 | 18 | ||
| 18 | def test_push_help(self): | 19 | def test_push_help(self): |
| 19 | akt_native_run(self, 'garage-push --help') | 20 | akt_native_run(self, 'garage-push --help') |
diff --git a/lib/oeqa/selftest/cases/updater_qemux86_64.py b/lib/oeqa/selftest/cases/updater_qemux86_64.py index 7223e9e..2b4726c 100644 --- a/lib/oeqa/selftest/cases/updater_qemux86_64.py +++ b/lib/oeqa/selftest/cases/updater_qemux86_64.py | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | import os | 2 | import os |
| 3 | import logging | 3 | import logging |
| 4 | import re | 4 | import re |
| 5 | import subprocess | ||
| 5 | import unittest | 6 | import unittest |
| 6 | from time import sleep | 7 | from time import sleep |
| 7 | from uuid import uuid4 | 8 | from uuid import uuid4 |
| @@ -9,7 +10,8 @@ from uuid import uuid4 | |||
| 9 | from oeqa.selftest.case import OESelftestTestCase | 10 | from oeqa.selftest.case import OESelftestTestCase |
| 10 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars | 11 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars |
| 11 | from testutils import qemu_launch, qemu_send_command, qemu_terminate, \ | 12 | from testutils import qemu_launch, qemu_send_command, qemu_terminate, \ |
| 12 | akt_native_run, verifyNotProvisioned, verifyProvisioned, qemu_bake_image, qemu_boot_image | 13 | metadir, akt_native_run, verifyNotProvisioned, verifyProvisioned, \ |
| 14 | qemu_bake_image, qemu_boot_image | ||
| 13 | 15 | ||
| 14 | 16 | ||
| 15 | class GeneralTests(OESelftestTestCase): | 17 | class GeneralTests(OESelftestTestCase): |
| @@ -17,6 +19,9 @@ class GeneralTests(OESelftestTestCase): | |||
| 17 | logger = logging.getLogger("selftest") | 19 | logger = logging.getLogger("selftest") |
| 18 | logger.info('Running bitbake to build core-image-minimal') | 20 | logger.info('Running bitbake to build core-image-minimal') |
| 19 | self.append_config('SOTA_CLIENT_PROV = "aktualizr-shared-prov"') | 21 | self.append_config('SOTA_CLIENT_PROV = "aktualizr-shared-prov"') |
| 22 | |||
| 23 | # note: this also tests ostreepush/garagesign/garagecheck which are | ||
| 24 | # omitted from other test cases | ||
| 20 | bitbake('core-image-minimal') | 25 | bitbake('core-image-minimal') |
| 21 | credentials = get_bb_var('SOTA_PACKED_CREDENTIALS') | 26 | credentials = get_bb_var('SOTA_PACKED_CREDENTIALS') |
| 22 | # skip the test if the variable SOTA_PACKED_CREDENTIALS is not set | 27 | # skip the test if the variable SOTA_PACKED_CREDENTIALS is not set |
| @@ -39,20 +44,18 @@ class AktualizrToolsTests(OESelftestTestCase): | |||
| 39 | super(AktualizrToolsTests, cls).setUpClass() | 44 | super(AktualizrToolsTests, cls).setUpClass() |
| 40 | logger = logging.getLogger("selftest") | 45 | logger = logging.getLogger("selftest") |
| 41 | logger.info('Running bitbake to build aktualizr-native tools') | 46 | logger.info('Running bitbake to build aktualizr-native tools') |
| 42 | bitbake('aktualizr-native') | 47 | bitbake('aktualizr-native aktualizr-device-prov') |
| 48 | bitbake('build-sysroots -c build_native_sysroot') | ||
| 43 | 49 | ||
| 44 | def test_cert_provider_help(self): | 50 | def test_cert_provider_help(self): |
| 45 | akt_native_run(self, 'aktualizr-cert-provider --help') | 51 | akt_native_run(self, 'aktualizr-cert-provider --help') |
| 46 | 52 | ||
| 47 | def test_cert_provider_local_output(self): | 53 | def test_cert_provider_local_output(self): |
| 48 | logger = logging.getLogger("selftest") | ||
| 49 | logger.info('Running bitbake to build aktualizr-device-prov') | ||
| 50 | bitbake('aktualizr-device-prov') | ||
| 51 | bb_vars = get_bb_vars(['SOTA_PACKED_CREDENTIALS', 'T'], 'aktualizr-native') | 54 | bb_vars = get_bb_vars(['SOTA_PACKED_CREDENTIALS', 'T'], 'aktualizr-native') |
| 52 | creds = bb_vars['SOTA_PACKED_CREDENTIALS'] | 55 | creds = bb_vars['SOTA_PACKED_CREDENTIALS'] |
| 53 | temp_dir = bb_vars['T'] | 56 | temp_dir = bb_vars['T'] |
| 54 | bb_vars_prov = get_bb_vars(['STAGING_DIR_HOST', 'libdir'], 'aktualizr-device-prov') | 57 | bb_vars_prov = get_bb_vars(['WORKDIR', 'libdir'], 'aktualizr-device-prov') |
| 55 | config = bb_vars_prov['STAGING_DIR_HOST'] + bb_vars_prov['libdir'] + '/sota/sota-device-cred.toml' | 58 | config = bb_vars_prov['WORKDIR'] + '/sysroot-destdir' + bb_vars_prov['libdir'] + '/sota/conf.d/20-sota-device-cred.toml' |
| 56 | 59 | ||
| 57 | akt_native_run(self, 'aktualizr-cert-provider -c {creds} -r -l {temp} -g {config}' | 60 | akt_native_run(self, 'aktualizr-cert-provider -c {creds} -r -l {temp} -g {config}' |
| 58 | .format(creds=creds, temp=temp_dir, config=config)) | 61 | .format(creds=creds, temp=temp_dir, config=config)) |
| @@ -75,17 +78,13 @@ class SharedCredProvTests(OESelftestTestCase): | |||
| 75 | layer = "meta-updater-qemux86-64" | 78 | layer = "meta-updater-qemux86-64" |
| 76 | result = runCmd('bitbake-layers show-layers') | 79 | result = runCmd('bitbake-layers show-layers') |
| 77 | if re.search(layer, result.output) is None: | 80 | if re.search(layer, result.output) is None: |
| 78 | # Assume the directory layout for finding other layers. We could also | 81 | self.meta_qemu = metadir() + layer |
| 79 | # make assumptions by using 'show-layers', but either way, if the | ||
| 80 | # layers we need aren't where we expect them, we are out of luck. | ||
| 81 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 82 | metadir = path + "/../../../../../" | ||
| 83 | self.meta_qemu = metadir + layer | ||
| 84 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 82 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 85 | else: | 83 | else: |
| 86 | self.meta_qemu = None | 84 | self.meta_qemu = None |
| 87 | self.append_config('MACHINE = "qemux86-64"') | 85 | self.append_config('MACHINE = "qemux86-64"') |
| 88 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-shared-prov "') | 86 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-shared-prov "') |
| 87 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') | ||
| 89 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 88 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
| 90 | 89 | ||
| 91 | def tearDownLocal(self): | 90 | def tearDownLocal(self): |
| @@ -117,18 +116,14 @@ class ManualControlTests(OESelftestTestCase): | |||
| 117 | layer = "meta-updater-qemux86-64" | 116 | layer = "meta-updater-qemux86-64" |
| 118 | result = runCmd('bitbake-layers show-layers') | 117 | result = runCmd('bitbake-layers show-layers') |
| 119 | if re.search(layer, result.output) is None: | 118 | if re.search(layer, result.output) is None: |
| 120 | # Assume the directory layout for finding other layers. We could also | 119 | self.meta_qemu = metadir() + layer |
| 121 | # make assumptions by using 'show-layers', but either way, if the | ||
| 122 | # layers we need aren't where we expect them, we are out of like. | ||
| 123 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 124 | metadir = path + "/../../../../../" | ||
| 125 | self.meta_qemu = metadir + layer | ||
| 126 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 120 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 127 | else: | 121 | else: |
| 128 | self.meta_qemu = None | 122 | self.meta_qemu = None |
| 129 | self.append_config('MACHINE = "qemux86-64"') | 123 | self.append_config('MACHINE = "qemux86-64"') |
| 130 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-shared-prov "') | 124 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-shared-prov "') |
| 131 | self.append_config('SYSTEMD_AUTO_ENABLE_aktualizr = "disable"') | 125 | self.append_config('SYSTEMD_AUTO_ENABLE_aktualizr = "disable"') |
| 126 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') | ||
| 132 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 127 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
| 133 | 128 | ||
| 134 | def tearDownLocal(self): | 129 | def tearDownLocal(self): |
| @@ -161,20 +156,16 @@ class DeviceCredProvTests(OESelftestTestCase): | |||
| 161 | layer = "meta-updater-qemux86-64" | 156 | layer = "meta-updater-qemux86-64" |
| 162 | result = runCmd('bitbake-layers show-layers') | 157 | result = runCmd('bitbake-layers show-layers') |
| 163 | if re.search(layer, result.output) is None: | 158 | if re.search(layer, result.output) is None: |
| 164 | # Assume the directory layout for finding other layers. We could also | 159 | self.meta_qemu = metadir() + layer |
| 165 | # make assumptions by using 'show-layers', but either way, if the | ||
| 166 | # layers we need aren't where we expect them, we are out of luck. | ||
| 167 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 168 | metadir = path + "/../../../../../" | ||
| 169 | self.meta_qemu = metadir + layer | ||
| 170 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 160 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 171 | else: | 161 | else: |
| 172 | self.meta_qemu = None | 162 | self.meta_qemu = None |
| 173 | self.append_config('MACHINE = "qemux86-64"') | 163 | self.append_config('MACHINE = "qemux86-64"') |
| 174 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-device-prov "') | 164 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-device-prov "') |
| 175 | self.append_config('SOTA_DEPLOY_CREDENTIALS = "0"') | 165 | self.append_config('SOTA_DEPLOY_CREDENTIALS = "0"') |
| 176 | runCmd('bitbake -c cleanall aktualizr aktualizr-device-prov') | 166 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') |
| 177 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 167 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
| 168 | bitbake('build-sysroots -c build_native_sysroot') | ||
| 178 | 169 | ||
| 179 | def tearDownLocal(self): | 170 | def tearDownLocal(self): |
| 180 | qemu_terminate(self.s) | 171 | qemu_terminate(self.s) |
| @@ -201,8 +192,8 @@ class DeviceCredProvTests(OESelftestTestCase): | |||
| 201 | # Run aktualizr-cert-provider. | 192 | # Run aktualizr-cert-provider. |
| 202 | bb_vars = get_bb_vars(['SOTA_PACKED_CREDENTIALS'], 'aktualizr-native') | 193 | bb_vars = get_bb_vars(['SOTA_PACKED_CREDENTIALS'], 'aktualizr-native') |
| 203 | creds = bb_vars['SOTA_PACKED_CREDENTIALS'] | 194 | creds = bb_vars['SOTA_PACKED_CREDENTIALS'] |
| 204 | bb_vars_prov = get_bb_vars(['STAGING_DIR_HOST', 'libdir'], 'aktualizr-device-prov') | 195 | bb_vars_prov = get_bb_vars(['WORKDIR', 'libdir'], 'aktualizr-device-prov') |
| 205 | config = bb_vars_prov['STAGING_DIR_HOST'] + bb_vars_prov['libdir'] + '/sota/sota-device-cred.toml' | 196 | config = bb_vars_prov['WORKDIR'] + '/sysroot-destdir' + bb_vars_prov['libdir'] + '/sota/conf.d/20-sota-device-cred.toml' |
| 206 | 197 | ||
| 207 | print('Provisining at root@localhost:%d' % self.qemu.ssh_port) | 198 | print('Provisining at root@localhost:%d' % self.qemu.ssh_port) |
| 208 | akt_native_run(self, 'aktualizr-cert-provider -c {creds} -t root@localhost -p {port} -s -u -r -g {config}' | 199 | akt_native_run(self, 'aktualizr-cert-provider -c {creds} -t root@localhost -p {port} -s -u -r -g {config}' |
| @@ -217,12 +208,7 @@ class DeviceCredProvHsmTests(OESelftestTestCase): | |||
| 217 | layer = "meta-updater-qemux86-64" | 208 | layer = "meta-updater-qemux86-64" |
| 218 | result = runCmd('bitbake-layers show-layers') | 209 | result = runCmd('bitbake-layers show-layers') |
| 219 | if re.search(layer, result.output) is None: | 210 | if re.search(layer, result.output) is None: |
| 220 | # Assume the directory layout for finding other layers. We could also | 211 | self.meta_qemu = metadir() + layer |
| 221 | # make assumptions by using 'show-layers', but either way, if the | ||
| 222 | # layers we need aren't where we expect them, we are out of luck. | ||
| 223 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 224 | metadir = path + "/../../../../../" | ||
| 225 | self.meta_qemu = metadir + layer | ||
| 226 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 212 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 227 | else: | 213 | else: |
| 228 | self.meta_qemu = None | 214 | self.meta_qemu = None |
| @@ -231,8 +217,9 @@ class DeviceCredProvHsmTests(OESelftestTestCase): | |||
| 231 | self.append_config('SOTA_DEPLOY_CREDENTIALS = "0"') | 217 | self.append_config('SOTA_DEPLOY_CREDENTIALS = "0"') |
| 232 | self.append_config('SOTA_CLIENT_FEATURES = "hsm"') | 218 | self.append_config('SOTA_CLIENT_FEATURES = "hsm"') |
| 233 | self.append_config('IMAGE_INSTALL_append = " softhsm-testtoken"') | 219 | self.append_config('IMAGE_INSTALL_append = " softhsm-testtoken"') |
| 234 | runCmd('bitbake -c cleanall aktualizr aktualizr-device-prov-hsm') | 220 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') |
| 235 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 221 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
| 222 | bitbake('build-sysroots -c build_native_sysroot') | ||
| 236 | 223 | ||
| 237 | def tearDownLocal(self): | 224 | def tearDownLocal(self): |
| 238 | qemu_terminate(self.s) | 225 | qemu_terminate(self.s) |
| @@ -269,25 +256,24 @@ class DeviceCredProvHsmTests(OESelftestTestCase): | |||
| 269 | # Run aktualizr-cert-provider. | 256 | # Run aktualizr-cert-provider. |
| 270 | bb_vars = get_bb_vars(['SOTA_PACKED_CREDENTIALS'], 'aktualizr-native') | 257 | bb_vars = get_bb_vars(['SOTA_PACKED_CREDENTIALS'], 'aktualizr-native') |
| 271 | creds = bb_vars['SOTA_PACKED_CREDENTIALS'] | 258 | creds = bb_vars['SOTA_PACKED_CREDENTIALS'] |
| 272 | bb_vars_prov = get_bb_vars(['STAGING_DIR_HOST', 'libdir'], 'aktualizr-device-prov-hsm') | 259 | bb_vars_prov = get_bb_vars(['WORKDIR', 'libdir'], 'aktualizr-device-prov-hsm') |
| 273 | config = bb_vars_prov['STAGING_DIR_HOST'] + bb_vars_prov['libdir'] + '/sota/sota-device-cred-hsm.toml' | 260 | config = bb_vars_prov['WORKDIR'] + '/sysroot-destdir' + bb_vars_prov['libdir'] + '/sota/conf.d/20-sota-device-cred-hsm.toml' |
| 274 | 261 | ||
| 275 | akt_native_run(self, 'aktualizr-cert-provider -c {creds} -t root@localhost -p {port} -r -s -u -g {config}' | 262 | akt_native_run(self, 'aktualizr-cert-provider -c {creds} -t root@localhost -p {port} -r -s -u -g {config}' |
| 276 | .format(creds=creds, port=self.qemu.ssh_port, config=config)) | 263 | .format(creds=creds, port=self.qemu.ssh_port, config=config)) |
| 277 | 264 | ||
| 278 | # Verify that HSM is able to initialize. | 265 | # Verify that HSM is able to initialize. |
| 279 | ran_ok = False | ||
| 280 | for delay in [5, 5, 5, 5, 10]: | 266 | for delay in [5, 5, 5, 5, 10]: |
| 281 | sleep(delay) | 267 | sleep(delay) |
| 282 | p11_out, p11_err, p11_ret = self.qemu_command(pkcs11_command) | 268 | p11_out, p11_err, p11_ret = self.qemu_command(pkcs11_command) |
| 283 | hsm_out, hsm_err, hsm_ret = self.qemu_command(softhsm2_command) | 269 | hsm_out, hsm_err, hsm_ret = self.qemu_command(softhsm2_command) |
| 284 | if p11_ret == 0 and hsm_ret == 0 and hsm_err == b'': | 270 | if (p11_ret == 0 and hsm_ret == 0 and hsm_err == b'' and |
| 285 | ran_ok = True | 271 | b'X.509 cert' in p11_out and b'present token' in p11_err): |
| 286 | break | 272 | break |
| 287 | self.assertTrue(ran_ok, 'pkcs11-tool or softhsm2-tool failed: ' + p11_err.decode() + | 273 | else: |
| 288 | p11_out.decode() + hsm_err.decode() + hsm_out.decode()) | 274 | self.fail('pkcs11-tool or softhsm2-tool failed: ' + p11_err.decode() + |
| 289 | self.assertIn(b'present token', p11_err, 'pkcs11-tool failed: ' + p11_err.decode() + p11_out.decode()) | 275 | p11_out.decode() + hsm_err.decode() + hsm_out.decode()) |
| 290 | self.assertIn(b'X.509 cert', p11_out, 'pkcs11-tool failed: ' + p11_err.decode() + p11_out.decode()) | 276 | |
| 291 | self.assertIn(b'Initialized: yes', hsm_out, 'softhsm2-tool failed: ' + | 277 | self.assertIn(b'Initialized: yes', hsm_out, 'softhsm2-tool failed: ' + |
| 292 | hsm_err.decode() + hsm_out.decode()) | 278 | hsm_err.decode() + hsm_out.decode()) |
| 293 | self.assertIn(b'User PIN init.: yes', hsm_out, 'softhsm2-tool failed: ' + | 279 | self.assertIn(b'User PIN init.: yes', hsm_out, 'softhsm2-tool failed: ' + |
| @@ -328,8 +314,8 @@ class IpSecondaryTests(OESelftestTestCase): | |||
| 328 | self.configure() | 314 | self.configure() |
| 329 | qemu_bake_image(self.imagename) | 315 | qemu_bake_image(self.imagename) |
| 330 | 316 | ||
| 331 | def send_command(self, cmd): | 317 | def send_command(self, cmd, timeout=60): |
| 332 | stdout, stderr, retcode = qemu_send_command(self.qemu.ssh_port, cmd, timeout=60) | 318 | stdout, stderr, retcode = qemu_send_command(self.qemu.ssh_port, cmd, timeout=timeout) |
| 333 | return str(stdout), str(stderr), retcode | 319 | return str(stdout), str(stderr), retcode |
| 334 | 320 | ||
| 335 | def __enter__(self): | 321 | def __enter__(self): |
| @@ -344,7 +330,7 @@ class IpSecondaryTests(OESelftestTestCase): | |||
| 344 | def wait_till_sshable(self): | 330 | def wait_till_sshable(self): |
| 345 | # qemu_send_command tries to ssh into the qemu VM and blocks until it gets there or timeout happens | 331 | # qemu_send_command tries to ssh into the qemu VM and blocks until it gets there or timeout happens |
| 346 | # so it helps us to block q control flow until the VM is booted and a target binary/daemon is running there | 332 | # so it helps us to block q control flow until the VM is booted and a target binary/daemon is running there |
| 347 | self.stdout, self.stderr, self.retcode = self.send_command(self.binaryname + ' --help') | 333 | self.stdout, self.stderr, self.retcode = self.send_command(self.binaryname + ' --help', timeout=300) |
| 348 | 334 | ||
| 349 | def was_successfully_booted(self): | 335 | def was_successfully_booted(self): |
| 350 | return self.retcode == 0 | 336 | return self.retcode == 0 |
| @@ -399,16 +385,12 @@ class IpSecondaryTests(OESelftestTestCase): | |||
| 399 | layer = "meta-updater-qemux86-64" | 385 | layer = "meta-updater-qemux86-64" |
| 400 | result = runCmd('bitbake-layers show-layers') | 386 | result = runCmd('bitbake-layers show-layers') |
| 401 | if re.search(layer, result.output) is None: | 387 | if re.search(layer, result.output) is None: |
| 402 | # Assume the directory layout for finding other layers. We could also | 388 | self.meta_qemu = metadir() + layer |
| 403 | # make assumptions by using 'show-layers', but either way, if the | ||
| 404 | # layers we need aren't where we expect them, we are out of luck. | ||
| 405 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 406 | metadir = path + "/../../../../../" | ||
| 407 | self.meta_qemu = metadir + layer | ||
| 408 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 389 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 409 | else: | 390 | else: |
| 410 | self.meta_qemu = None | 391 | self.meta_qemu = None |
| 411 | 392 | ||
| 393 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') | ||
| 412 | self.primary = IpSecondaryTests.Primary(self) | 394 | self.primary = IpSecondaryTests.Primary(self) |
| 413 | self.secondary = IpSecondaryTests.Secondary(self) | 395 | self.secondary = IpSecondaryTests.Secondary(self) |
| 414 | 396 | ||
| @@ -446,17 +428,13 @@ class ResourceControlTests(OESelftestTestCase): | |||
| 446 | layer = "meta-updater-qemux86-64" | 428 | layer = "meta-updater-qemux86-64" |
| 447 | result = runCmd('bitbake-layers show-layers') | 429 | result = runCmd('bitbake-layers show-layers') |
| 448 | if re.search(layer, result.output) is None: | 430 | if re.search(layer, result.output) is None: |
| 449 | # Assume the directory layout for finding other layers. We could also | 431 | self.meta_qemu = metadir() + layer |
| 450 | # make assumptions by using 'show-layers', but either way, if the | ||
| 451 | # layers we need aren't where we expect them, we are out of luck. | ||
| 452 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 453 | metadir = path + "/../../../../../" | ||
| 454 | self.meta_qemu = metadir + layer | ||
| 455 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 432 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 456 | else: | 433 | else: |
| 457 | self.meta_qemu = None | 434 | self.meta_qemu = None |
| 458 | self.append_config('MACHINE = "qemux86-64"') | 435 | self.append_config('MACHINE = "qemux86-64"') |
| 459 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-shared-prov "') | 436 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-shared-prov "') |
| 437 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') | ||
| 460 | self.append_config('IMAGE_INSTALL_append += " aktualizr-resource-control "') | 438 | self.append_config('IMAGE_INSTALL_append += " aktualizr-resource-control "') |
| 461 | self.append_config('RESOURCE_CPU_WEIGHT_pn-aktualizr = "1000"') | 439 | self.append_config('RESOURCE_CPU_WEIGHT_pn-aktualizr = "1000"') |
| 462 | self.append_config('RESOURCE_MEMORY_HIGH_pn-aktualizr = "50M"') | 440 | self.append_config('RESOURCE_MEMORY_HIGH_pn-aktualizr = "50M"') |
| @@ -476,10 +454,13 @@ class ResourceControlTests(OESelftestTestCase): | |||
| 476 | ran_ok = False | 454 | ran_ok = False |
| 477 | for delay in [5, 5, 5, 5]: | 455 | for delay in [5, 5, 5, 5]: |
| 478 | sleep(delay) | 456 | sleep(delay) |
| 479 | stdout, stderr, retcode = self.qemu_command('systemctl --no-pager show aktualizr') | 457 | try: |
| 480 | if retcode == 0 and b'ExecMainStatus=9' in stdout: | 458 | stdout, stderr, retcode = self.qemu_command('systemctl --no-pager show aktualizr') |
| 481 | ran_ok = True | 459 | if retcode == 0 and b'ExecMainStatus=9' in stdout: |
| 482 | break | 460 | ran_ok = True |
| 461 | break | ||
| 462 | except subprocess.TimeoutExpired: | ||
| 463 | pass | ||
| 483 | self.assertTrue(ran_ok, 'Aktualizr was not killed') | 464 | self.assertTrue(ran_ok, 'Aktualizr was not killed') |
| 484 | 465 | ||
| 485 | self.assertIn(b'CPUWeight=1000', stdout, 'CPUWeight was not set correctly') | 466 | self.assertIn(b'CPUWeight=1000', stdout, 'CPUWeight was not set correctly') |
diff --git a/lib/oeqa/selftest/cases/updater_qemux86_64_ptest.py b/lib/oeqa/selftest/cases/updater_qemux86_64_ptest.py index 0f0f491..e9a1a65 100644 --- a/lib/oeqa/selftest/cases/updater_qemux86_64_ptest.py +++ b/lib/oeqa/selftest/cases/updater_qemux86_64_ptest.py | |||
| @@ -1,10 +1,9 @@ | |||
| 1 | # pylint: disable=C0111,C0325 | 1 | # pylint: disable=C0111,C0325 |
| 2 | import os | ||
| 3 | import re | 2 | import re |
| 4 | 3 | ||
| 5 | from oeqa.selftest.case import OESelftestTestCase | 4 | from oeqa.selftest.case import OESelftestTestCase |
| 6 | from oeqa.utils.commands import runCmd | 5 | from oeqa.utils.commands import runCmd |
| 7 | from testutils import qemu_launch, qemu_send_command, qemu_terminate | 6 | from testutils import metadir, qemu_launch, qemu_send_command, qemu_terminate |
| 8 | 7 | ||
| 9 | 8 | ||
| 10 | class PtestTests(OESelftestTestCase): | 9 | class PtestTests(OESelftestTestCase): |
| @@ -13,12 +12,7 @@ class PtestTests(OESelftestTestCase): | |||
| 13 | layer = "meta-updater-qemux86-64" | 12 | layer = "meta-updater-qemux86-64" |
| 14 | result = runCmd('bitbake-layers show-layers') | 13 | result = runCmd('bitbake-layers show-layers') |
| 15 | if re.search(layer, result.output) is None: | 14 | if re.search(layer, result.output) is None: |
| 16 | # Assume the directory layout for finding other layers. We could also | 15 | self.meta_qemu = metadir() + layer |
| 17 | # make assumptions by using 'show-layers', but either way, if the | ||
| 18 | # layers we need aren't where we expect them, we are out of like. | ||
| 19 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 20 | metadir = path + "/../../../../../" | ||
| 21 | self.meta_qemu = metadir + layer | ||
| 22 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 16 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
| 23 | else: | 17 | else: |
| 24 | self.meta_qemu = None | 18 | self.meta_qemu = None |
| @@ -26,7 +20,8 @@ class PtestTests(OESelftestTestCase): | |||
| 26 | self.append_config('SYSTEMD_AUTO_ENABLE_aktualizr = "disable"') | 20 | self.append_config('SYSTEMD_AUTO_ENABLE_aktualizr = "disable"') |
| 27 | self.append_config('PTEST_ENABLED_pn-aktualizr = "1"') | 21 | self.append_config('PTEST_ENABLED_pn-aktualizr = "1"') |
| 28 | self.append_config('IMAGE_INSTALL_append += "aktualizr-ptest ptest-runner "') | 22 | self.append_config('IMAGE_INSTALL_append += "aktualizr-ptest ptest-runner "') |
| 29 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 23 | self.append_config('IMAGE_FSTYPES_remove = "ostreepush garagesign garagecheck"') |
| 24 | self.qemu, self.s = qemu_launch(machine='qemux86-64', mem="256M") | ||
| 30 | 25 | ||
| 31 | def tearDownLocal(self): | 26 | def tearDownLocal(self): |
| 32 | qemu_terminate(self.s) | 27 | qemu_terminate(self.s) |
diff --git a/lib/oeqa/selftest/cases/updater_raspberrypi.py b/lib/oeqa/selftest/cases/updater_raspberrypi.py index e976100..8efc941 100644 --- a/lib/oeqa/selftest/cases/updater_raspberrypi.py +++ b/lib/oeqa/selftest/cases/updater_raspberrypi.py | |||
| @@ -7,6 +7,8 @@ import unittest | |||
| 7 | from oeqa.selftest.case import OESelftestTestCase | 7 | from oeqa.selftest.case import OESelftestTestCase |
| 8 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var | 8 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var |
| 9 | 9 | ||
| 10 | from testutils import metadir | ||
| 11 | |||
| 10 | 12 | ||
| 11 | class RpiTests(OESelftestTestCase): | 13 | class RpiTests(OESelftestTestCase): |
| 12 | 14 | ||
| @@ -16,18 +18,13 @@ class RpiTests(OESelftestTestCase): | |||
| 16 | layer_rpi = "meta-raspberrypi" | 18 | layer_rpi = "meta-raspberrypi" |
| 17 | layer_upd_rpi = "meta-updater-raspberrypi" | 19 | layer_upd_rpi = "meta-updater-raspberrypi" |
| 18 | result = runCmd('bitbake-layers show-layers') | 20 | result = runCmd('bitbake-layers show-layers') |
| 19 | # Assume the directory layout for finding other layers. We could also | ||
| 20 | # make assumptions by using 'show-layers', but either way, if the | ||
| 21 | # layers we need aren't where we expect them, we are out of luck. | ||
| 22 | path = os.path.abspath(os.path.dirname(__file__)) | ||
| 23 | metadir = path + "/../../../../../" | ||
| 24 | if re.search(layer_rpi, result.output) is None: | 21 | if re.search(layer_rpi, result.output) is None: |
| 25 | self.meta_rpi = metadir + layer_rpi | 22 | self.meta_rpi = metadir() + layer_rpi |
| 26 | runCmd('bitbake-layers add-layer "%s"' % self.meta_rpi) | 23 | runCmd('bitbake-layers add-layer "%s"' % self.meta_rpi) |
| 27 | else: | 24 | else: |
| 28 | self.meta_rpi = None | 25 | self.meta_rpi = None |
| 29 | if re.search(layer_upd_rpi, result.output) is None: | 26 | if re.search(layer_upd_rpi, result.output) is None: |
| 30 | self.meta_upd_rpi = metadir + layer_upd_rpi | 27 | self.meta_upd_rpi = metadir() + layer_upd_rpi |
| 31 | runCmd('bitbake-layers add-layer "%s"' % self.meta_upd_rpi) | 28 | runCmd('bitbake-layers add-layer "%s"' % self.meta_upd_rpi) |
| 32 | else: | 29 | else: |
| 33 | self.meta_upd_rpi = None | 30 | self.meta_upd_rpi = None |
