On 01/02/2023 14:49, Richard Purdie wrote:
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 think the things we can share are only about the features
configuration and the bitbake command. Going further would require to
create an if/else statement for the assert. I think this will not
simplify the code.
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.
I am not sure to understand. But if you suppose there should be
something in /usr/share/i18n/locales, there is nothing there.
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.
Ok, I'll send a v3 with the first part only. Let's forget about the code
sharing before we get clear about what the opposite test will be.
Thank you,
Louis
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#176554):
https://lists.openembedded.org/g/openembedded-core/message/176554
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]
-=-=-=-=-=-=-=-=-=-=-=-