On Thu, 2019-08-22 at 18:28 +0800, [email protected] wrote: > From: Mazliana <[email protected]> > > Purpose of kernel development is basically to customize our > own recipes kernel by reused existing recipes. > > This is an initiative of automating manual kernel development > test cases. Applying a single patch to the Linux kernel source > is one of the manual test cases of kernel development. > > Objective of this test is as a developer we can make changes of > a file in kernel source and able to apply a single patch to > the kernel source. > > ref:https://wiki.yoctoproject.org/wiki/Kernel_Development_Test_Cases
Thanks for this patch, it looks reasonable but needs a few further small cleanups, comments below. > Signed-off-by: Mazliana <[email protected]> > --- > meta/lib/oeqa/selftest/cases/kerneldevelopment.py | 66 > +++++++++++++++++++++++ > 1 file changed, 66 insertions(+) > create mode 100644 meta/lib/oeqa/selftest/cases/kerneldevelopment.py > > diff --git a/meta/lib/oeqa/selftest/cases/kerneldevelopment.py > b/meta/lib/oeqa/selftest/cases/kerneldevelopment.py > new file mode 100644 > index 0000000..cde1ba2 > --- /dev/null > +++ b/meta/lib/oeqa/selftest/cases/kerneldevelopment.py > @@ -0,0 +1,66 @@ > +import os > +from oeqa.selftest.case import OESelftestTestCase > +from oeqa.utils.commands import bitbake, runCmd, get_bb_var > +from oeqa.utils.git import GitRepo, GitError > + > +class KernelDev(OESelftestTestCase): > + > + @classmethod > + def setUpClass(cls): > + super(KernelDev, cls).setUpClass() > + # Create the recipe directory structure inside the created layer > + cls.layername = 'meta-kerneltest' > + runCmd('bitbake-layers create-layer %s' % cls.layername) > + runCmd('mkdir -p %s/recipes-kernel/linux/linux-yocto' % > cls.layername) > + cls.recipes_linuxyocto_dir = os.path.join\ Please put a space before the \ > + (cls.builddir, cls.layername, 'recipes-kernel', 'linux', > 'linux-yocto') > + cls.recipeskernel_dir = os.path.dirname(cls.recipes_linuxyocto_dir) > + runCmd('bitbake-layers add-layer %s' % cls.layername) > + > + @classmethod > + def tearDownClass(cls): > + runCmd('bitbake-layers remove-layer %s' % cls.layername, > ignore_status=True) > + runCmd('rm -rf %s' % cls.layername) > + super(KernelDev, cls).tearDownClass() > + > + def setUp(self): > + super(KernelDev, self).setUp() > + self.set_machine_config('MACHINE = "%s"\n' % 'qemux86-64') Why not just self.set_machine_config('MACHINE = "qemux86-64"\n') ? > + > + def test_apply_patches(self): > + """ > + Summary: Able to apply a single patch to the Linux kernel source > + Expected: The README file should exist and the patch changes > should be > + displayed at the end of the file. > + Product: Kernel Development > + Author: Yeoh Ee Peng <[email protected]> > + AutomatedBy: Mazliana Mohamad <[email protected]> > + """ > + runCmd('bitbake virtual/kernel -c patch') > + kernel_source = get_bb_var('STAGING_KERNEL_DIR') > + readme = os.path.join(kernel_source, 'README') > + > + # This test step adds modified file 'README' to git and creates a > + # patch file '0001-KERNEL_DEV_TEST_CASE.patch' at the same location > as file > + patch_content = 'This is a test to apply a patch to the kernel' > + runCmd('echo %s >> %s' % (patch_content, readme)) How about: with open(readme, "a+") as f: f.write(patch_content) > + repo = GitRepo('%s' % kernel_source, is_topdir=True) > + repo.run_cmd('add %s' % readme) > + repo.run_cmd(['commit', '-m', 'KERNEL_DEV_TEST_CASE']) > + repo.run_cmd(['format-patch', '-1']) > + patch_name = '0001-KERNEL_DEV_TEST_CASE.patch' > + patchpath = os.path.join(kernel_source, patch_name) > + runCmd('mv %s %s' % (patchpath, self.recipes_linuxyocto_dir)) > + runCmd('rm %s ' % readme) > + self.assertFalse(os.path.exists(readme)) > + > + recipe_append = os.path.join(self.recipeskernel_dir, > 'linux-yocto_%.bbappend') > + with open(recipe_append, 'w+') as fh: > + fh.write('SRC_URI += "file://%s"\n' % patch_name) > + fh.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"') > + > + runCmd('bitbake virtual/kernel -c cleansstate') Tests *must* not use cleansstate. Please just use clean here. > + runCmd('bitbake virtual/kernel -c patch') > + self.assertTrue(os.path.exists(readme)) > + result = runCmd('tail -n 1 %s' % readme) > + self.assertEqual(result.output, patch_content) Cheers, Richard -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
