oeqa/selftest: Add test for conflicting sysroot provider

sysroot-test depends on virtual/sysroot-test which we build for one machine,
switch machine, switch provider of virtual/sysroot-test and check that the
sysroot is correctly cleaned up. The files in the two providers overlap
so can cause errors if the sysroot code doesn't function correctly.

Yes, sysroot-test should be machine specific really to avoid this, however
the sysroot cleanup should also work.

This adds a test for bug:

[YOCTO #13702]

(From OE-Core rev: 24ca62b3c1fd404b67d549b29aeeacf913e6dc86)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2020-04-20 17:19:11 +01:00
parent d645fe38d3
commit f135cb3659
4 changed files with 71 additions and 0 deletions

View File

@ -0,0 +1,14 @@
LICENSE = "CLOSED"
PROVIDES = "virtual/sysroot-test"
INHIBIT_DEFAULT_DEPS = "1"
PACKAGE_ARCH = "${MACHINE_ARCH}"
TESTSTRING ?= "1"
do_install() {
install -d ${D}${includedir}
echo "# test ${TESTSTRING}" > ${D}${includedir}/sysroot-test.h
}
EXCLUDE_FROM_WORLD = "1"

View File

@ -0,0 +1,14 @@
LICENSE = "CLOSED"
PROVIDES = "virtual/sysroot-test"
INHIBIT_DEFAULT_DEPS = "1"
PACKAGE_ARCH = "${MACHINE_ARCH}"
TESTSTRING ?= "2"
do_install() {
install -d ${D}${includedir}
echo "# test ${TESTSTRING}" > ${D}${includedir}/sysroot-test.h
}
EXCLUDE_FROM_WORLD = "1"

View File

@ -0,0 +1,6 @@
SUMMARY = "Virtual provider sysroot test"
LICENSE = "CLOSED"
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS = "virtual/sysroot-test"
EXCLUDE_FROM_WORLD = "1"

View File

@ -0,0 +1,37 @@
#
# SPDX-License-Identifier: MIT
#
import uuid
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake
class SysrootTests(OESelftestTestCase):
def test_sysroot_cleanup(self):
"""
Build sysroot test which depends on virtual/sysroot-test for one machine,
switch machine, switch provider of virtual/sysroot-test and check that the
sysroot is correctly cleaned up. The files in the two providers overlap
so can cause errors if the sysroot code doesn't function correctly.
Yes, sysroot-test should be machine specific really to avoid this, however
the sysroot cleanup should also work [YOCTO #13702].
"""
uuid1 = uuid.uuid4()
uuid2 = uuid.uuid4()
self.write_config("""
PREFERRED_PROVIDER_virtual/sysroot-test = "sysroot-test-arch1"
MACHINE = "qemux86"
TESTSTRING_pn-sysroot-test-arch1 = "%s"
TESTSTRING_pn-sysroot-test-arch2 = "%s"
""" % (uuid1, uuid2))
bitbake("sysroot-test")
self.write_config("""
PREFERRED_PROVIDER_virtual/sysroot-test = "sysroot-test-arch2"
MACHINE = "qemux86copy"
TESTSTRING_pn-sysroot-test-arch1 = "%s"
TESTSTRING_pn-sysroot-test-arch2 = "%s"
""" % (uuid1, uuid2))
bitbake("sysroot-test")