Dear Sirs,

Sorry, could you please help to review patch v4?
In patch v4, I optimize the testcase to avoid non-deterministic fail.

Thank you

On Thu, 2023-07-13 at 02:16 +0000, yang...@mediatek.com wrote:
> From: Yang Xu <yang...@mediatek.com>
> 
> The `bb.siggen.compare_sigfiles` method transforms the key format
> from
> `[mc:<mc_name>:][virtual:][native:]<recipe path>:<taskname>` to
> `<recipe dir>/<recipe
> name>:<taskname>[:virtual][:native][:mc:<mc_name>]`
> by `clean_basepaths`. However, `find_siginfo` uses the original
> format
> to get the package name (pn) and task name.
> 
> This commit corrects the method for deriving the pn and task name in
> `find_siginfo` and adds handling for multilib name.
> And add test for compare_sigfiles and find_siginfo working together.
> 
> Signed-off-by: Yang Xu <yang...@mediatek.com>
> ---
> 
> Notes:
>     v1: correct handling for pn and taskname for native target in
> find_siginfo
>     v2: add handling for multilib target in find_siginfo
>     v3: add testcase for compare_sigfiles and find_siginfo work
> together.
>     v4: optimize testcase to avoid non-deterministic fail
> 
>  .../recipes-test/binutils/binutils_%.bbappend |  2 +
>  meta/lib/oe/sstatesig.py                      | 17 ++--
>  meta/lib/oeqa/selftest/cases/sstatetests.py   | 83
> +++++++++++++++++++
>  3 files changed, 97 insertions(+), 5 deletions(-)
>  create mode 100644 meta-selftest/recipes-
> test/binutils/binutils_%.bbappend
> 
> diff --git a/meta-selftest/recipes-test/binutils/binutils_%.bbappend
> b/meta-selftest/recipes-test/binutils/binutils_%.bbappend
> new file mode 100644
> index 0000000000..205720982c
> --- /dev/null
> +++ b/meta-selftest/recipes-test/binutils/binutils_%.bbappend
> @@ -0,0 +1,2 @@
> +# This bbappend is used to alter the recipe using the
> test_recipe.inc file created by tests.
> +include test_recipe.inc
> diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
> index f943df181e..f041a0c430 100644
> --- a/meta/lib/oe/sstatesig.py
> +++ b/meta/lib/oe/sstatesig.py
> @@ -321,11 +321,18 @@ def find_siginfo(pn, taskname, taskhashlist,
> d):
>      if not taskname:
>          # We have to derive pn and taskname
>          key = pn
> -        splitit = key.split('.bb:')
> -        taskname = splitit[1]
> -        pn = os.path.basename(splitit[0]).split('_')[0]
> -        if key.startswith('virtual:native:'):
> -            pn = pn + '-native'
> +        if key.count(':') >= 2:
> +            splitit, taskname, affix = key.split(':', 2)
> +        else:
> +            splitit, taskname = key.split(':', 1)
> +            affix = ''
> +        pn =
> os.path.splitext(os.path.basename(splitit))[0].split('_')[0]
> +        affixitems = affix.split(':')
> +        if affixitems[0] == 'virtual':
> +            if affixitems[1] == 'native':
> +                pn = pn + '-native'
> +            if affixitems[1] == 'multilib':
> +                pn = affixitems[2] + '-' + pn
>  
>      hashfiles = {}
>      filedates = {}
> diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py
> b/meta/lib/oeqa/selftest/cases/sstatetests.py
> index febafdb2f7..3fa3038218 100644
> --- a/meta/lib/oeqa/selftest/cases/sstatetests.py
> +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
> @@ -691,3 +691,86 @@ TMPDIR = "${TOPDIR}/tmp-sstatesamehash2"
>          self.maxDiff = None
>          self.assertCountEqual(files1, files2)
>  
> +class SStateFindSiginfo(SStateBase):
> +    def test_sstate_compare_sigfiles_and_find_siginfo(self):
> +        """
> +        Test the functionality of the find_siginfo: basic function
> and callback in compare_sigfiles
> +        """
> +        self.write_config("""
> +TMPDIR = \"${TOPDIR}/tmp-sstates-findsiginfo\"
> +TCLIBCAPPEND = \"\"
> +MACHINE = \"qemux86-64\"
> +require conf/multilib.conf
> +MULTILIBS = "multilib:lib32"
> +DEFAULTTUNE:virtclass-multilib-lib32 = "x86"
> +BB_SIGNATURE_HANDLER = "OEBasicHash"
> +""")
> +        self.track_for_cleanup(self.topdir + "/tmp-sstates-
> findsiginfo")
> +
> +        pns = ["binutils", "binutils-native", "lib32-binutils"]
> +        target_configs = [
> +"""
> +TMPVAL1 = "tmpval1"
> +TMPVAL2 = "tmpval2"
> +do_tmptask1() {
> +    echo ${TMPVAL1}
> +}
> +do_tmptask2() {
> +    echo ${TMPVAL2}
> +}
> +addtask do_tmptask1
> +addtask tmptask2 before do_tmptask1
> +""",
> +"""
> +TMPVAL3 = "tmpval3"
> +TMPVAL4 = "tmpval4"
> +do_tmptask1() {
> +    echo ${TMPVAL3}
> +}
> +do_tmptask2() {
> +    echo ${TMPVAL4}
> +}
> +addtask do_tmptask1
> +addtask tmptask2 before do_tmptask1
> +"""
> +        ]
> +
> +        for target_config in target_configs:
> +            self.write_recipeinc("binutils", target_config)
> +            for pn in pns:
> +                bitbake("%s -c do_tmptask1 -S none" % pn)
> +            self.delete_recipeinc("binutils")
> +
> +        with bb.tinfoil.Tinfoil() as tinfoil:
> +            tinfoil.prepare(config_only=True)
> +
> +            def find_siginfo(pn, taskname, sigs=None):
> +                result = None
> +                tinfoil.set_event_mask(["bb.event.FindSigInfoResult"
> ,
> +                                "bb.command.CommandCompleted"])
> +                ret = tinfoil.run_command("findSigInfo", pn,
> taskname, sigs)
> +                if ret:
> +                    while True:
> +                        event = tinfoil.wait_event(1)
> +                        if event:
> +                            if isinstance(event,
> bb.command.CommandCompleted):
> +                                break
> +                            elif isinstance(event,
> bb.event.FindSigInfoResult):
> +                                result = event.result
> +                return result
> +
> +            def recursecb(key, hash1, hash2):
> +                nonlocal recursecb_count
> +                recursecb_count += 1
> +                hashes = [hash1, hash2]
> +                hashfiles = find_siginfo(key, None, hashes)
> +                self.assertCountEqual(hashes, hashfiles)
> +                bb.siggen.compare_sigfiles(hashfiles[hash1],
> hashfiles[hash2], recursecb)
> +
> +            for pn in pns:
> +                recursecb_count = 0
> +                filedates = find_siginfo(pn, "do_tmptask1")
> +                self.assertGreaterEqual(len(filedates), 2)
> +                latestfiles = sorted(filedates.keys(), key=lambda f:
> filedates[f])[-2:]
> +                bb.siggen.compare_sigfiles(latestfiles[-2],
> latestfiles[-1], recursecb)
> +                self.assertEqual(recursecb_count,1)
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#184484): 
https://lists.openembedded.org/g/openembedded-core/message/184484
Mute This Topic: https://lists.openembedded.org/mt/100113209/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to