Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
 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])
Exemple #4
0
 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"',
         )
Exemple #5
0
    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([])
Exemple #6
0
    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)