diff mbox series

oeqa/selftest: add test case to cover 'devtool modify -n' for a git recipe

Message ID 20240122052926.1962273-1-Qi.Chen@windriver.com
State Accepted, archived
Commit 2c2ba5f9497462a190b849a69d8440149f80582a
Headers show
Series oeqa/selftest: add test case to cover 'devtool modify -n' for a git recipe | expand

Commit Message

ChenQi Jan. 22, 2024, 5:29 a.m. UTC
From: Chen Qi <Qi.Chen@windriver.com>

Add a test case to ensure the following error does not happen again for
'devtool modify -n'.

Traceback (most recent call last):
  File "/buildarea2/chenqi/poky/scripts/devtool", line 349, in <module>
    ret = main()
  File "/buildarea2/chenqi/poky/scripts/devtool", line 336, in main
    ret = args.func(args, config, basepath, workspace)
  File "/buildarea2/chenqi/poky/scripts/lib/devtool/standard.py", line 924, in modify
    if not initial_revs["."]:
KeyError: '.'

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/lib/oeqa/selftest/cases/devtool.py | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

Comments

Richard Purdie Jan. 26, 2024, 2:54 p.m. UTC | #1
On Mon, 2024-01-22 at 13:29 +0800, Chen Qi via lists.openembedded.org
wrote:
> From: Chen Qi <Qi.Chen@windriver.com>
> 
> Add a test case to ensure the following error does not happen again for
> 'devtool modify -n'.
> 
> Traceback (most recent call last):
>   File "/buildarea2/chenqi/poky/scripts/devtool", line 349, in <module>
>     ret = main()
>   File "/buildarea2/chenqi/poky/scripts/devtool", line 336, in main
>     ret = args.func(args, config, basepath, workspace)
>   File "/buildarea2/chenqi/poky/scripts/lib/devtool/standard.py", line 924, in modify
>     if not initial_revs["."]:
> KeyError: '.'
> 
> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
> ---
>  meta/lib/oeqa/selftest/cases/devtool.py | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
> index a877720769..22ea0ecba9 100644
> --- a/meta/lib/oeqa/selftest/cases/devtool.py
> +++ b/meta/lib/oeqa/selftest/cases/devtool.py
> @@ -917,6 +917,28 @@ class DevtoolModifyTests(DevtoolBase):
>          # Try building
>          bitbake(testrecipe)
>  
> +    def test_devtool_modify_git_no_extract(self):
> +        # Check preconditions
> +        testrecipe = 'psplash'
> +        src_uri = get_bb_var('SRC_URI', testrecipe)
> +        self.assertIn('git://', src_uri, 'This test expects the %s recipe to be a git recipe' % testrecipe)
> +        # Clean up anything in the workdir/sysroot/sstate cache
> +        bitbake('%s -c cleansstate' % testrecipe)

I'm afraid we can't use cleansstate inside oe-selftest as it may race
against other copies of oe-selftest running against the same sstate
cache (or other builds using psplash in this case).

We'll need to find another way to make this work.

Cheers,

Richard
Alexander Kanavin Jan. 26, 2024, 3 p.m. UTC | #2
On Fri, 26 Jan 2024 at 15:54, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:

> > +    def test_devtool_modify_git_no_extract(self):
> > +        # Check preconditions
> > +        testrecipe = 'psplash'
> > +        src_uri = get_bb_var('SRC_URI', testrecipe)
> > +        self.assertIn('git://', src_uri, 'This test expects the %s recipe to be a git recipe' % testrecipe)
> > +        # Clean up anything in the workdir/sysroot/sstate cache
> > +        bitbake('%s -c cleansstate' % testrecipe)
>
> I'm afraid we can't use cleansstate inside oe-selftest as it may race
> against other copies of oe-selftest running against the same sstate
> cache (or other builds using psplash in this case).
>
> We'll need to find another way to make this work.

There's a number of existing tests in
meta/lib/oeqa/selftest/cases/devtool.py which do rely on cleansstate;
I can only presume they do it with utmost care, and can be used as
examples for how things could be done.

Alex
Richard Purdie Jan. 26, 2024, 3:05 p.m. UTC | #3
On Fri, 2024-01-26 at 16:00 +0100, Alexander Kanavin wrote:
> On Fri, 26 Jan 2024 at 15:54, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
> 
> > > +    def test_devtool_modify_git_no_extract(self):
> > > +        # Check preconditions
> > > +        testrecipe = 'psplash'
> > > +        src_uri = get_bb_var('SRC_URI', testrecipe)
> > > +        self.assertIn('git://', src_uri, 'This test expects the %s recipe to be a git recipe' % testrecipe)
> > > +        # Clean up anything in the workdir/sysroot/sstate cache
> > > +        bitbake('%s -c cleansstate' % testrecipe)
> > 
> > I'm afraid we can't use cleansstate inside oe-selftest as it may race
> > against other copies of oe-selftest running against the same sstate
> > cache (or other builds using psplash in this case).
> > 
> > We'll need to find another way to make this work.
> 
> There's a number of existing tests in
> meta/lib/oeqa/selftest/cases/devtool.py which do rely on cleansstate;
> I can only presume they do it with utmost care, and can be used as
> examples for how things could be done.

Thanks for the reminder. devtool is "special" in that it does:

        cls.sstate_conf  = 'SSTATE_DIR = "%s"\n' % cls.devtool_sstate
        cls.sstate_conf += ('SSTATE_MIRRORS += "file://.* file:///%s/PATH"\n' % cls.original_sstate)

in DevtoolBase which means it can call cleansstate.

I'll queue it for merge, thanks.

Cheers,

Richard
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index a877720769..22ea0ecba9 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -917,6 +917,28 @@  class DevtoolModifyTests(DevtoolBase):
         # Try building
         bitbake(testrecipe)
 
+    def test_devtool_modify_git_no_extract(self):
+        # Check preconditions
+        testrecipe = 'psplash'
+        src_uri = get_bb_var('SRC_URI', testrecipe)
+        self.assertIn('git://', src_uri, 'This test expects the %s recipe to be a git recipe' % testrecipe)
+        # Clean up anything in the workdir/sysroot/sstate cache
+        bitbake('%s -c cleansstate' % testrecipe)
+        # Try modifying a recipe
+        tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+        self.track_for_cleanup(tempdir)
+        self.track_for_cleanup(self.workspacedir)
+        self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+        self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+        result = runCmd('git clone https://git.yoctoproject.org/psplash %s && devtool modify -n %s %s' % (tempdir, testrecipe, tempdir))
+        self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created. devtool output: %s' % result.output)
+        matches = glob.glob(os.path.join(self.workspacedir, 'appends', 'psplash_*.bbappend'))
+        self.assertTrue(matches, 'bbappend not created')
+        # Test devtool status
+        result = runCmd('devtool status')
+        self.assertIn(testrecipe, result.output)
+        self.assertIn(tempdir, result.output)
+
     def test_devtool_modify_git_crates_subpath(self):
         # This tests two things in devtool context:
         #   - that we support local git dependencies for cargo based recipe