#
# 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")

    def test_sysroot_max_shebang(self):
        """
        Summary:   Check max shebang triggers. To confirm [YOCTO #11053] is closed.
        Expected:  Fail when a shebang bigger than the max shebang-size is reached.
        Author:    Paulo Neves <ptsneves@gmail.com>
        """
        expected = "maximum shebang size exceeded, the maximum size is 128. [shebang-size]"
        res = bitbake("sysroot-shebang-test-native -c populate_sysroot", ignore_status=True)
        self.assertTrue(expected in res.output, msg=res.output)
        self.assertTrue(res.status != 0)

    def test_sysroot_la(self):
        """
        Summary:   Check that workdir paths are not contained in .la files.
        Expected:  Fail when a workdir path is found in the file content.
        Author:    Paulo Neves <ptsneves@gmail.com>
        """
        expected = "la-test.la failed sanity test (workdir) in path"

        res = bitbake("sysroot-la-test -c populate_sysroot", ignore_status=True)
        self.assertTrue(expected in res.output, msg=res.output)
        self.assertTrue('[la]' in res.output, msg=res.output)
        self.assertTrue(res.status != 0)

        res = bitbake("sysroot-la-test-native -c populate_sysroot", ignore_status=True)
        self.assertTrue(expected in res.output, msg=res.output)
        self.assertTrue('[la]' in res.output, msg=res.output)
        self.assertTrue(res.status != 0)

    def test_sysroot_pkgconfig(self):
        """
        Summary:   Check that tmpdir paths are not contained in .pc files.
        Expected:  Fail when a tmpdir path is found in the file content.
        Author:    Paulo Neves <ptsneves@gmail.com>
        """
        expected = "test.pc failed sanity test (tmpdir) in path"

        res = bitbake("sysroot-pc-test -c populate_sysroot", ignore_status=True)
        self.assertTrue('[pkgconfig]' in res.output, msg=res.output)
        self.assertTrue(expected in res.output, msg=res.output)
        self.assertTrue(res.status != 0)

        res = bitbake("sysroot-pc-test-native -c populate_sysroot", ignore_status=True)
        self.assertTrue(expected in res.output, msg=res.output)
        self.assertTrue('[pkgconfig]' in res.output, msg=res.output)
        self.assertTrue(res.status != 0)
