| |
@@ -3,12 +3,20 @@
|
| |
import mock
|
| |
import configparser
|
| |
from os.path import realpath, dirname
|
| |
- from ..copr_rpmbuild.builders.mock import MockBuilder
|
| |
+ from copr_rpmbuild.builders.mock import MockBuilder
|
| |
import subprocess
|
| |
import datetime
|
| |
+ import copy
|
| |
+ from io import StringIO
|
| |
|
| |
from unittest.mock import MagicMock
|
| |
|
| |
+ the_repo = {
|
| |
+ 'id': 'copr_base',
|
| |
+ 'name': 'Copr repository',
|
| |
+ 'url': 'http://example.com/'
|
| |
+ }
|
| |
+
|
| |
class TestMockBuilder(unittest.TestCase):
|
| |
def setUp(self):
|
| |
self.task = {
|
| |
@@ -16,8 +24,6 @@
|
| |
"_expected_outcome": "success",
|
| |
|
| |
"build_id": 10,
|
| |
- "buildroot_pkgs": ["pkg1", "pkg2", "pkg3"],
|
| |
- "chroot": "fedora-24-x86_64",
|
| |
"enable_net": True,
|
| |
"source_json": {
|
| |
"clone_url": "https://src.fedoraproject.org/git/rpms/389-admin-console.git",
|
| |
@@ -30,11 +36,20 @@
|
| |
"pkgs": "",
|
| |
"project_name": "copr-dev",
|
| |
"project_owner": "@copr",
|
| |
- "repos": [],
|
| |
"submitter": "clime",
|
| |
"task_id": "10-fedora-24-x86_64",
|
| |
"timeout": 21600,
|
| |
- "use_bootstrap_container": False,
|
| |
+
|
| |
+ "build_config": {
|
| |
+ "additional_packages": ['pkg1', 'pkg2', 'pkg3'],
|
| |
+ "chroot": "fedora-24-x86_64",
|
| |
+ "enable_net": False,
|
| |
+ "project_id": "praiskup-ping",
|
| |
+ "repos": [the_repo],
|
| |
+ "use_bootstrap_container": False,
|
| |
+ }
|
| |
+
|
| |
+
|
| |
}
|
| |
self.sourcedir = "/path/to/sourcedir"
|
| |
self.resultdir = "/path/to/resultdir"
|
| |
@@ -45,34 +60,51 @@
|
| |
def test_init(self):
|
| |
builder = MockBuilder(self.task, self.sourcedir, self.resultdir, self.config)
|
| |
self.assertEqual(builder.task_id, "10-fedora-24-x86_64")
|
| |
- self.assertEqual(builder.chroot, "fedora-24-x86_64")
|
| |
- self.assertEqual(builder.buildroot_pkgs, ["pkg1", "pkg2", "pkg3"])
|
| |
- self.assertEqual(builder.enable_net, True)
|
| |
- self.assertEqual(builder.repos, [])
|
| |
- self.assertEqual(builder.use_bootstrap_container, False)
|
| |
+ self.assertEqual(builder.build_config['chroot'], "fedora-24-x86_64")
|
| |
+ self.assertEqual(builder.build_config['additional_packages'], ["pkg1", "pkg2", "pkg3"])
|
| |
+ self.assertEqual(builder.build_config['enable_net'], True)
|
| |
+ self.assertEqual(builder.build_config['repos'], [the_repo])
|
| |
+ self.assertEqual(builder.build_config['use_bootstrap_container'], False)
|
| |
|
| |
- def test_render_config_template(self):
|
| |
- confdirs = [dirname(dirname(realpath(__file__)))]
|
| |
- builder = MockBuilder(self.task, self.sourcedir, self.resultdir, self.config)
|
| |
- cfg = builder.render_config_template()
|
| |
|
| |
+ def parse_mock_conf(self, cfg):
|
| |
# Parse the rendered config
|
| |
# This is how mock itself does it
|
| |
def include(*args, **kwargs):
|
| |
pass
|
| |
- config_opts = {"yum.conf": []}
|
| |
+
|
| |
+ config_opts = {
|
| |
+ 'yum.conf': '',
|
| |
+ 'dnf.conf': '',
|
| |
+ }
|
| |
cfg = re.sub(r'include\((.*)\)', r'include(\g<1>, config_opts, True)', cfg)
|
| |
code = compile(cfg, "/tmp/foobar", 'exec')
|
| |
exec(code)
|
| |
+ return config_opts
|
| |
+
|
| |
+
|
| |
+ def assert_repo_content(self, config):
|
| |
+ buf = StringIO(config)
|
| |
+ config = configparser.ConfigParser()
|
| |
+ config.readfp(buf)
|
| |
+ self.assertEqual(config.get(the_repo['id'], 'baseurl'), the_repo['url'])
|
| |
+ self.assertEqual(config.get(the_repo['id'], 'name'), the_repo['name'])
|
| |
|
| |
+
|
| |
+ def test_render_config_template(self):
|
| |
+ confdirs = [dirname(dirname(realpath(__file__)))]
|
| |
+ builder = MockBuilder(self.task, self.sourcedir, self.resultdir, self.config)
|
| |
+ cfg = builder.render_config_template()
|
| |
+ config_opts = self.parse_mock_conf(cfg)
|
| |
self.assertEqual(config_opts["root"], "10-fedora-24-x86_64")
|
| |
self.assertEqual(config_opts["chroot_additional_packages"], "pkg1 pkg2 pkg3")
|
| |
self.assertEqual(config_opts["rpmbuild_networking"], True)
|
| |
self.assertEqual(config_opts["use_bootstrap_container"], False)
|
| |
- self.assertEqual(config_opts["yum.conf"], [])
|
| |
+ self.assert_repo_content(config_opts['yum.conf'])
|
| |
+
|
| |
|
| |
- @mock.patch("rpmbuild.copr_rpmbuild.builders.mock.get_mock_uniqueext")
|
| |
- @mock.patch("rpmbuild.copr_rpmbuild.builders.mock.subprocess.Popen")
|
| |
+ @mock.patch("copr_rpmbuild.builders.mock.get_mock_uniqueext")
|
| |
+ @mock.patch("copr_rpmbuild.builders.mock.subprocess.Popen")
|
| |
def test_produce_rpm(self, popen_mock, get_mock_uniqueext_mock):
|
| |
builder = MockBuilder(self.task, self.sourcedir, self.resultdir, self.config)
|
| |
get_mock_uniqueext_mock.return_value = '2'
|
| |
@@ -95,6 +127,12 @@
|
| |
|
| |
def test_custom1_chroot_settings(self):
|
| |
b1 = MockBuilder(self.task, self.sourcedir, self.resultdir, self.config)
|
| |
- b2 = MockBuilder(dict(self.task, **{"chroot": "custom-1-x86_64"}), self.sourcedir, self.resultdir, self.config)
|
| |
- self.assertEqual(b1.pkg_manager_conf, "yum")
|
| |
- self.assertEqual(b2.pkg_manager_conf, "dnf")
|
| |
+ task2 = copy.deepcopy(dict(self.task))
|
| |
+ task2['build_config']['chroot'] = 'custom-1-x86_64'
|
| |
+ b2 = MockBuilder(task2, self.sourcedir, self.resultdir, self.config)
|
| |
+ cfg1 = b1.render_config_template()
|
| |
+ cfg2 = b2.render_config_template()
|
| |
+ cfg1 = self.parse_mock_conf(cfg1)
|
| |
+ cfg2 = self.parse_mock_conf(cfg2)
|
| |
+ self.assert_repo_content(cfg1['yum.conf'])
|
| |
+ self.assert_repo_content(cfg2['dnf.conf'])
|
| |
From now on,
copr-cli mock-config
andcopr-rpmbuild
use thesame mock configuration file (both use the same methods for
generating the mock configuration).
This is done with believe that mock configuration should be
"cache"-able thing -- so that it can be generated on client side
once per copr project, and then re-used to build sets of packages
without re-generating/changing the config file all over again.
There's one hack with 'enable_net' which breaks this concept,
though.