All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] bitbake-bblayers/create: Fix layer name generation
@ 2018-06-28 17:53 Joshua Watt
  2018-06-28 17:53 ` [PATCH 2/2] oe-selftest: Add bitbake-layer create-layer test Joshua Watt
  2018-06-29 17:54 ` [PATCH v2] " Joshua Watt
  0 siblings, 2 replies; 7+ messages in thread
From: Joshua Watt @ 2018-06-28 17:53 UTC (permalink / raw)
  To: openembedded-core

The path to where the layer was being created was taken verbatim as the
name of the layer when generating the layer.conf and README files from
templates. This causes problems in the layer.conf file because it would
result in strangely named variables like

 BBFILE_PATTERN_../my-layer = "..."

Instead of blindly taking the path, use the name of the last component
of the path as the layer name.

Additionally, rework the template files to use python format strings
with named parameters so that the same argument doesn't have to be
repeated multiple times.

[YOCTO #12808]

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 meta/lib/bblayers/create.py            |  7 +++++--
 meta/lib/bblayers/templates/README     | 12 ++++++------
 meta/lib/bblayers/templates/layer.conf | 16 ++++++++--------
 3 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/meta/lib/bblayers/create.py b/meta/lib/bblayers/create.py
index e06949c92b7..2ebf151ad18 100644
--- a/meta/lib/bblayers/create.py
+++ b/meta/lib/bblayers/create.py
@@ -30,8 +30,10 @@ class CreatePlugin(LayerPlugin):
         conf = os.path.join(layerdir, 'conf')
         bb.utils.mkdirhier(conf)
 
+        layername = os.path.basename(os.path.normpath(args.layerdir))
+
         # Create the README from templates/README
-        readme_template =  read_template('README') % (args.layerdir, args.layerdir, args.layerdir, args.layerdir, args.layerdir, args.layerdir)
+        readme_template =  read_template('README').format(layername=layername)
         readme = os.path.join(layerdir, 'README')
         with open(readme, 'w') as fd:
             fd.write(readme_template)
@@ -47,7 +49,8 @@ class CreatePlugin(LayerPlugin):
         compat = self.tinfoil.config_data.getVar('LAYERSERIES_COMPAT_core') or ""
 
         # Create the layer.conf from templates/layer.conf
-        layerconf_template = read_template('layer.conf') % (args.layerdir, args.layerdir, args.layerdir, args.priority, args.layerdir, args.layerdir, compat)
+        layerconf_template = read_template('layer.conf').format(
+                layername=layername, priority=args.priority, compat=compat)
         layerconf = os.path.join(conf, 'layer.conf')
         with open(layerconf, 'w') as fd:
             fd.write(layerconf_template)
diff --git a/meta/lib/bblayers/templates/README b/meta/lib/bblayers/templates/README
index 5a77f8d3478..fb2d28e1771 100644
--- a/meta/lib/bblayers/templates/README
+++ b/meta/lib/bblayers/templates/README
@@ -1,4 +1,4 @@
-This README file contains information on the contents of the %s layer.
+This README file contains information on the contents of the {layername} layer.
 
 Please see the corresponding sections below for details.
 
@@ -18,7 +18,7 @@ Dependencies
 Patches
 =======
 
-Please submit any patches against the %s layer to the xxxx mailing list (xxxx@zzzz.org)
+Please submit any patches against the {layername} layer to the xxxx mailing list (xxxx@zzzz.org)
 and cc: the maintainer:
 
 Maintainer: XXX YYYYYY <xxx.yyyyyy@zzzzz.com>
@@ -26,16 +26,16 @@ Maintainer: XXX YYYYYY <xxx.yyyyyy@zzzzz.com>
 Table of Contents
 =================
 
-  I. Adding the %s layer to your build
+  I. Adding the {layername} layer to your build
  II. Misc
 
 
-I. Adding the %s layer to your build
+I. Adding the {layername} layer to your build
 =================================================
 
-Run 'bitbake-layers add-layer %s'
+Run 'bitbake-layers add-layer {layername}'
 
 II. Misc
 ========
 
---- replace with specific information about the %s layer ---
+--- replace with specific information about the {layername} layer ---
diff --git a/meta/lib/bblayers/templates/layer.conf b/meta/lib/bblayers/templates/layer.conf
index 49f95cafc82..e2eaff43469 100644
--- a/meta/lib/bblayers/templates/layer.conf
+++ b/meta/lib/bblayers/templates/layer.conf
@@ -1,13 +1,13 @@
 # We have a conf and classes directory, add to BBPATH
-BBPATH .= ":${LAYERDIR}"
+BBPATH .= ":${{LAYERDIR}}"
 
 # We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
-            ${LAYERDIR}/recipes-*/*/*.bbappend"
+BBFILES += "${{LAYERDIR}}/recipes-*/*/*.bb \
+            ${{LAYERDIR}}/recipes-*/*/*.bbappend"
 
-BBFILE_COLLECTIONS += "%s"
-BBFILE_PATTERN_%s = "^${LAYERDIR}/"
-BBFILE_PRIORITY_%s = "%s"
+BBFILE_COLLECTIONS += "{layername}"
+BBFILE_PATTERN_{layername} = "^${{LAYERDIR}}/"
+BBFILE_PRIORITY_{layername} = "{priority}"
 
-LAYERDEPENDS_%s = "core"
-LAYERSERIES_COMPAT_%s = "%s"
+LAYERDEPENDS_{layername} = "core"
+LAYERSERIES_COMPAT_{layername} = "{compat}"
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] oe-selftest: Add bitbake-layer create-layer test
  2018-06-28 17:53 [PATCH 1/2] bitbake-bblayers/create: Fix layer name generation Joshua Watt
@ 2018-06-28 17:53 ` Joshua Watt
  2018-06-28 21:54   ` Richard Purdie
  2018-06-29 17:54 ` [PATCH v2] " Joshua Watt
  1 sibling, 1 reply; 7+ messages in thread
From: Joshua Watt @ 2018-06-28 17:53 UTC (permalink / raw)
  To: openembedded-core

Adds a test that creates a layer, adds it to bblayers.conf, then ensure
that it appears properly in bitbake-layers show-layers.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 meta/lib/oeqa/selftest/cases/bblayers.py | 26 +++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index 90a2249b081..fba7fbb9b0f 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -2,7 +2,7 @@ import os
 import re
 
 import oeqa.utils.ftools as ftools
-from oeqa.utils.commands import runCmd, get_bb_var
+from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
 
 from oeqa.selftest.case import OESelftestTestCase
 from oeqa.core.decorator.oeid import OETestID
@@ -85,6 +85,30 @@ class BitbakeLayers(OESelftestTestCase):
         self.assertNotEqual(result.status, 0, 'bitbake-layers show-recipes -i nonexistentclass should have failed')
         self.assertIn('ERROR:', result.output)
 
+    def test_bitbakelayers_createlayer(self):
+        priority = 10
+        layername = 'test-bitbakelayer-layercreate'
+        layerpath = os.path.join(get_bb_var('COREBASE'), layername)
+        self.assertFalse(os.path.exists(layerpath), '%s should not exist at this point in time' % layerpath)
+        result = runCmd('bitbake-layers create-layer --priority=%d %s' % (priority, layerpath))
+        self.track_for_cleanup(layerpath)
+        result = runCmd('bitbake-layers add-layer %s' % layerpath)
+        result = runCmd('bitbake-layers show-layers')
+        find_in_contents = re.search(re.escape(layername) + r'\s+' + re.escape(layerpath) + r'\s+' + re.escape(str(priority)), result.output)
+        self.assertTrue(find_in_contents, "%s not found in layers" % layername)
+
+        layervars = ['BBFILE_PRIORITY', 'BBFILE_PATTERN', 'LAYERDEPENDS', 'LAYERSERIES_COMPAT']
+        bb_vars = get_bb_vars(['BBFILE_COLLECTIONS'] + ['%s_%s' % (v, layername) for v in layervars])
+
+        for v in layervars:
+            varname = '%s_%s' % (v, layername)
+            self.assertTrue(bb_vars[varname], "%s not found" % varname)
+
+        find_in_contents = re.search(r'(^|\s)' + re.escape(layername) + r'($|\s)', bb_vars['BBFILE_COLLECTIONS'])
+        self.assertTrue(find_in_contents, "%s not in BBFILE_COLLECTIONS" % layername)
+
+        self.assertEqual(str(priority), bb_vars['BBFILE_PRIORITY_%s' % layername])
+
     def get_recipe_basename(self, recipe):
         recipe_file = ""
         result = runCmd("bitbake-layers show-recipes -f %s" % recipe)
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] oe-selftest: Add bitbake-layer create-layer test
  2018-06-28 17:53 ` [PATCH 2/2] oe-selftest: Add bitbake-layer create-layer test Joshua Watt
@ 2018-06-28 21:54   ` Richard Purdie
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Purdie @ 2018-06-28 21:54 UTC (permalink / raw)
  To: Joshua Watt, openembedded-core

On Thu, 2018-06-28 at 12:53 -0500, Joshua Watt wrote:
> Adds a test that creates a layer, adds it to bblayers.conf, then ensure
> that it appears properly in bitbake-layers show-layers.
> 
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> ---
>  meta/lib/oeqa/selftest/cases/bblayers.py | 26 +++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
> index 90a2249b081..fba7fbb9b0f 100644
> --- a/meta/lib/oeqa/selftest/cases/bblayers.py
> +++ b/meta/lib/oeqa/selftest/cases/bblayers.py
> @@ -2,7 +2,7 @@ import os
>  import re
>  
>  import oeqa.utils.ftools as ftools
> -from oeqa.utils.commands import runCmd, get_bb_var
> +from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
>  
>  from oeqa.selftest.case import OESelftestTestCase
>  from oeqa.core.decorator.oeid import OETestID
> @@ -85,6 +85,30 @@ class BitbakeLayers(OESelftestTestCase):
>          self.assertNotEqual(result.status, 0, 'bitbake-layers show-recipes -i nonexistentclass should have failed')
>          self.assertIn('ERROR:', result.output)
>  
> +    def test_bitbakelayers_createlayer(self):
> +        priority = 10
> +        layername = 'test-bitbakelayer-layercreate'
> +        layerpath = os.path.join(get_bb_var('COREBASE'), layername)
> +        self.assertFalse(os.path.exists(layerpath), '%s should not exist at this point in time' % layerpath)
> +        result = runCmd('bitbake-layers create-layer --priority=%d %s' % (priority, layerpath))
> +        self.track_for_cleanup(layerpath)
> +        result = runCmd('bitbake-layers add-layer %s' % layerpath)
> +        result = runCmd('bitbake-layers show-layers')
> +        find_in_contents = re.search(re.escape(layername) + r'\s+' + re.escape(layerpath) + r'\s+' + re.escape(str(priority)), result.output)
> +        self.assertTrue(find_in_contents, "%s not found in layers" % layername)

This looks good and top marks for adding unit tests!

One tip learnt from experience is that assertTrue can be problematic
because when it fails, the debug output it gives is useless as it says
it wasn't True. In this case, you need to put result.output into the
msg so that we'd have some chance of debugging it from the failure
message.

> +
> +        layervars = ['BBFILE_PRIORITY', 'BBFILE_PATTERN', 'LAYERDEPENDS', 'LAYERSERIES_COMPAT']
> +        bb_vars = get_bb_vars(['BBFILE_COLLECTIONS'] + ['%s_%s' % (v, layername) for v in layervars])
> +
> +        for v in layervars:
> +            varname = '%s_%s' % (v, layername)
> +            self.assertTrue(bb_vars[varname], "%s not found" % varname)

self.assertIsNotNone() ?

Cheers,

Richard




^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] oe-selftest: Add bitbake-layer create-layer test
  2018-06-28 17:53 [PATCH 1/2] bitbake-bblayers/create: Fix layer name generation Joshua Watt
  2018-06-28 17:53 ` [PATCH 2/2] oe-selftest: Add bitbake-layer create-layer test Joshua Watt
@ 2018-06-29 17:54 ` Joshua Watt
  2018-06-30  9:57   ` Richard Purdie
  2018-06-30 16:16   ` [PATCH v3] " Joshua Watt
  1 sibling, 2 replies; 7+ messages in thread
From: Joshua Watt @ 2018-06-29 17:54 UTC (permalink / raw)
  To: openembedded-core

Adds a test that creates a layer, adds it to bblayers.conf, then ensure
that it appears properly in bitbake-layers show-layers.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 meta/lib/oeqa/selftest/cases/bblayers.py | 26 +++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index 90a2249b081..f2fc8327647 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -2,7 +2,7 @@ import os
 import re
 
 import oeqa.utils.ftools as ftools
-from oeqa.utils.commands import runCmd, get_bb_var
+from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
 
 from oeqa.selftest.case import OESelftestTestCase
 from oeqa.core.decorator.oeid import OETestID
@@ -85,6 +85,30 @@ class BitbakeLayers(OESelftestTestCase):
         self.assertNotEqual(result.status, 0, 'bitbake-layers show-recipes -i nonexistentclass should have failed')
         self.assertIn('ERROR:', result.output)
 
+    def test_bitbakelayers_createlayer(self):
+        priority = 10
+        layername = 'test-bitbakelayer-layercreate'
+        layerpath = os.path.join(get_bb_var('COREBASE'), layername)
+        self.assertFalse(os.path.exists(layerpath), '%s should not exist at this point in time' % layerpath)
+        result = runCmd('bitbake-layers create-layer --priority=%d %s' % (priority, layerpath))
+        self.track_for_cleanup(layerpath)
+        result = runCmd('bitbake-layers add-layer %s' % layerpath)
+        result = runCmd('bitbake-layers show-layers')
+        find_in_contents = re.search(re.escape(layername) + r'\s+' + re.escape(layerpath) + r'\s+' + re.escape(str(priority)), result.output)
+        self.assertTrue(find_in_contents, "%s not found in layers\n%s" % (layername, result.output))
+
+        layervars = ['BBFILE_PRIORITY', 'BBFILE_PATTERN', 'LAYERDEPENDS', 'LAYERSERIES_COMPAT']
+        bb_vars = get_bb_vars(['BBFILE_COLLECTIONS'] + ['%s_%s' % (v, layername) for v in layervars])
+
+        for v in layervars:
+            varname = '%s_%s' % (v, layername)
+            self.assertIsNotNone(bb_vars[varname], "%s not found" % varname)
+
+        find_in_contents = re.search(r'(^|\s)' + re.escape(layername) + r'($|\s)', bb_vars['BBFILE_COLLECTIONS'])
+        self.assertTrue(find_in_contents, "%s not in BBFILE_COLLECTIONS" % layername)
+
+        self.assertEqual(bb_vars['BBFILE_PRIORITY_%s' % layername], str(priority), 'BBFILE_PRIORITY_%s != %d' % (layername, priority))
+
     def get_recipe_basename(self, recipe):
         recipe_file = ""
         result = runCmd("bitbake-layers show-recipes -f %s" % recipe)
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] oe-selftest: Add bitbake-layer create-layer test
  2018-06-29 17:54 ` [PATCH v2] " Joshua Watt
@ 2018-06-30  9:57   ` Richard Purdie
  2018-06-30 16:20     ` Joshua Watt
  2018-06-30 16:16   ` [PATCH v3] " Joshua Watt
  1 sibling, 1 reply; 7+ messages in thread
From: Richard Purdie @ 2018-06-30  9:57 UTC (permalink / raw)
  To: Joshua Watt, openembedded-core

On Fri, 2018-06-29 at 12:54 -0500, Joshua Watt wrote:
> Adds a test that creates a layer, adds it to bblayers.conf, then
> ensure
> that it appears properly in bitbake-layers show-layers.
> 
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> ---
>  meta/lib/oeqa/selftest/cases/bblayers.py | 26
> +++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)

I ran this on the autobuilder and it showed:

https://autobuilder.yocto.io/builders/nightly-oe-selftest/builds/1154/steps/Running%20oe-selftest/logs/stdio

Tests were working, it runs this test, then everything fails:

2018-06-29 23:50:23,781 - oe-selftest - INFO -  ... OK (719.550s)
2018-06-29 23:50:23,783 - oe-selftest - INFO -   test_bitbakelayers_add_remove (bblayers.BitbakeLayers)
2018-06-29 23:50:39,742 - oe-selftest - INFO -  ... OK (15.959s)
2018-06-29 23:50:39,742 - oe-selftest - INFO -   test_bitbakelayers_createlayer (bblayers.BitbakeLayers)
2018-06-29 23:50:49,526 - oe-selftest - INFO -  ... OK (9.783s)
2018-06-29 23:50:49,526 - oe-selftest - INFO -   test_bitbakelayers_flatten (bblayers.BitbakeLayers)
2018-06-29 23:50:49,971 - oe-selftest - INFO -  ... FAIL (0.445s)
2018-06-29 23:50:49,971 - oe-selftest - INFO -   test_bitbakelayers_showappends (bblayers.BitbakeLayers)
2018-06-29 23:50:50,356 - oe-selftest - INFO -  ... FAIL (0.385s)
2018-06-29 23:50:50,356 - oe-selftest - INFO -   test_bitbakelayers_showcrossdepends (bblayers.BitbakeLayers)
2018-06-29 23:50:50,761 - oe-selftest - INFO -  ... FAIL (0.405s)

Later you can see the error:

ERROR: Layer directory '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/test-bitbakelayer-layercreate' does not exist! Please check BBLAYERS in /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/build/conf/bblayers.conf

so I think something in the cleanup of the test is wrong...

Cheers,

Richard

> diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py
> b/meta/lib/oeqa/selftest/cases/bblayers.py
> index 90a2249b081..f2fc8327647 100644
> --- a/meta/lib/oeqa/selftest/cases/bblayers.py
> +++ b/meta/lib/oeqa/selftest/cases/bblayers.py
> @@ -2,7 +2,7 @@ import os
>  import re
>  
>  import oeqa.utils.ftools as ftools
> -from oeqa.utils.commands import runCmd, get_bb_var
> +from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
>  
>  from oeqa.selftest.case import OESelftestTestCase
>  from oeqa.core.decorator.oeid import OETestID
> @@ -85,6 +85,30 @@ class BitbakeLayers(OESelftestTestCase):
>          self.assertNotEqual(result.status, 0, 'bitbake-layers show-
> recipes -i nonexistentclass should have failed')
>          self.assertIn('ERROR:', result.output)
>  
> +    def test_bitbakelayers_createlayer(self):
> +        priority = 10
> +        layername = 'test-bitbakelayer-layercreate'
> +        layerpath = os.path.join(get_bb_var('COREBASE'), layername)
> +        self.assertFalse(os.path.exists(layerpath), '%s should not
> exist at this point in time' % layerpath)
> +        result = runCmd('bitbake-layers create-layer --priority=%d
> %s' % (priority, layerpath))
> +        self.track_for_cleanup(layerpath)
> +        result = runCmd('bitbake-layers add-layer %s' % layerpath)
> +        result = runCmd('bitbake-layers show-layers')
> +        find_in_contents = re.search(re.escape(layername) + r'\s+' +
> re.escape(layerpath) + r'\s+' + re.escape(str(priority)),
> result.output)
> +        self.assertTrue(find_in_contents, "%s not found in
> layers\n%s" % (layername, result.output))
> +
> +        layervars = ['BBFILE_PRIORITY', 'BBFILE_PATTERN',
> 'LAYERDEPENDS', 'LAYERSERIES_COMPAT']
> +        bb_vars = get_bb_vars(['BBFILE_COLLECTIONS'] + ['%s_%s' %
> (v, layername) for v in layervars])
> +
> +        for v in layervars:
> +            varname = '%s_%s' % (v, layername)
> +            self.assertIsNotNone(bb_vars[varname], "%s not found" %
> varname)
> +
> +        find_in_contents = re.search(r'(^|\s)' +
> re.escape(layername) + r'($|\s)', bb_vars['BBFILE_COLLECTIONS'])
> +        self.assertTrue(find_in_contents, "%s not in
> BBFILE_COLLECTIONS" % layername)
> +
> +        self.assertEqual(bb_vars['BBFILE_PRIORITY_%s' % layername],
> str(priority), 'BBFILE_PRIORITY_%s != %d' % (layername, priority))
> +
>      def get_recipe_basename(self, recipe):
>          recipe_file = ""
>          result = runCmd("bitbake-layers show-recipes -f %s" %
> recipe)


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3] oe-selftest: Add bitbake-layer create-layer test
  2018-06-29 17:54 ` [PATCH v2] " Joshua Watt
  2018-06-30  9:57   ` Richard Purdie
@ 2018-06-30 16:16   ` Joshua Watt
  1 sibling, 0 replies; 7+ messages in thread
From: Joshua Watt @ 2018-06-30 16:16 UTC (permalink / raw)
  To: openembedded-core

Adds a test that creates a layer, adds it to bblayers.conf, then ensure
that it appears properly in bitbake-layers show-layers.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 meta/lib/oeqa/selftest/cases/bblayers.py | 27 +++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index 90a2249b081..3448ae1999b 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -2,7 +2,7 @@ import os
 import re
 
 import oeqa.utils.ftools as ftools
-from oeqa.utils.commands import runCmd, get_bb_var
+from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
 
 from oeqa.selftest.case import OESelftestTestCase
 from oeqa.core.decorator.oeid import OETestID
@@ -85,6 +85,31 @@ class BitbakeLayers(OESelftestTestCase):
         self.assertNotEqual(result.status, 0, 'bitbake-layers show-recipes -i nonexistentclass should have failed')
         self.assertIn('ERROR:', result.output)
 
+    def test_bitbakelayers_createlayer(self):
+        priority = 10
+        layername = 'test-bitbakelayer-layercreate'
+        layerpath = os.path.join(get_bb_var('COREBASE'), layername)
+        self.assertFalse(os.path.exists(layerpath), '%s should not exist at this point in time' % layerpath)
+        result = runCmd('bitbake-layers create-layer --priority=%d %s' % (priority, layerpath))
+        self.track_for_cleanup(layerpath)
+        result = runCmd('bitbake-layers add-layer %s' % layerpath)
+        self.add_command_to_tearDown('bitbake-layers remove-layer %s' % layerpath)
+        result = runCmd('bitbake-layers show-layers')
+        find_in_contents = re.search(re.escape(layername) + r'\s+' + re.escape(layerpath) + r'\s+' + re.escape(str(priority)), result.output)
+        self.assertTrue(find_in_contents, "%s not found in layers\n%s" % (layername, result.output))
+
+        layervars = ['BBFILE_PRIORITY', 'BBFILE_PATTERN', 'LAYERDEPENDS', 'LAYERSERIES_COMPAT']
+        bb_vars = get_bb_vars(['BBFILE_COLLECTIONS'] + ['%s_%s' % (v, layername) for v in layervars])
+
+        for v in layervars:
+            varname = '%s_%s' % (v, layername)
+            self.assertIsNotNone(bb_vars[varname], "%s not found" % varname)
+
+        find_in_contents = re.search(r'(^|\s)' + re.escape(layername) + r'($|\s)', bb_vars['BBFILE_COLLECTIONS'])
+        self.assertTrue(find_in_contents, "%s not in BBFILE_COLLECTIONS" % layername)
+
+        self.assertEqual(bb_vars['BBFILE_PRIORITY_%s' % layername], str(priority), 'BBFILE_PRIORITY_%s != %d' % (layername, priority))
+
     def get_recipe_basename(self, recipe):
         recipe_file = ""
         result = runCmd("bitbake-layers show-recipes -f %s" % recipe)
-- 
2.17.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] oe-selftest: Add bitbake-layer create-layer test
  2018-06-30  9:57   ` Richard Purdie
@ 2018-06-30 16:20     ` Joshua Watt
  0 siblings, 0 replies; 7+ messages in thread
From: Joshua Watt @ 2018-06-30 16:20 UTC (permalink / raw)
  To: Richard Purdie; +Cc: OE-core

On Sat, Jun 30, 2018 at 4:57 AM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Fri, 2018-06-29 at 12:54 -0500, Joshua Watt wrote:
> > Adds a test that creates a layer, adds it to bblayers.conf, then
> > ensure
> > that it appears properly in bitbake-layers show-layers.
> >
> > Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> > ---
> >  meta/lib/oeqa/selftest/cases/bblayers.py | 26
> > +++++++++++++++++++++++-
> >  1 file changed, 25 insertions(+), 1 deletion(-)
>
> I ran this on the autobuilder and it showed:
>
> https://autobuilder.yocto.io/builders/nightly-oe-selftest/builds/1154/steps/Running%20oe-selftest/logs/stdio
>
> Tests were working, it runs this test, then everything fails:
>
> 2018-06-29 23:50:23,781 - oe-selftest - INFO -  ... OK (719.550s)
> 2018-06-29 23:50:23,783 - oe-selftest - INFO -   test_bitbakelayers_add_remove (bblayers.BitbakeLayers)
> 2018-06-29 23:50:39,742 - oe-selftest - INFO -  ... OK (15.959s)
> 2018-06-29 23:50:39,742 - oe-selftest - INFO -   test_bitbakelayers_createlayer (bblayers.BitbakeLayers)
> 2018-06-29 23:50:49,526 - oe-selftest - INFO -  ... OK (9.783s)
> 2018-06-29 23:50:49,526 - oe-selftest - INFO -   test_bitbakelayers_flatten (bblayers.BitbakeLayers)
> 2018-06-29 23:50:49,971 - oe-selftest - INFO -  ... FAIL (0.445s)
> 2018-06-29 23:50:49,971 - oe-selftest - INFO -   test_bitbakelayers_showappends (bblayers.BitbakeLayers)
> 2018-06-29 23:50:50,356 - oe-selftest - INFO -  ... FAIL (0.385s)
> 2018-06-29 23:50:50,356 - oe-selftest - INFO -   test_bitbakelayers_showcrossdepends (bblayers.BitbakeLayers)
> 2018-06-29 23:50:50,761 - oe-selftest - INFO -  ... FAIL (0.405s)
>
> Later you can see the error:
>
> ERROR: Layer directory '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/test-bitbakelayer-layercreate' does not exist! Please check BBLAYERS in /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/build/conf/bblayers.conf
>
> so I think something in the cleanup of the test is wrong...

Oops, sorry about that. I think I saw that my bblayer.conf file was
correctly restored after oe-selftest completed, and assumed that was
being done between each test case. It should be fixed now in V3.

I wonder if you could make oe-selftest issue a warning when it exists
if the original bblayer.conf doesn't match the current one....

>
> Cheers,
>
> Richard
>
> > diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py
> > b/meta/lib/oeqa/selftest/cases/bblayers.py
> > index 90a2249b081..f2fc8327647 100644
> > --- a/meta/lib/oeqa/selftest/cases/bblayers.py
> > +++ b/meta/lib/oeqa/selftest/cases/bblayers.py
> > @@ -2,7 +2,7 @@ import os
> >  import re
> >
> >  import oeqa.utils.ftools as ftools
> > -from oeqa.utils.commands import runCmd, get_bb_var
> > +from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars
> >
> >  from oeqa.selftest.case import OESelftestTestCase
> >  from oeqa.core.decorator.oeid import OETestID
> > @@ -85,6 +85,30 @@ class BitbakeLayers(OESelftestTestCase):
> >          self.assertNotEqual(result.status, 0, 'bitbake-layers show-
> > recipes -i nonexistentclass should have failed')
> >          self.assertIn('ERROR:', result.output)
> >
> > +    def test_bitbakelayers_createlayer(self):
> > +        priority = 10
> > +        layername = 'test-bitbakelayer-layercreate'
> > +        layerpath = os.path.join(get_bb_var('COREBASE'), layername)
> > +        self.assertFalse(os.path.exists(layerpath), '%s should not
> > exist at this point in time' % layerpath)
> > +        result = runCmd('bitbake-layers create-layer --priority=%d
> > %s' % (priority, layerpath))
> > +        self.track_for_cleanup(layerpath)
> > +        result = runCmd('bitbake-layers add-layer %s' % layerpath)
> > +        result = runCmd('bitbake-layers show-layers')
> > +        find_in_contents = re.search(re.escape(layername) + r'\s+' +
> > re.escape(layerpath) + r'\s+' + re.escape(str(priority)),
> > result.output)
> > +        self.assertTrue(find_in_contents, "%s not found in
> > layers\n%s" % (layername, result.output))
> > +
> > +        layervars = ['BBFILE_PRIORITY', 'BBFILE_PATTERN',
> > 'LAYERDEPENDS', 'LAYERSERIES_COMPAT']
> > +        bb_vars = get_bb_vars(['BBFILE_COLLECTIONS'] + ['%s_%s' %
> > (v, layername) for v in layervars])
> > +
> > +        for v in layervars:
> > +            varname = '%s_%s' % (v, layername)
> > +            self.assertIsNotNone(bb_vars[varname], "%s not found" %
> > varname)
> > +
> > +        find_in_contents = re.search(r'(^|\s)' +
> > re.escape(layername) + r'($|\s)', bb_vars['BBFILE_COLLECTIONS'])
> > +        self.assertTrue(find_in_contents, "%s not in
> > BBFILE_COLLECTIONS" % layername)
> > +
> > +        self.assertEqual(bb_vars['BBFILE_PRIORITY_%s' % layername],
> > str(priority), 'BBFILE_PRIORITY_%s != %d' % (layername, priority))
> > +
> >      def get_recipe_basename(self, recipe):
> >          recipe_file = ""
> >          result = runCmd("bitbake-layers show-recipes -f %s" %
> > recipe)


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-06-30 16:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-28 17:53 [PATCH 1/2] bitbake-bblayers/create: Fix layer name generation Joshua Watt
2018-06-28 17:53 ` [PATCH 2/2] oe-selftest: Add bitbake-layer create-layer test Joshua Watt
2018-06-28 21:54   ` Richard Purdie
2018-06-29 17:54 ` [PATCH v2] " Joshua Watt
2018-06-30  9:57   ` Richard Purdie
2018-06-30 16:20     ` Joshua Watt
2018-06-30 16:16   ` [PATCH v3] " Joshua Watt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.