<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vyacheslav+Yurkov</id>
	<title>Yocto Project - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vyacheslav+Yurkov"/>
	<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/Special:Contributions/Vyacheslav_Yurkov"/>
	<updated>2026-06-08T05:58:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Oe-selftest&amp;diff=86220</id>
		<title>Oe-selftest</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Oe-selftest&amp;diff=86220"/>
		<updated>2024-02-19T06:48:56Z</updated>

		<summary type="html">&lt;p&gt;Vyacheslav Yurkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
Oe-selftest is a test framework used for testing the OpenEmbedded build system. Following are some key points in describing oe-selftest:&lt;br /&gt;
* based on Python [http://docs.python.org/2/library/unittest.html unittest]&lt;br /&gt;
* designed to simulate normal usage patterns &lt;br /&gt;
* does not cover image run-time testing&lt;br /&gt;
* implements a new layer that contains generic/specific metadata used only by tests&lt;br /&gt;
&lt;br /&gt;
=How to use=&lt;br /&gt;
&lt;br /&gt;
In order to use oe-selftest, you need the following(in this specific order):&lt;br /&gt;
# Download poky / openembedded-core (dora or newer branch)&lt;br /&gt;
# source the build environment setup script&lt;br /&gt;
# add the meta-selftest layer in conf/bblayers.conf&lt;br /&gt;
# add SANITY_TESTED_DISTROS=&amp;quot;&amp;quot; to local.conf&lt;br /&gt;
&lt;br /&gt;
Some selftests require qemu support, which in turns sets up internal network to perform the tests. This is a privileged operation, so make sure the user you run the tests with has required privileges. Or for simplicity extend your &#039;&#039;/etc/sudoers&#039;&#039; to allow running following commands:&lt;br /&gt;
* poky/scripts/runqemu-ifup&lt;br /&gt;
* poky/scripts/runqemu-ifdown&lt;br /&gt;
* poky/scripts/runqemu-gen-tapdevs &lt;br /&gt;
&lt;br /&gt;
== Running all (except hidden) tests ==&lt;br /&gt;
To run all oe-selftest tests simply issue: &lt;br /&gt;
 $ oe-selftest --run-all-tests&lt;br /&gt;
&lt;br /&gt;
==Listing tests==&lt;br /&gt;
#--list-modules: lists all available modules.&lt;br /&gt;
#--list-classes: lists all available classes and the tests they contain.&lt;br /&gt;
#--list-tests-by &amp;lt;name|class|module|id|tag&amp;gt;: will list the tests that match the searching criteria and provide additional details like: id, tag, name, class, module for each found test.&lt;br /&gt;
&lt;br /&gt;
Listing used tags: &lt;br /&gt;
 --list-tags&lt;br /&gt;
&lt;br /&gt;
Listing all tests:&lt;br /&gt;
 --list-tests&lt;br /&gt;
&lt;br /&gt;
== Running specific tests ==&lt;br /&gt;
First you need to identify the test(s) that you want to run. You will need the following information: test module, test class, test method name.&lt;br /&gt;
Look for the test modules inside /meta/lib/oeqa/selftest/ .&lt;br /&gt;
After you have obtained the above information, issue from the command line: &#039;oe-selftest module1.Class1.test_1 module1.Class1.test_2 module2.Class2.test_3 ...&#039; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are 2 methods for running specific tests:&lt;br /&gt;
&lt;br /&gt;
Note:  &lt;br /&gt;
*Keep in mind this structure: module.class.test&lt;br /&gt;
*The order the tests are running is alphabetical.&lt;br /&gt;
#--run-tests:&lt;br /&gt;
#;-–run-tests moduleA moduleB: will run all tests from this two modules&lt;br /&gt;
#;–-run-tests moduleA.classA module.classB: will run all tests from this two classes&lt;br /&gt;
#;–-run-tests moduleA.classA.test_A module.classB.test_B: will run these two tests&lt;br /&gt;
#:You can mix and match modules, classes and test names:&lt;br /&gt;
#;-–run-tests moduleA moduleB.classB moduleC.classC.testC: will run all tests from moduleA, all tests from moduleB.classB and testC from moduleC.classC&lt;br /&gt;
#-–run-tests-by  &amp;lt;name|class|module|id|tag&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
#;name: --run-tests-by name testA testB testC: simply specify test names and it will determine automatically where they are located.&lt;br /&gt;
#;class: --run-tests-by class classA classB classC: simply specify class names and it will determine automatically what tests they contain and  where they are located.&lt;br /&gt;
#;module: --run-tests-by module moduleA moduleB: simply specify module names and it will determine automatically what tests they contain. &lt;br /&gt;
#;id: --run-tests-by id id1 id2 id3: simply specify test ids and it will determine automatically what tests the ids point to.&lt;br /&gt;
#;tag: --run-tests-by tag tag1 tag2: if tests are tagged with @tag(feature=&amp;lt;&amp;gt;) you can run them like this also.&lt;br /&gt;
&lt;br /&gt;
For the previous running methods you can specify the –-machine option to tell oe-selftest to run tests with custom MACHINE:&lt;br /&gt;
*-–machine random: will run tests switching to a random MACHINE for each test.&lt;br /&gt;
*-–machine all: will run every test from the list against all available MACHINES.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running hidden tests ==&lt;br /&gt;
Hidden tests are located in test modules whose names begin with an underscore &#039;_&#039; . Example: &#039;_test_hidden_module.py&#039;. These tests can be run by specifying them as arguments like the above.&lt;br /&gt;
Example: &#039;oe-selftest _test_hidden_module.Class_1.test_1&#039;&lt;br /&gt;
&lt;br /&gt;
=Important file locations=&lt;br /&gt;
The following files and locations are relevant to oe-selftest:&lt;br /&gt;
* the script itself: oe-selftest&lt;br /&gt;
is located in the /scripts directory under the main OE-Core tree. &lt;br /&gt;
* the case.py module&lt;br /&gt;
is located in the meta/lib/oeqa/selftest directory and contains the base OESelftestTestCase class that extends unittest.TestCase (via OETestCase) and adds extra functionality.&lt;br /&gt;
* the test modules&lt;br /&gt;
are located in the meta/lib/oeqa/selftest/cases directory and contain either test classes with test methods or evolved versions of the oeSelfTest class with added specific functionality and being used by the aforementioned test classes.&lt;br /&gt;
* the &#039;utils&#039; library&lt;br /&gt;
is located at meta/lib/oeqa/utils and contains modules with helper methods that are used and imported by the test modules.&lt;br /&gt;
&lt;br /&gt;
=Basic architecture information=&lt;br /&gt;
&lt;br /&gt;
When designing oe-selftest we wanted to be less intrusive as possible. Doing so we have implemented the following conventions, using the extended oeSelfTest class:&lt;br /&gt;
== appending to the build&#039;s global configuration ==&lt;br /&gt;
In order to keep appending to existing global configuration files(local.conf, auto.conf, site.conf) to a minimum, when oe-selftest starts it adds &#039;include selftest.inc&#039; to local.conf and removes it at the end. The tests manipulate the global configuration by manipulating selftest.inc using the built-in methods write_config(), append_config(), remove_config().  Also the file selftest.inc is deleted before each test; this way all tests are independent from a global configuration point of view.&lt;br /&gt;
== adding test files(like test classes) to the build ==&lt;br /&gt;
In order not to modify the existing metadata structure, a new layer &#039;meta-selftest&#039; has been created for testing purposes. This layer can be used to store files used for testing and thus remove the need to modify the structure of the existing metadata or the need to create them at runtime.&lt;br /&gt;
== appending to a recipe ==&lt;br /&gt;
In order to avoid modifying existing recipes and related files (.inc, .bbappend) a select list of recipes has a corresponding &amp;lt;recipe_name&amp;gt;.bbappend in the meta-selftest layer that contains only 1 passable line: &amp;quot;include test_recipe.inc&amp;quot;. If a test needs to append configuration to a specific recipe, it only needs to manipulate the recipe&#039;s test_recipe.inc using the built-in methods write_recipeinc(), append_recipeinc(), remove_recipeinc() and delete_recipeinc(). Note that before each test starts all test_recipe.inc files are removed from the meta-selftest layer in order to keep all tests independent from a recipe-level configuration point of view.&lt;br /&gt;
&lt;br /&gt;
== Cleaning up ==&lt;br /&gt;
&lt;br /&gt;
We also wanted to make cleanup and post-test actions simple so we added the following helper methods, using the extended oeSelfTest class:&lt;br /&gt;
* add_command_to_tearDown(command)&lt;br /&gt;
Adds &amp;lt;command&amp;gt; as a shell command to be run after the test ends, no matter how the test exits (error or fail).&lt;br /&gt;
* track_for_cleanup(path)&lt;br /&gt;
Adds &amp;lt;path&amp;gt; to a list of paths to be cleaned up (deleted) after the test ends, no matter how the test exits (error or fail).&lt;br /&gt;
&lt;br /&gt;
Please be careful when using these methods as they have no safety checks.&lt;br /&gt;
&lt;br /&gt;
=You should be aware of the following=&lt;br /&gt;
* oe-selftest uses the settings in conf/local.conf as a base for all test configurations. Any modifications made (such as DISTRO) or not made here (e.g. BB_NUMBER_THREADS) will impact all tests if the modifications are not overwritten specifically by a test.&lt;br /&gt;
* running all tests can take a long time! If you&#039;re modifying a particular feature/script then you may want to run just the related test module(s) or case(s) to save time.&lt;br /&gt;
&lt;br /&gt;
=How to contribute=&lt;br /&gt;
You can send patches containing either improvements or tests to the openembedded-core mailing list: openembedded-core@lists.openembedded.org . Here is a [http://www.openembedded.org/wiki/How_to_submit_a_patch_to_OpenEmbedded guide on submitting changes].&lt;/div&gt;</summary>
		<author><name>Vyacheslav Yurkov</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Project_Users&amp;diff=85326</id>
		<title>Project Users</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Project_Users&amp;diff=85326"/>
		<updated>2022-06-26T17:58:28Z</updated>

		<summary type="html">&lt;p&gt;Vyacheslav Yurkov: /* Others */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It&#039;s hard to know which companies or projects use the Yocto Project since there is no requirement to tell us. This list is here to informally collate the companies, projects and products that use the Yocto Project in some way. This helps the project since it means we can show at least some cross section of which companies are using it and how/where. There is more information about this here: https://lists.yoctoproject.org/g/yocto/topic/82722441&lt;br /&gt;
&lt;br /&gt;
= Companies using the Yocto Project =&lt;br /&gt;
&lt;br /&gt;
== Semiconductor Vendors ==&lt;br /&gt;
* AMD (Silver Member)&lt;br /&gt;
* ARM (Platinum Member)&lt;br /&gt;
* Intel (Platinum Member)&lt;br /&gt;
* Microchip&lt;br /&gt;
* NXP (Silver Member)&lt;br /&gt;
* Qualcomm&lt;br /&gt;
* Renesas (Gold Member)&lt;br /&gt;
* STMicroelectronics (Silver Member)&lt;br /&gt;
* Texas Instruments (Gold Member)&lt;br /&gt;
* Xilinx (Platinum Member)&lt;br /&gt;
&lt;br /&gt;
== Operating System Vendors ==&lt;br /&gt;
* ENEA (Silver Member)&lt;br /&gt;
* Linaro (Silver Member)&lt;br /&gt;
* Lineo (Silver Member)&lt;br /&gt;
* Mentor Graphics (Gold Member)&lt;br /&gt;
* Montavista (Silver Member)&lt;br /&gt;
* Wind River (Gold Member)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
* [https://alladin.at/ alladin-IT GmbH]&lt;br /&gt;
* Atlas Copco&lt;br /&gt;
* AWS (Platinum Member)&lt;br /&gt;
* [https://www.axis.com/ Axis Communications]&lt;br /&gt;
* [https://www.balena.io/ Balena]&lt;br /&gt;
* BMW&lt;br /&gt;
* BMW Car IT&lt;br /&gt;
* [https://www.bruker.com/ Bruker BioSpin GmbH]&lt;br /&gt;
* [https://bootlin.com/ Bootlin]&lt;br /&gt;
* Cisco (Platinum Member)&lt;br /&gt;
* Comcast (Platinum Member)&lt;br /&gt;
* [https://www.cytera.bio/ Cytera] (via Belena)&lt;br /&gt;
* Dell (Silver Member)&lt;br /&gt;
* Dynamic Devices&lt;br /&gt;
* Facebook (Platinum Member)&lt;br /&gt;
* [https://formlabs.com/ Formlabs]&lt;br /&gt;
* Fujitsu&lt;br /&gt;
* [https://www.gardena.com/ GARDENA] (Husqvarna Group)&lt;br /&gt;
* [https://www.garmin.com/ Garmin]&lt;br /&gt;
* General Electric&lt;br /&gt;
* [https://genielifesciences.com/ Genie Life Sciences]&lt;br /&gt;
* Gigaset Communications GmbH &lt;br /&gt;
* Juniper&lt;br /&gt;
* [https://koansoftware.com/ KOAN sas]&lt;br /&gt;
* Kodak&lt;br /&gt;
* [https://lawo.com/ LAWO]&lt;br /&gt;
* Lexmark&lt;br /&gt;
* LG (Silver Member)&lt;br /&gt;
* Microsoft (Platinum Member)&lt;br /&gt;
* National Instruments&lt;br /&gt;
* [https://www.ovo.auto/ OVO Automotive]&lt;br /&gt;
* [https://www.pengutronix.de/ Pengutronix]&lt;br /&gt;
* reMarkable&lt;br /&gt;
* [https://www.smile.eu/en/offers/embedded-iot Smile ECS]&lt;br /&gt;
* StreamUnlimited Engineering GmbH&lt;br /&gt;
* [https://www.taitradio.com Tait Communications]&lt;br /&gt;
* [https://www.witekio.com/values-expertise/ Witekio]&lt;br /&gt;
* [https://www.veobot.com/ Veo Robotics]&lt;br /&gt;
&lt;br /&gt;
= Products that use the Yocto Project =&lt;br /&gt;
&lt;br /&gt;
* BMW cars&lt;br /&gt;
* Comcast set top boxes&lt;br /&gt;
* [https://www.gardena.com/int/products/smart/ GARDENA smart garden] (The smart garden gateway runs Yocto/OpenEmbedded. Open source parts can be found [https://github.com/husqvarnagroup/smart-garden-gateway-public on GitHub.])&lt;br /&gt;
* Some Garmin [https://www.garmin.com/marine/ Marine] Products&lt;br /&gt;
* Gigaset DSPG-SOCs based products (e.g N870, N870 Integrator, Marine 2/3/4)&lt;br /&gt;
* Go Pro (https://gopro.com/content/dam/help/open-source/2020-09-28%20-%20HERO9%20Black%20-GoPro%20Open%20Source%20Software%20Notice.pdf)&lt;br /&gt;
* LAWO [https://lawo.com/products/a__uhd-core/  A__UHD Core] [https://lawo.com/products/a__line/ A__ Line]&lt;br /&gt;
* Lexmark Printers&lt;br /&gt;
* LG webOS TVs&lt;br /&gt;
* Mellanox Bluefield SmartNIC&lt;br /&gt;
* Sky Glass (clear from sources tarball [http://oss.sky.com/SkyHD/SkyGlass/skyglass_spk.tar.bz2])&lt;br /&gt;
* [https://www.streamunlimited.com/hardware-modules/ StreamUnlimited hardware modules for voice assistants and connected speakers]&lt;br /&gt;
* Vernier LabQuest&lt;br /&gt;
&lt;br /&gt;
= Projects that use the Yocto Project =&lt;br /&gt;
&lt;br /&gt;
* [https://www.automotivelinux.org/ Automotive Grade Linux (AGL)]&lt;br /&gt;
* [https://www.balena.io/ Balena]&lt;br /&gt;
* Comcast RDK&lt;br /&gt;
* Nvidia vibrante SDK [https://docs.nvidia.com/drive/archive/4.1.8.0L/nvoss_docs/index.html]&lt;br /&gt;
* OpenBMC&lt;br /&gt;
* [https://oryx-linux.org/ Oryx Linux]&lt;br /&gt;
* [https://www.streamunlimited.com/stream-sdk/ StreamSDK for voice assistants and connected speakers]&lt;br /&gt;
* Windows Subsystem Linux (v1+v2)&lt;br /&gt;
* webOS&lt;/div&gt;</summary>
		<author><name>Vyacheslav Yurkov</name></author>
	</entry>
</feed>