def setUp(self): """Test fixtures.""" self.tmpdir = tempfile.mkdtemp() self.tmpconfig = tempfile.NamedTemporaryFile() self.kbuilder = kernelbuilder.KernelBuilder( self.tmpdir, self.tmpconfig.name, make_target='targz-pkg', ) self.m_popen = Mock() self.m_popen.returncode = 0 self.ctx_popen = mock.patch('subprocess.Popen', Mock(return_value=self.m_popen)) self.ctx_check_call = mock.patch('subprocess.check_call', Mock()) self.m_io_open = Mock() self.m_io_open.__enter__ = lambda *args: self.m_io_open self.m_io_open.__exit__ = lambda *args: None self.ctx_io_open = mock.patch('io.open', Mock(return_value=self.m_io_open)) self.m_multipipe = mock.patch( 'skt.kernelbuilder.KernelBuilder.run_multipipe', Mock(return_value=0) ) self.kernel_tarball = 'linux-4.16.0.tar.gz' self.success_str = 'Tarball successfully created in ./{}\n' self.success_str = self.success_str.format(self.kernel_tarball)
def test_build_tarball(self): """Test the building and handling of tarballs.""" kbuilder = kernelbuilder.KernelBuilder( self.tmpdir, self.tmpconfig.name, make_target='targz-pkg', ) # Test with a build log that contains no tarball lines at all. with open(kbuilder.buildlog, 'w') as fileh: fileh.write("This is a sample line without a tarball.") with self.m_multipipe, self.assertRaises(kernelbuilder.ParsingError): kbuilder.compile_kernel() # Add the tarball to the build log, but don't write a matching file # to the filesystem. with open(kbuilder.buildlog, 'w+') as fileh: fileh.write(self.success_str) with self.m_multipipe, self.assertRaises(IOError): kbuilder.compile_kernel() # Create a real matching tarball so this will complete with success. test_tarball = "{}/{}".format(kbuilder.source_dir, self.kernel_tarball) with open(test_tarball, 'w') as fileh: fileh.write("Kernel data") with self.m_multipipe: fpath = kbuilder.compile_kernel() self.assertEqual(test_tarball, fpath)
def test_extra_make_args(self): """Ensure KernelBuilder handles extra_make_args properly""" extra_make_args_example = '-j10' kbuilder = kernelbuilder.KernelBuilder( self.tmpdir, self.tmpconfig.name, extra_make_args=extra_make_args_example) self.assertEqual(kbuilder.extra_make_args, [extra_make_args_example])
def test_bad_make_target(self): """Test what happens when an unsupported make target is used.""" with self.m_multipipe, self.assertRaises(KeyError): kernelbuilder.KernelBuilder( self.tmpdir, self.tmpconfig.name, make_target='"this-is-not-a-make-target-silly"', )
def test_rpm_repo_failure(self): """Test exception when the RPM repo fails to create.""" kbuilder = kernelbuilder.KernelBuilder( self.tmpdir, self.tmpconfig.name, make_target='binrpm-pkg', ) with self.m_multipipe as m_multipipe: m_multipipe.return_value = 1 with self.assertRaises(subprocess.CalledProcessError): kbuilder.make_rpm_repo([])
def test_build_rpm(self): """Test the building and handling of RPMs.""" kbuilder = kernelbuilder.KernelBuilder( self.tmpdir, self.tmpconfig.name, make_target='binrpm-pkg', ) test_rpms = [ "{}/linux-4.20.rpm".format(self.tmpdir), "{}/linux-headers-4.20.rpm".format(self.tmpdir) ] # Test with a build log that contains no RPM lines at all. with open(kbuilder.buildlog, 'w') as fileh: fileh.write("This is a sample line without RPMs.") with self.m_multipipe, self.assertRaises(kernelbuilder.ParsingError): kbuilder.compile_kernel() # Add the RPMs to the build log, but don't write any matching files # to the filesystem. with open(kbuilder.buildlog, 'w+') as fileh: for test_rpm in test_rpms: fileh.write("Wrote: {}\n".format(test_rpm)) with self.m_multipipe, self.assertRaises(IOError): kbuilder.compile_kernel() # Create real files for our RPMs so this will complete with success. for test_rpm in test_rpms: with open(test_rpm, 'w') as fileh: fileh.write("Kernel data") # Ensure compile_kernel can handle an existing repo directory. os.mkdir("{}/rpm_repo".format(kbuilder.source_dir)) with self.m_multipipe: fpath = kbuilder.compile_kernel() self.assertEqual("{}/rpm_repo/".format(kbuilder.source_dir), fpath)