From 9af9882a79c10717bee88f5901f5615d90a49bd3 Mon Sep 17 00:00:00 2001 From: clime Date: Jul 06 2018 09:42:14 +0000 Subject: [PATCH 1/2] for py3 use unittest.mock, otherwise mock from python2-mock, enable copr-rpmbuild tests during build --- diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec index acbb0e1..ce9ea1a 100644 --- a/backend/copr-backend.spec +++ b/backend/copr-backend.spec @@ -30,7 +30,6 @@ BuildRequires: python3-requests BuildRequires: python3-pytest BuildRequires: python3-pytest-cov -BuildRequires: python3-mock BuildRequires: python3-munch BuildRequires: python3-lockfile BuildRequires: python3-daemon diff --git a/backend/tests/daemons/test_backend.py b/backend/tests/daemons/test_backend.py index 48e08b3..b935896 100644 --- a/backend/tests/daemons/test_backend.py +++ b/backend/tests/daemons/test_backend.py @@ -13,8 +13,8 @@ import sys from backend.daemons.backend import CoprBackend, run_backend from backend.exceptions import CoprBackendError -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock STDOUT = "stdout" STDERR = "stderr" diff --git a/backend/tests/daemons/test_dispatcher.py b/backend/tests/daemons/test_dispatcher.py index e910736..49b1464 100644 --- a/backend/tests/daemons/test_dispatcher.py +++ b/backend/tests/daemons/test_dispatcher.py @@ -16,8 +16,8 @@ from backend.exceptions import CoprWorkerError, CoprSpawnFailError, MockRemoteEr from backend.job import BuildJob from backend.vm_manage.models import VmDescriptor -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock from backend.daemons.dispatcher import Worker diff --git a/backend/tests/daemons/test_job_grab.py b/backend/tests/daemons/test_job_grab.py index f863441..cd01b64 100644 --- a/backend/tests/daemons/test_job_grab.py +++ b/backend/tests/daemons/test_job_grab.py @@ -16,8 +16,8 @@ import tempfile import shutil import os -import mock -from mock import patch, MagicMock, call +from unittest import mock +from unittest.mock import patch, MagicMock, call import pytest from backend.daemons.job_grab import CoprJobGrab diff --git a/backend/tests/daemons/test_log.py b/backend/tests/daemons/test_log.py index 4cc0006..28ee9cd 100644 --- a/backend/tests/daemons/test_log.py +++ b/backend/tests/daemons/test_log.py @@ -7,11 +7,11 @@ import time import tempfile import shutil import os - -import mock -from mock import patch, MagicMock import pytest +from unittest import mock +from unittest.mock import patch, MagicMock + import backend.daemons.log as log_module from backend.daemons.log import RedisLogHandler diff --git a/backend/tests/daemons/test_vm_master.py b/backend/tests/daemons/test_vm_master.py index 08c2f52..aad8703 100644 --- a/backend/tests/daemons/test_vm_master.py +++ b/backend/tests/daemons/test_vm_master.py @@ -22,8 +22,8 @@ from backend.daemons.vm_master import VmMaster from backend.constants import JOB_GRAB_TASK_END_PUBSUB from backend.exceptions import VmError, VmSpawnLimitReached -import mock -from mock import patch, MagicMock +from unittest import mock +from unittest.mock import patch, MagicMock import pytest diff --git a/backend/tests/mockremote/test_builder.py b/backend/tests/mockremote/test_builder.py index 55aa268..96a8487 100644 --- a/backend/tests/mockremote/test_builder.py +++ b/backend/tests/mockremote/test_builder.py @@ -13,8 +13,8 @@ import os from backend.job import BuildJob -import mock -from mock import patch, MagicMock +from unittest import mock +from unittest.mock import patch, MagicMock import pytest from types import MethodType diff --git a/backend/tests/mockremote/test_mockremote.py b/backend/tests/mockremote/test_mockremote.py index 52b1f7f..400ed19 100644 --- a/backend/tests/mockremote/test_mockremote.py +++ b/backend/tests/mockremote/test_mockremote.py @@ -9,8 +9,8 @@ import tempfile import shutil import os -import mock -from mock import patch, MagicMock +from unittest import mock +from unittest.mock import patch, MagicMock import pytest from backend.mockremote import MockRemote diff --git a/backend/tests/run/test_copr_prune_results.py b/backend/tests/run/test_copr_prune_results.py index 4983b83..8bfa423 100644 --- a/backend/tests/run/test_copr_prune_results.py +++ b/backend/tests/run/test_copr_prune_results.py @@ -7,8 +7,8 @@ import tempfile from munch import Munch import pytest -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock from copr_prune_results import Pruner from copr_prune_results import main as prune_main diff --git a/backend/tests/test_action.py b/backend/tests/test_action.py index 02383e2..687aae5 100644 --- a/backend/tests/test_action.py +++ b/backend/tests/test_action.py @@ -8,8 +8,8 @@ from munch import Munch import pytest -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock from backend.actions import Action, ActionType, ActionResult from backend.exceptions import CreateRepoError, CoprKeygenRequestError diff --git a/backend/tests/test_createrepo.py b/backend/tests/test_createrepo.py index 54a9879..359e641 100644 --- a/backend/tests/test_createrepo.py +++ b/backend/tests/test_createrepo.py @@ -6,8 +6,8 @@ import shutil import time import pytest -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock from backend.createrepo import createrepo, createrepo_unsafe, add_appdata, run_cmd_unsafe from backend.exceptions import CreateRepoError diff --git a/backend/tests/test_frontend.py b/backend/tests/test_frontend.py index a3d9947..37885de 100644 --- a/backend/tests/test_frontend.py +++ b/backend/tests/test_frontend.py @@ -7,8 +7,8 @@ from requests import RequestException from backend.frontend import FrontendClient -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock import pytest @pytest.yield_fixture diff --git a/backend/tests/test_sign.py b/backend/tests/test_sign.py index cae3734..985aef5 100644 --- a/backend/tests/test_sign.py +++ b/backend/tests/test_sign.py @@ -8,8 +8,8 @@ import pytest from backend.exceptions import CoprSignError, CoprSignNoKeyError, CoprKeygenRequestError -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock from backend.sign import get_pubkey, _sign_one, sign_rpms_in_dir, create_user_keys diff --git a/backend/tests/vm_manager/test_check.py b/backend/tests/vm_manager/test_check.py index 76b3b57..8039bb2 100644 --- a/backend/tests/vm_manager/test_check.py +++ b/backend/tests/vm_manager/test_check.py @@ -15,8 +15,8 @@ from backend.helpers import get_redis_connection from backend.vm_manage import EventTopics, PUBSUB_MB from backend.vm_manage.check import HealthChecker, check_health -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock import pytest diff --git a/backend/tests/vm_manager/test_event_handle.py b/backend/tests/vm_manager/test_event_handle.py index af3e169..41344cc 100644 --- a/backend/tests/vm_manager/test_event_handle.py +++ b/backend/tests/vm_manager/test_event_handle.py @@ -15,8 +15,8 @@ from backend.vm_manage import VmStates from backend.vm_manage.event_handle import EventHandler, Recycle from backend.vm_manage.models import VmDescriptor -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock import pytest diff --git a/backend/tests/vm_manager/test_executor.py b/backend/tests/vm_manager/test_executor.py index fa472ab..ede58ca 100644 --- a/backend/tests/vm_manager/test_executor.py +++ b/backend/tests/vm_manager/test_executor.py @@ -9,7 +9,7 @@ import time from backend.helpers import get_redis_connection from backend.vm_manage.executor import Executor -import mock +from unittest import mock import pytest diff --git a/backend/tests/vm_manager/test_manager.py b/backend/tests/vm_manager/test_manager.py index ae8f24c..a5213a5 100644 --- a/backend/tests/vm_manager/test_manager.py +++ b/backend/tests/vm_manager/test_manager.py @@ -15,8 +15,8 @@ from backend.vm_manage.manager import VmManager from backend.daemons.vm_master import VmMaster from backend.helpers import get_redis_connection -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock import pytest diff --git a/backend/tests/vm_manager/test_spawn.py b/backend/tests/vm_manager/test_spawn.py index b644a1f..36b9bae 100644 --- a/backend/tests/vm_manager/test_spawn.py +++ b/backend/tests/vm_manager/test_spawn.py @@ -12,8 +12,8 @@ from backend.exceptions import CoprSpawnFailError from backend.helpers import get_redis_connection from backend.vm_manage.spawn import Spawner, spawn_instance, do_spawn_and_publish -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock import pytest diff --git a/backend/tests/vm_manager/test_terminate.py b/backend/tests/vm_manager/test_terminate.py index 3b2921d..6807007 100644 --- a/backend/tests/vm_manager/test_terminate.py +++ b/backend/tests/vm_manager/test_terminate.py @@ -14,8 +14,8 @@ from backend.helpers import get_redis_connection from backend.vm_manage import EventTopics from backend.vm_manage.terminate import Terminator, terminate_vm -import mock -from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock import pytest diff --git a/dist-git/copr-dist-git.spec b/dist-git/copr-dist-git.spec index 6484861..2f42f03 100644 --- a/dist-git/copr-dist-git.spec +++ b/dist-git/copr-dist-git.spec @@ -18,7 +18,6 @@ BuildRequires: systemd BuildRequires: python3-munch BuildRequires: python3-requests BuildRequires: python3-rpkg -BuildRequires: python3-mock BuildRequires: python3-pytest BuildRequires: python3-pytest-cov diff --git a/dist-git/tests/test_crazy_merging.py b/dist-git/tests/test_crazy_merging.py index b033a70..d961140 100644 --- a/dist-git/tests/test_crazy_merging.py +++ b/dist-git/tests/test_crazy_merging.py @@ -5,9 +5,10 @@ import pytest import shutil import time import os -import mock import logging +from unittest import mock + from munch import Munch from subprocess import check_output diff --git a/dist-git/tests/test_importer.py b/dist-git/tests/test_importer.py index 3bbf6f9..5c2526d 100644 --- a/dist-git/tests/test_importer.py +++ b/dist-git/tests/test_importer.py @@ -6,9 +6,7 @@ import os import copy import pytest -from mock import call from munch import Munch - from base import Base from unittest import mock @@ -120,10 +118,10 @@ class TestImporter(Base): assert mc_import_package.call_args[0][3] == 'somepath.src.rpm' print(self.importer.post_back_safe.has_calls([ - call({'build_id': 125, 'pkg_name': 'foo', 'branch': self.BRANCH, - 'pkg_version': '1.2', 'git_hash': '123', 'repo_name': 'foo'}), - call({'build_id': 125, 'pkg_name': 'foo', 'branch': self.BRANCH2, - 'pkg_version': '1.2', 'git_hash': '124', 'repo_name': 'foo'}) + mock.call({'build_id': 125, 'pkg_name': 'foo', 'branch': self.BRANCH, + 'pkg_version': '1.2', 'git_hash': '123', 'repo_name': 'foo'}), + mock.call({'build_id': 125, 'pkg_name': 'foo', 'branch': self.BRANCH2, + 'pkg_version': '1.2', 'git_hash': '124', 'repo_name': 'foo'}) ])) def test_run(self, mc_time, mc_worker): diff --git a/dist-git/tests/test_package_import.py b/dist-git/tests/test_package_import.py index 9daae81..15b0f4e 100644 --- a/dist-git/tests/test_package_import.py +++ b/dist-git/tests/test_package_import.py @@ -4,7 +4,6 @@ import os import pytest from pyrpkg import rpkgError -from mock import call from munch import Munch from base import Base @@ -123,13 +122,13 @@ class TestPackageImport(Base): branches = ['f25', 'f26'] setup_git_repo(reponame, branches) assert mc_subprocess_check_output.has_calls([ - call(['/usr/share/dist-git/setup_git_package', 'foo']), - call(['/usr/share/dist-git/mkbranch', 'f25', 'foo']), - call(['/usr/share/dist-git/mkbranch', 'f26', 'foo']), + mock.call(['/usr/share/dist-git/setup_git_package', 'foo']), + mock.call(['/usr/share/dist-git/mkbranch', 'f25', 'foo']), + mock.call(['/usr/share/dist-git/mkbranch', 'f26', 'foo']), ]) def refresh_cgit_listing(self, mc_subprocess_check_output): refresh_cgit_listing(self.opts) assert mc_subprocess_check_output.has_calls([ - call(["/usr/share/copr/dist_git/bin/cgit_pkg_list", self.opts.cgit_pkg_list_location]) + mock.call(["/usr/share/copr/dist_git/bin/cgit_pkg_list", self.opts.cgit_pkg_list_location]) ]) diff --git a/frontend/copr-frontend.spec b/frontend/copr-frontend.spec index 5045831..8e5ad81 100644 --- a/frontend/copr-frontend.spec +++ b/frontend/copr-frontend.spec @@ -80,7 +80,6 @@ BuildRequires: python3-netaddr BuildRequires: python3-redis BuildRequires: python3-dateutil BuildRequires: python3-pytest -BuildRequires: python3-mock BuildRequires: python3-decorator BuildRequires: python3-markdown BuildRequires: python3-pytz diff --git a/frontend/coprs_frontend/coprs/rest_api/exceptions.py b/frontend/coprs_frontend/coprs/rest_api/exceptions.py index 4dba5b5..fadde39 100644 --- a/frontend/coprs_frontend/coprs/rest_api/exceptions.py +++ b/frontend/coprs_frontend/coprs/rest_api/exceptions.py @@ -1,6 +1,4 @@ # coding: utf-8 -import six - class ApiError(Exception): def __init__(self, code, msg, data=None, **kwargs): @@ -15,10 +13,6 @@ class ApiError(Exception): def __str__(self): return str(self.data) - if six.PY2: - def __unicode__(self): - return unicode(self.data) - class AuthFailed(ApiError): def __init__(self, msg=None, data=None, **kwargs): diff --git a/frontend/coprs_frontend/tests/coprs_test_case.py b/frontend/coprs_frontend/tests/coprs_test_case.py index 2389296..94d261a 100644 --- a/frontend/coprs_frontend/tests/coprs_test_case.py +++ b/frontend/coprs_frontend/tests/coprs_test_case.py @@ -18,15 +18,10 @@ from coprs import helpers from coprs import models from coprs.logic.coprs_logic import BranchesLogic -import six from coprs.helpers import StatusEnum -if six.PY3: - from unittest import mock - from unittest.mock import MagicMock -else: - import mock - from mock import MagicMock +from unittest import mock +from unittest.mock import MagicMock class CoprsTestCase(object): diff --git a/frontend/coprs_frontend/tests/test_helpers.py b/frontend/coprs_frontend/tests/test_helpers.py index bd7bc5e..7727f9d 100644 --- a/frontend/coprs_frontend/tests/test_helpers.py +++ b/frontend/coprs_frontend/tests/test_helpers.py @@ -1,11 +1,6 @@ from copy import deepcopy +from unittest import mock from flask import Flask, current_app -import six - -if six.PY3: - from unittest import mock -else: - import mock from coprs import app from coprs.helpers import parse_package_name, generate_repo_url, \ diff --git a/frontend/coprs_frontend/tests/test_logic/test_complex_logic.py b/frontend/coprs_frontend/tests/test_logic/test_complex_logic.py index b64c019..d73f7cd 100644 --- a/frontend/coprs_frontend/tests/test_logic/test_complex_logic.py +++ b/frontend/coprs_frontend/tests/test_logic/test_complex_logic.py @@ -1,5 +1,5 @@ import json -import mock +from unittest import mock from coprs.helpers import ActionTypeEnum from coprs.logic.actions_logic import ActionsLogic diff --git a/frontend/coprs_frontend/tests/test_logic/test_modules_logic.py b/frontend/coprs_frontend/tests/test_logic/test_modules_logic.py index 14dbf12..4c4978d 100644 --- a/frontend/coprs_frontend/tests/test_logic/test_modules_logic.py +++ b/frontend/coprs_frontend/tests/test_logic/test_modules_logic.py @@ -1,6 +1,7 @@ import yaml from munch import Munch -from mock import patch, ANY +from unittest import mock + from tests.coprs_test_case import CoprsTestCase from coprs.logic.modules_logic import ModuleBuildFacade, ModulemdGenerator, MBSResponse, MBSProxy from modulemd.components.rpm import ModuleComponentRPM @@ -84,7 +85,7 @@ class TestModulemdGenerator(CoprsTestCase): assert component.name == self.b1.package_name assert component.rationale == "A reason why package is in the module" - with patch("coprs.app.config", self.config): + with mock.patch("coprs.app.config", self.config): assert component.repository.startswith("http://distgiturl.org") assert component.repository.endswith(".git") assert chroot.dist_git_url.startswith(component.repository) @@ -96,9 +97,9 @@ class TestModulemdGenerator(CoprsTestCase): builds = [self.b1.id, self.b3.id] generator = ModulemdGenerator(config=self.config) - with patch("coprs.logic.modules_logic.ModulemdGenerator.add_component") as add_component: + with mock.patch("coprs.logic.modules_logic.ModulemdGenerator.add_component") as add_component: generator.add_components(packages, filter_packages, builds) - add_component.assert_called_with(self.p2.name, self.b3, self.b3.build_chroots[-1], ANY, 1) + add_component.assert_called_with(self.p2.name, self.b3, self.b3.build_chroots[-1], mock.ANY, 1) assert add_component.call_count == 2 def test_components_different_chroots(self, f_users, f_coprs, f_mock_chroots, f_builds, f_db): @@ -146,7 +147,7 @@ class TestMBSResponse(CoprsTestCase): class TestMBSProxy(CoprsTestCase): - @patch("requests.post") + @mock.patch("requests.post") def test_post(self, post_mock): url = "http://some-module-build-service.org" proxy = MBSProxy(url) diff --git a/frontend/coprs_frontend/tests/test_models.py b/frontend/coprs_frontend/tests/test_models.py index f14448c..32db961 100644 --- a/frontend/coprs_frontend/tests/test_models.py +++ b/frontend/coprs_frontend/tests/test_models.py @@ -1,10 +1,5 @@ from copy import deepcopy -import six - -if six.PY3: - from unittest import mock -else: - import mock +from unittest import mock from tests.coprs_test_case import CoprsTestCase diff --git a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py index dcc6e40..e9d5c8f 100644 --- a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py +++ b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py @@ -2,8 +2,7 @@ import json import flask import pytest -import mock - +from unittest import mock from coprs import models from coprs.helpers import ActionTypeEnum diff --git a/keygen/copr-keygen.spec b/keygen/copr-keygen.spec index 9a82b69..ff8c6ec 100644 --- a/keygen/copr-keygen.spec +++ b/keygen/copr-keygen.spec @@ -1,7 +1,6 @@ %global with_test 1 %if 0%{?rhel} < 7 && 0%{?rhel} > 0 %global _pkgdocdir %{_docdir}/%{name}-%{version} -%global __python2 %{__python} %endif Name: {{{ git_dir_name }}} @@ -30,7 +29,6 @@ BuildRequires: python3-flask # for tests BuildRequires: python3-pytest BuildRequires: python3-pytest-cov -BuildRequires: python3-mock Requires: haveged Requires: gnupg2 @@ -47,7 +45,6 @@ Requires: python3-flask # tests Requires: python3-pytest Requires: python3-pytest-cov -Requires: python3-mock # scriptlets Requires(post): initscripts @@ -68,7 +65,6 @@ Obsoletes: copr-doc < 1.38 BuildRequires: python3-devel BuildRequires: python3-setuptools -BuildRequires: python3-mock BuildRequires: python3-requests BuildRequires: python3-six BuildRequires: python3-flask diff --git a/python/copr/test/test_client.py b/python/copr/test/test_client.py index 4338e32..ea3d2e8 100644 --- a/python/copr/test/test_client.py +++ b/python/copr/test/test_client.py @@ -1,10 +1,15 @@ import os -import mock from requests.models import Response from copr import CoprClient +try: + from unittest import mock +except ImportError: + # Python 2 version depends on mock + import mock + path = os.path.abspath(__file__) dir_path = os.path.dirname(path) resource_location = os.path.join(dir_path, "resources") diff --git a/python/python-copr.spec b/python/python-copr.spec index d89bb85..1c3a375 100644 --- a/python/python-copr.spec +++ b/python/python-copr.spec @@ -102,7 +102,6 @@ Summary: Python interface for Copr BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pytest -BuildRequires: python3-mock BuildRequires: python3-requests BuildRequires: python3-requests-toolbelt BuildRequires: python3-marshmallow diff --git a/rpmbuild/copr-rpmbuild.spec b/rpmbuild/copr-rpmbuild.spec index 1565857..95be90c 100644 --- a/rpmbuild/copr-rpmbuild.spec +++ b/rpmbuild/copr-rpmbuild.spec @@ -18,6 +18,7 @@ Summary: Run COPR build tasks Release: 1%{?dist} URL: https://pagure.io/copr/copr License: GPLv2+ +BuildArch: noarch # Source is created by: # git clone https://pagure.io/copr/copr.git @@ -26,16 +27,26 @@ License: GPLv2+ # rpkg spec --sources Source0: {{{ git_dir_pack }}} -BuildArch: noarch BuildRequires: %python-devel BuildRequires: %rpm_python BuildRequires: asciidoc BuildRequires: %python-setuptools +BuildRequires: %python-pytest +BuildRequires: %python_pfx-munch +BuildRequires: %python-requests +BuildRequires: %python_pfx-jinja2 +BuildRequires: %python-configparser + +%if %{?python} == "python2" +BuildRequires: python2-mock +%endif + Requires: %python Requires: %python_pfx-jinja2 Requires: %python_pfx-munch Requires: %python-configparser Requires: %python-simplejson +Requires: %python-requests Requires: mock Requires: git @@ -54,6 +65,9 @@ build build-id 12345 for chroot epel-7-x86_64. %prep %setup -q +%check +PYTHON=%{python} ./run_tests.sh + %build name="%{name}" version="%{version}" summary="%{summary}" %python_build a2x -d manpage -f manpage man/copr-rpmbuild.1.asciidoc diff --git a/rpmbuild/copr_rpmbuild/builders/mock.py b/rpmbuild/copr_rpmbuild/builders/mock.py index aaee058..231c210 100644 --- a/rpmbuild/copr_rpmbuild/builders/mock.py +++ b/rpmbuild/copr_rpmbuild/builders/mock.py @@ -45,8 +45,8 @@ class MockBuilder(object): self.use_bootstrap_container = task.get("use_bootstrap_container") self.pkg_manager_conf = "dnf" if "custom-1" in task.get("chroot") else "yum" self.timeout = task.get("timeout", 3600) - self.with_opts = task.get("with_opts") - self.without_opts = task.get("without_opts") + self.with_opts = task.get("with_opts", []) + self.without_opts = task.get("without_opts", []) self.sourcedir = sourcedir self.resultdir = resultdir self.config = config diff --git a/rpmbuild/run_tests.sh b/rpmbuild/run_tests.sh index e36c713..3f79264 100755 --- a/rpmbuild/run_tests.sh +++ b/rpmbuild/run_tests.sh @@ -1,2 +1,5 @@ #!/bin/sh -python3 -m pytest tests -s $@ + +path="${1:-tests}" + +PYTHONPATH=.:$PYTHONPATH ${PYTHON:-python3} -m pytest -s $path diff --git a/rpmbuild/tests/__init__.py b/rpmbuild/tests/__init__.py index f3009ba..0eda85d 100644 --- a/rpmbuild/tests/__init__.py +++ b/rpmbuild/tests/__init__.py @@ -2,7 +2,7 @@ import os import tempfile import unittest -from ..copr_rpmbuild import helpers +from copr_rpmbuild import helpers CONFIG = """ [main] @@ -35,7 +35,7 @@ class TestCase(unittest.TestCase): def read_config_data(self, config_data): fd, config_path = tempfile.mkstemp() - f = open(fd, 'w') + f = open(config_path, 'w') f.write(config_data) f.close() return config_path, helpers.read_config(config_path) diff --git a/rpmbuild/tests/test_base.py b/rpmbuild/tests/test_base.py index d557c4c..19aa446 100644 --- a/rpmbuild/tests/test_base.py +++ b/rpmbuild/tests/test_base.py @@ -1,10 +1,13 @@ -import mock -from mock import MagicMock -from mock import call - -from ..copr_rpmbuild.providers.base import Provider +from copr_rpmbuild.providers.base import Provider from . import TestCase +try: + from unittest import mock + builtins = 'builtins' +except ImportError: + # Python 2 version depends on mock + import mock + builtins = '__builtin__' class TestProvider(TestCase): def setUp(self): @@ -12,16 +15,15 @@ class TestProvider(TestCase): self.source_json = {} self.resultdir = "/path/to/resultdir" - @mock.patch('builtins.open', new_callable=mock.mock_open()) + @mock.patch('{}.open'.format(builtins), new_callable=mock.mock_open()) def test_create_rpmmacros(self, mock_open): provider = Provider(self.source_json, self.resultdir, self.config) - rpmmacros = MagicMock() + rpmmacros = mock.MagicMock() mock_open.return_value = rpmmacros provider.create_rpmmacros() mock_open.assert_called_with("{}/.rpmmacros".format(provider.workdir), "w") calls = [ - call.__enter__().write('%_disable_source_fetch 0\n'), - call.__enter__().write('%__urlhelper_localopts --proto -all,+https,+ftps\n'), + mock.call.__enter__().write('%_disable_source_fetch 0\n'), + mock.call.__enter__().write('%__urlhelper_localopts --proto -all,+https,+ftps\n'), ] rpmmacros.assert_has_calls(calls, any_order=True) - diff --git a/rpmbuild/tests/test_helpers.py b/rpmbuild/tests/test_helpers.py index 9149212..5c0e3d2 100644 --- a/rpmbuild/tests/test_helpers.py +++ b/rpmbuild/tests/test_helpers.py @@ -1,8 +1,9 @@ import unittest import tempfile +import shutil import os -from ..copr_rpmbuild.helpers import string2list, locate_srpm +from copr_rpmbuild.helpers import string2list, locate_srpm class TestHelpers(unittest.TestCase): def test_string2list(self): @@ -13,7 +14,8 @@ class TestHelpers(unittest.TestCase): self.assertEqual(string2list(',,foo\tbar\tbaz'), ['foo', 'bar', 'baz']) def test_locate_srpm(self): - with tempfile.TemporaryDirectory() as tmpdir: - srpm_path = os.path.join(tmpdir, "dummy.src.rpm") - open(srpm_path, "w").close() - self.assertEqual(srpm_path, locate_srpm(tmpdir)) + tmpdir = tempfile.mkdtemp() + srpm_path = os.path.join(tmpdir, "dummy.src.rpm") + open(srpm_path, "w").close() + self.assertEqual(srpm_path, locate_srpm(tmpdir)) + shutil.rmtree(tmpdir) diff --git a/rpmbuild/tests/test_mock.py b/rpmbuild/tests/test_mock.py index 005e46a..6daae4f 100644 --- a/rpmbuild/tests/test_mock.py +++ b/rpmbuild/tests/test_mock.py @@ -1,13 +1,19 @@ import re import unittest -import mock import configparser -from os.path import realpath, dirname -from ..copr_rpmbuild.builders.mock import MockBuilder import subprocess import datetime +from os.path import realpath, dirname + +from copr_rpmbuild.builders.mock import MockBuilder -from unittest.mock import MagicMock +try: + from unittest import mock + builtins = 'builtins' +except ImportError: + # Python 2 version depends on mock + import mock + builtins = '__builtin__' class TestMockBuilder(unittest.TestCase): def setUp(self): @@ -35,6 +41,8 @@ class TestMockBuilder(unittest.TestCase): "task_id": "10-fedora-24-x86_64", "timeout": 21600, "use_bootstrap_container": False, + "with_opts": [], + "without_opts": [], } self.sourcedir = "/path/to/sourcedir" self.resultdir = "/path/to/resultdir" @@ -71,12 +79,12 @@ class TestMockBuilder(unittest.TestCase): self.assertEqual(config_opts["use_bootstrap_container"], False) self.assertEqual(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.GentlyTimeoutedPopen") 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' - process = MagicMock(returncode=0) + process = mock.MagicMock(returncode=0) popen_mock.return_value = process builder.produce_rpm("/path/to/pkg.src.rpm", "/path/to/configs", "/path/to/results") assert_cmd = ['unbuffer', '/usr/bin/mock', @@ -85,9 +93,11 @@ class TestMockBuilder(unittest.TestCase): '--resultdir', '/path/to/results', '--uniqueext', '2', '-r', 'child'] - popen_mock.assert_called_with(assert_cmd, stdin=subprocess.PIPE, preexec_fn=builder.preexec_fn_build_stream) + popen_mock.assert_called_with(assert_cmd, stdin=subprocess.PIPE, + preexec_fn=builder.preexec_fn_build_stream, + timeout=21600) - @mock.patch('builtins.open', new_callable=mock.mock_open()) + @mock.patch('{}.open'.format(builtins), new_callable=mock.mock_open()) def test_touch_success_file(self, mock_open): builder = MockBuilder(self.task, self.sourcedir, self.resultdir, self.config) builder.touch_success_file() diff --git a/rpmbuild/tests/test_providers.py b/rpmbuild/tests/test_providers.py index fa2128f..cec5166 100644 --- a/rpmbuild/tests/test_providers.py +++ b/rpmbuild/tests/test_providers.py @@ -1,8 +1,8 @@ import unittest -from ..copr_rpmbuild.providers import (factory, RubyGemsProvider, PyPIProvider, - SpecUrlProvider) +from copr_rpmbuild.providers import (factory, RubyGemsProvider, PyPIProvider, + SpecUrlProvider) -from ..copr_rpmbuild.helpers import SourceType +from copr_rpmbuild.helpers import SourceType class TestProvidersFactory(unittest.TestCase): diff --git a/rpmbuild/tests/test_pypi.py b/rpmbuild/tests/test_pypi.py index 72a3164..068e918 100644 --- a/rpmbuild/tests/test_pypi.py +++ b/rpmbuild/tests/test_pypi.py @@ -1,8 +1,14 @@ -import mock -import unittest -from ..copr_rpmbuild.providers.pypi import PyPIProvider +from copr_rpmbuild.providers.pypi import PyPIProvider from . import TestCase +try: + from unittest import mock + builtins = 'builtins' +except ImportError: + # Python 2 version depends on mock + import mock + builtins = '__builtin__' + class TestPyPIProvider(TestCase): def setUp(self): @@ -18,8 +24,8 @@ class TestPyPIProvider(TestCase): self.assertEqual(provider.pypi_package_name, "motionpaint") self.assertEqual(provider.python_versions, [2, 3]) - @mock.patch("rpmbuild.copr_rpmbuild.providers.pypi.run_cmd") - @mock.patch("builtins.open") + @mock.patch("copr_rpmbuild.providers.pypi.run_cmd") + @mock.patch("{}.open".format(builtins)) def test_produce_srpm(self, mock_open, run_cmd): provider = PyPIProvider(self.source_json, "/some/tmp/directory", self.config) provider.produce_srpm() diff --git a/rpmbuild/tests/test_rubygems.py b/rpmbuild/tests/test_rubygems.py index a5ef0a2..1b50907 100644 --- a/rpmbuild/tests/test_rubygems.py +++ b/rpmbuild/tests/test_rubygems.py @@ -1,9 +1,15 @@ -import mock -import unittest from munch import Munch -from ..copr_rpmbuild.providers.rubygems import RubyGemsProvider +from copr_rpmbuild.providers.rubygems import RubyGemsProvider from . import TestCase +try: + from unittest import mock + builtins = 'builtins' +except ImportError: + # Python 2 version depends on mock + import mock + builtins = '__builtin__' + class TestRubyGemsProvider(TestCase): def setUp(self): @@ -15,16 +21,16 @@ class TestRubyGemsProvider(TestCase): provider = RubyGemsProvider(self.source_json, self.resultdir, self.config) self.assertEqual(provider.gem_name, "A_123") - @mock.patch("rpmbuild.copr_rpmbuild.providers.rubygems.run_cmd") - @mock.patch("builtins.open") + @mock.patch("copr_rpmbuild.providers.rubygems.run_cmd") + @mock.patch("{}.open".format(builtins)) def test_produce_srpm(self, mock_open, run_cmd): provider = RubyGemsProvider(self.source_json, self.resultdir, self.config) provider.produce_srpm() assert_cmd = ["gem2rpm", "A_123", "--srpm", "-C", "/path/to/resultdir", "--fetch"] run_cmd.assert_called_with(assert_cmd) - @mock.patch("rpmbuild.copr_rpmbuild.providers.rubygems.run_cmd") - @mock.patch("builtins.open") + @mock.patch("copr_rpmbuild.providers.rubygems.run_cmd") + @mock.patch("{}.open".format(builtins)) def test_empty_license(self, mock_open, run_cmd): stderr = ("error: line 8: Empty tag: License:" "Command failed: rpmbuild -bs --nodeps --define '_sourcedir /tmp/gem2rpm-foo-20170905-3367-c2flks'" diff --git a/rpmbuild/tests/test_scm.py b/rpmbuild/tests/test_scm.py index 3dd8844..84e9e3a 100644 --- a/rpmbuild/tests/test_scm.py +++ b/rpmbuild/tests/test_scm.py @@ -1,14 +1,17 @@ -import mock -import unittest import tempfile import os import configparser import shutil -from ..copr_rpmbuild.providers.scm import ScmProvider -from ..copr_rpmbuild.helpers import read_config + +from copr_rpmbuild.providers.scm import ScmProvider +from copr_rpmbuild.helpers import read_config from . import TestCase -from mock import patch, MagicMock +try: + from unittest import mock +except ImportError: + # Python 2 version depends on mock + import mock RPKG_CONF_JINJA = """ [rpkg] @@ -62,7 +65,7 @@ class TestScmProvider(TestCase): source_json = self.source_json.copy() source_json["clone_url"] = "http://copr-dist-git.fedorainfracloud.org/git/clime/project/pkg.git" - with patch("rpmbuild.copr_rpmbuild.providers.scm.CONF_DIRS", new=[rpkg_tmpdir]): + with mock.patch("copr_rpmbuild.providers.scm.CONF_DIRS", new=[rpkg_tmpdir]): provider = ScmProvider(source_json, self.resultdir, self.config) rpkg_config_path = provider.generate_rpkg_config() @@ -74,7 +77,7 @@ class TestScmProvider(TestCase): source_json["clone_url"] = "http://unknownurl/git/clime/project/pkg.git" - with patch("rpmbuild.copr_rpmbuild.providers.scm.CONF_DIRS", new=[rpkg_tmpdir]): + with mock.patch("copr_rpmbuild.providers.scm.CONF_DIRS", new=[rpkg_tmpdir]): provider = ScmProvider(source_json, self.resultdir, self.config) rpkg_config_path = provider.generate_rpkg_config() self.assertEqual(rpkg_config_path, "/etc/rpkg.conf") @@ -83,7 +86,7 @@ class TestScmProvider(TestCase): def test_get_rpkg_command(self): provider = ScmProvider(self.source_json, self.resultdir, self.config) - provider.generate_rpkg_config = MagicMock(return_value="/etc/rpkg.conf") + provider.generate_rpkg_config = mock.MagicMock(return_value="/etc/rpkg.conf") assert_cmd = ["rpkg", "-C", "/etc/rpkg.conf", "srpm", "--outdir", self.resultdir, "--spec", provider.spec_path] self.assertEqual(provider.get_rpkg_command(), assert_cmd) @@ -98,7 +101,7 @@ class TestScmProvider(TestCase): assert_cmd = ["tito", "build", "--test", "--srpm", "--output", self.resultdir] self.assertEqual(provider.get_tito_test_command(), assert_cmd) - @mock.patch("rpmbuild.copr_rpmbuild.providers.scm.get_mock_uniqueext") + @mock.patch("copr_rpmbuild.providers.scm.get_mock_uniqueext") def test_get_make_srpm_command(self, get_mock_uniqueext_mock): get_mock_uniqueext_mock.return_value = '2' provider = ScmProvider(self.source_json, self.resultdir, self.config) diff --git a/rpmbuild/tests/test_spec.py b/rpmbuild/tests/test_spec.py index 898d3d0..088f3e5 100644 --- a/rpmbuild/tests/test_spec.py +++ b/rpmbuild/tests/test_spec.py @@ -1,9 +1,16 @@ -import mock -import unittest import configparser -from ..copr_rpmbuild.providers.spec import SpecUrlProvider + +from copr_rpmbuild.providers.spec import SpecUrlProvider from . import TestCase +try: + from unittest import mock + builtins = 'builtins' +except ImportError: + # Python 2 version depends on mock + import mock + builtins = '__builtin__' + class TestSpecUrlProvider(TestCase): def setUp(self): @@ -16,8 +23,8 @@ class TestSpecUrlProvider(TestCase): self.assertEqual(provider.url, "http://foo.ex/somepackage.spec") @mock.patch('requests.get') - @mock.patch("rpmbuild.copr_rpmbuild.providers.spec.run_cmd") - @mock.patch('builtins.open', new_callable=mock.mock_open()) + @mock.patch("copr_rpmbuild.providers.spec.run_cmd") + @mock.patch('{}.open'.format(builtins), new_callable=mock.mock_open()) def test_produce_srpm(self, mock_open, run_cmd, mock_get): provider = SpecUrlProvider(self.source_json, self.resultdir, self.config) provider.produce_srpm() @@ -26,7 +33,7 @@ class TestSpecUrlProvider(TestCase): cwd=provider.workdir) @mock.patch('requests.get') - @mock.patch('builtins.open', new_callable=mock.mock_open()) + @mock.patch('{}.open'.format(builtins), new_callable=mock.mock_open()) def test_save_spec(self, mock_open, mock_get): provider = SpecUrlProvider(self.source_json, self.resultdir, self.config) provider.save_spec() From 9194ac3a8265cc97bdd6613fb38734ff72d889c9 Mon Sep 17 00:00:00 2001 From: clime Date: Jul 11 2018 06:55:49 +0000 Subject: [PATCH 2/2] fix missing double-quotes in run_test.sh --- diff --git a/rpmbuild/run_tests.sh b/rpmbuild/run_tests.sh index 3f79264..3ee2301 100755 --- a/rpmbuild/run_tests.sh +++ b/rpmbuild/run_tests.sh @@ -2,4 +2,4 @@ path="${1:-tests}" -PYTHONPATH=.:$PYTHONPATH ${PYTHON:-python3} -m pytest -s $path +PYTHONPATH=".:$PYTHONPATH" "${PYTHON:-python3}" -m pytest -s "$path"