On Fri, 2023-01-27 at 16:33 +0100, Louis Rannou wrote:
> From: Louis Rannou <lran...@baylibre.com>
> 
> [YOCTO #9070]
> 
> Add a new selftest to validate the locales generation. This selftest builds a
> complete target with GLIBC_GENERATE_LOCALES, IMAGE_LINGUAS,
> ENABLE_BINARY_LOCALE_GENERATION set.
> 
> The tests has two cases: GLIBC_GENERATE_LOCALES=1 and
> GLIBC_GENERATE_LOCALES=0. When set to 1, we check that the locales exist in 
> the
> local-archive and if it does exist for the glibc. When set to 0, we check it
> does not.
> 
> Signed-off-by: Louis Rannou <lran...@baylibre.com>
> ---
>  meta/lib/oeqa/selftest/cases/locales.py | 81 +++++++++++++++++++++++++
>  1 file changed, 81 insertions(+)
>  create mode 100644 meta/lib/oeqa/selftest/cases/locales.py
> 
> diff --git a/meta/lib/oeqa/selftest/cases/locales.py 
> b/meta/lib/oeqa/selftest/cases/locales.py
> new file mode 100644
> index 0000000000..f053cc8e31
> --- /dev/null
> +++ b/meta/lib/oeqa/selftest/cases/locales.py
> @@ -0,0 +1,81 @@
> +#
> +# SPDX-License-Identifier: MIT
> +#
> +
> +from oeqa.selftest.case import OESelftestTestCase
> +from oeqa.core.decorator import OETestTag
> +from oeqa.utils.commands import bitbake, runqemu
> +
> +class LocalesTest(OESelftestTestCase):
> +
> +    @OETestTag("runqemu")
> +    def test_locales_on(self):
> +        """
> +        Summary: Test the locales are generated
> +        Expected: 1. Check the locale exist in the locale-archive
> +                  2. Check the locale exist for the glibc
> +                  3. Check the locale can be generated
> +        Product: oe-core
> +        Author: Louis Rannou <lran...@baylibre.com>
> +        AutomatedBy: Louis Rannou <lran...@baylibre.com>
> +        """
> +
> +        features = []
> +        features.append('EXTRA_IMAGE_FEATURES = "empty-root-password 
> allow-empty-password allow-root-login"')
> +        features.append('IMAGE_INSTALL:append = " glibc-utils localedef"')
> +        features.append('GLIBC_GENERATE_LOCALES = "en_US.UTF-8 fr_FR.UTF-8"')
> +        features.append('IMAGE_LINGUAS:append = " en-us fr-fr"')
> +        features.append('ENABLE_BINARY_LOCALE_GENERATION = "1"')
> +        self.write_config("\n".join(features))
> +
> +        # Build a core-image-minimal
> +        bitbake('core-image-minimal')
> +
> +        with runqemu("core-image-minimal", ssh=False, 
> runqemuparams='nographic') as qemu:
> +            cmd = "locale -a"
> +            status, output = qemu.run_serial(cmd)
> +            # output must includes fr_FR or fr_FR.UTF-8
> +            self.assertEqual(status, 1, msg='localedef test failed: output: 
> %s' % output)
> +            self.assertIn("fr_FR", output, msg='locale -a test failed: 
> output: %s' % output)
> +
> +            cmd = "localedef --list-archive -v"
> +            status, output = qemu.run_serial(cmd)
> +            # output must includes fr_FR.utf8
> +            self.assertEqual(status, 1, msg='localedef test failed: output: 
> %s' % output)
> +            self.assertIn("fr_FR.utf8", output, msg='locale -a test failed: 
> output: %s' % output)
> +
> +    @OETestTag("runqemu")
> +    def test_locales_off(self):
> +        """
> +        Summary: Test the locales are not generated
> +        Expected: 1. Check the locale does not exist in the locale-archive
> +                  2. Check the locale does not exist for the glibc
> +                  3. Check the locale cannot be generated
> +        Product: oe-core
> +        Author: Louis Rannou <lran...@baylibre.com>
> +        AutomatedBy: Louis Rannou <lran...@baylibre.com>
> +        """
> +
> +        features = []
> +        features.append('EXTRA_IMAGE_FEATURES = "empty-root-password 
> allow-empty-password allow-root-login"')
> +        features.append('IMAGE_INSTALL:append = " glibc-utils localedef"')
> +        features.append('GLIBC_GENERATE_LOCALES = "en_US.UTF-8 fr_FR.UTF-8"')
> +        features.append('IMAGE_LINGUAS:append = " en-us fr-fr"')
> +        features.append('ENABLE_BINARY_LOCALE_GENERATION = "0"')
> +        self.write_config("\n".join(features))
> +
> +        # Build a core-image-minimal
> +        bitbake('core-image-minimal')
> +
> +        with runqemu("core-image-minimal", ssh=False, 
> runqemuparams='nographic') as qemu:
> +            cmd = "locale -a"
> +            status, output = qemu.run_serial(cmd)
> +            # output must not includes fr_FR or fr_FR.UTF-8
> +            self.assertEqual(status, 1, msg='localedef test failed: output: 
> %s' % output)

This should really say locale instead of localedef here to be clear
which command the error is coming from.

> +            self.assertNotIn("fr_FR", output, msg='locale -a test failed: 
> output: %s' % output)
> +
> +            cmd = "localedef --list-archive -v"
> +            status, output = qemu.run_serial(cmd)
> +            # output must not includes fr_FR.utf8
> +            self.assertEqual(status, 1, msg='localedef test failed: output: 
> %s' % output)
> +            self.assertNotIn("fr_FR.utf8", output, msg='locale -a test 
> failed: output: %s' % output)

We did run this through tests on the autobuilder and the tests did
pass. I did wonder rather than duplicate the whole test with a line
change, could we share the code between the two?

I then start looking at the code and I'm a bit worried the locales are
not present when binary locale generation is turned off as I think they
should be. Going from memory, I thought that they should be generated
on target at first boot in that case so they should be present in both
cases.

To keep things simple, lets merge the first case in and file a bug for
the other case? I think we'll need to investigate that and check
whether we're broken something somewhere.

Cheers,

Richard

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#176530): 
https://lists.openembedded.org/g/openembedded-core/message/176530
Mute This Topic: https://lists.openembedded.org/mt/96567951/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