|
|
b34edfe |
From 2bd726d20f3e5d1502a2191d0d263d0b6132982b Mon Sep 17 00:00:00 2001
|
|
|
b34edfe |
From: =?UTF-8?q?Ond=C5=99ej=20Nosek?= <onosek@redhat.com>
|
|
|
b34edfe |
Date: Thu, 12 Oct 2023 01:40:36 +0200
|
|
|
b48b289 |
Subject: [PATCH] Unittests for "Undo rpmautospec processing"
|
|
|
b34edfe |
MIME-Version: 1.0
|
|
|
b34edfe |
Content-Type: text/plain; charset=UTF-8
|
|
|
b34edfe |
Content-Transfer-Encoding: 8bit
|
|
|
b34edfe |
|
|
|
b34edfe |
Merges: https://pagure.io/rpkg/pull-request/699
|
|
|
b34edfe |
Signed-off-by: Ondřej Nosek <onosek@redhat.com>
|
|
|
b34edfe |
---
|
|
|
b34edfe |
Jenkinsfile | 2 +-
|
|
|
b34edfe |
jenkins_test.dockerfile | 3 +-
|
|
|
b34edfe |
pyrpkg/utils.py | 6 +--
|
|
|
b34edfe |
tests/fixtures/docpkg/docpkg-rpmautospec.spec | 53 +++++++++++++++++++
|
|
|
b34edfe |
tests/test_cli.py | 40 +++++++-------
|
|
|
b34edfe |
tests/test_utils.py | 36 ++++++++++++-
|
|
|
b34edfe |
6 files changed, 116 insertions(+), 24 deletions(-)
|
|
|
b34edfe |
create mode 100644 tests/fixtures/docpkg/docpkg-rpmautospec.spec
|
|
|
b34edfe |
|
|
|
b48b289 |
diff --git a/Jenkinsfile b/Jenkinsfile
|
|
|
b48b289 |
index 7b6742f..e6d6394 100644
|
|
|
b48b289 |
--- a/Jenkinsfile
|
|
|
b48b289 |
+++ b/Jenkinsfile
|
|
|
b48b289 |
@@ -50,7 +50,7 @@ git fetch proposed
|
|
|
b48b289 |
git checkout "origin/$params.BRANCH_TO"
|
|
|
b48b289 |
git merge --no-ff "proposed/$params.BRANCH" -m "Merge PR"
|
|
|
b48b289 |
|
|
|
b48b289 |
-podman run --rm -v .:/src:Z quay.io/exd-guild-source-tools/rpkg-test:latest tox -e py36,py39,flake8,bandit --workdir /tmp/tox ${TOX_POSARGS}
|
|
|
b48b289 |
+podman run --rm -v .:/src:Z quay.io/exd-guild-source-tools/rpkg-test:latest tox -e py36,py39,py311,flake8,bandit --workdir /tmp/tox ${TOX_POSARGS}
|
|
|
b48b289 |
# disabled py27 environment for now; keep just flake8 for Python 2
|
|
|
b48b289 |
podman run --rm -v .:/src:Z quay.io/exd-guild-source-tools/rpkg-test-py2:latest tox -e flake8python2 --workdir /tmp/tox ${TOX_POSARGS}
|
|
|
b48b289 |
"""
|
|
|
b48b289 |
diff --git a/jenkins_test.dockerfile b/jenkins_test.dockerfile
|
|
|
b48b289 |
index df8762e..d217a55 100644
|
|
|
b48b289 |
--- a/jenkins_test.dockerfile
|
|
|
b48b289 |
+++ b/jenkins_test.dockerfile
|
|
|
b48b289 |
@@ -1,4 +1,4 @@
|
|
|
b48b289 |
-FROM fedora:37
|
|
|
b48b289 |
+FROM fedora:38
|
|
|
b48b289 |
LABEL \
|
|
|
b48b289 |
name="rpkg test" \
|
|
|
b48b289 |
description="Run tests using tox with Python 3" \
|
|
|
b48b289 |
@@ -9,6 +9,7 @@ RUN dnf -y update && dnf -y install \
|
|
|
b48b289 |
python3-devel \
|
|
|
b48b289 |
python3-openidc-client \
|
|
|
b48b289 |
python3-libmodulemd \
|
|
|
b48b289 |
+ python3-rpmautospec \
|
|
|
b48b289 |
python3-setuptools \
|
|
|
b48b289 |
rpmlint \
|
|
|
b48b289 |
rpm-build \
|
|
|
b34edfe |
diff --git a/pyrpkg/utils.py b/pyrpkg/utils.py
|
|
|
b34edfe |
index f3c8b25..fc01c7d 100644
|
|
|
b34edfe |
--- a/pyrpkg/utils.py
|
|
|
b34edfe |
+++ b/pyrpkg/utils.py
|
|
|
b34edfe |
@@ -104,7 +104,7 @@ def log_result(log_func, result, level=0, indent=2):
|
|
|
b34edfe |
elif isinstance(result, dict):
|
|
|
b34edfe |
for key, value in result.items():
|
|
|
b34edfe |
_log_value(log_func, key, level, indent, ':')
|
|
|
b34edfe |
- log_result(log_func, value, level+1)
|
|
|
b34edfe |
+ log_result(log_func, value, level + 1)
|
|
|
b34edfe |
else:
|
|
|
b34edfe |
_log_value(log_func, result, level, indent)
|
|
|
b34edfe |
|
|
|
b34edfe |
@@ -348,9 +348,9 @@ def _replace_lines(lines, startline, endline, replacement_lines=None, strip_endl
|
|
|
b34edfe |
else:
|
|
|
b34edfe |
# rpmautospec adds an empty line after the end
|
|
|
b34edfe |
# we want to remove it, but only if it is actually empty
|
|
|
b34edfe |
- if strip_endline and lines[end+1] == "\n":
|
|
|
b34edfe |
+ if strip_endline and lines[end + 1] == "\n":
|
|
|
b34edfe |
end += 1
|
|
|
b34edfe |
- lines = lines[:start] + replacement_lines + lines[end+1:]
|
|
|
b34edfe |
+ lines = lines[:start] + replacement_lines + lines[end + 1:]
|
|
|
b34edfe |
return lines, True
|
|
|
b34edfe |
|
|
|
b34edfe |
|
|
|
b34edfe |
diff --git a/tests/fixtures/docpkg/docpkg-rpmautospec.spec b/tests/fixtures/docpkg/docpkg-rpmautospec.spec
|
|
|
b34edfe |
new file mode 100644
|
|
|
b34edfe |
index 0000000..5974b57
|
|
|
b34edfe |
--- /dev/null
|
|
|
b34edfe |
+++ b/tests/fixtures/docpkg/docpkg-rpmautospec.spec
|
|
|
b34edfe |
@@ -0,0 +1,53 @@
|
|
|
b34edfe |
+## START: Set by rpmautospec
|
|
|
b34edfe |
+## (rpmautospec version 0.3.5)
|
|
|
b34edfe |
+## RPMAUTOSPEC: autorelease, autochangelog
|
|
|
b34edfe |
+%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
|
|
|
b34edfe |
+ release_number = 8;
|
|
|
b34edfe |
+ base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
|
|
|
b34edfe |
+ print(release_number + base_release_number - 1);
|
|
|
b34edfe |
+}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
|
|
|
b34edfe |
+## END: Set by rpmautospec
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+# autogenerated specfile
|
|
|
b34edfe |
+Summary: Dummy summary
|
|
|
b34edfe |
+Name: docpkg-rpmautospec
|
|
|
b34edfe |
+Version: 0.2
|
|
|
b34edfe |
+Release: 1%{dist}
|
|
|
b34edfe |
+License: GPL
|
|
|
b34edfe |
+Group: Applications/Productivity
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
|
|
b34edfe |
+Source0: hello-world.txt
|
|
|
b34edfe |
+Source1: docpkg.tar.gz
|
|
|
b34edfe |
+Source2: source-without-extension
|
|
|
b34edfe |
+# added empty dir just to test import srpm `fedpkg import`. It should skip the dir.
|
|
|
b34edfe |
+Source3: EMPTY_DIR
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+%description
|
|
|
b34edfe |
+This is a dummy description.
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+%prep
|
|
|
b34edfe |
+cp %{SOURCE0} .
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+%build
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+%clean
|
|
|
b34edfe |
+rm -rf $$RPM_BUILD_ROOT
|
|
|
b34edfe |
+%install
|
|
|
b34edfe |
+rm -rf $RPM_BUILD_ROOT
|
|
|
b34edfe |
+mkdir $RPM_BUILD_ROOT
|
|
|
b34edfe |
+mkdir -p $RPM_BUILD_ROOT/usr/share/doc
|
|
|
b34edfe |
+cp %{SOURCE0} $RPM_BUILD_ROOT/usr/share/doc/hello-world.txt
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+%files
|
|
|
b34edfe |
+%doc "/usr/share/doc/hello-world.txt"
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+%changelog
|
|
|
b34edfe |
+## START: Generated by rpmautospec
|
|
|
b34edfe |
+* Sun Jan 1 2006 tester <tester@example.com> - 0.2-1
|
|
|
b34edfe |
+- - New release 0.2-1
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+* Sun Jan 1 2006 John Doe <jdoe@example.com> - 0.2-1
|
|
|
b34edfe |
+- Initial version
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+## END: Generated by rpmautospec
|
|
|
b34edfe |
diff --git a/tests/test_cli.py b/tests/test_cli.py
|
|
|
b34edfe |
index f2e68df..3d90f36 100644
|
|
|
b34edfe |
--- a/tests/test_cli.py
|
|
|
b34edfe |
+++ b/tests/test_cli.py
|
|
|
b34edfe |
@@ -1706,10 +1706,10 @@ class TestFailureImportSrpm(CliTestCase):
|
|
|
b34edfe |
class TestImportSrpm(LookasideCacheMock, CliTestCase):
|
|
|
b34edfe |
|
|
|
b34edfe |
@staticmethod
|
|
|
b34edfe |
- def build_srpm(srcrpmdir):
|
|
|
b34edfe |
+ def build_srpm(srcrpmdir, specfile_name='docpkg.spec'):
|
|
|
b34edfe |
"""Build a fake SRPM used by this test case"""
|
|
|
b34edfe |
docpkg_dir = os.path.join(fixtures_dir, 'docpkg')
|
|
|
b34edfe |
- specfile = os.path.join(docpkg_dir, 'docpkg.spec')
|
|
|
b34edfe |
+ specfile = os.path.join(docpkg_dir, specfile_name)
|
|
|
b34edfe |
rpmbuild = [
|
|
|
b34edfe |
'rpmbuild', '-bs',
|
|
|
b34edfe |
'--define', '_topdir {0}'.format(srcrpmdir),
|
|
|
b34edfe |
@@ -1735,6 +1735,9 @@ class TestImportSrpm(LookasideCacheMock, CliTestCase):
|
|
|
b34edfe |
|
|
|
b34edfe |
self.srcrpmdir = tempfile.mkdtemp(prefix='test-import-srpm-topdir-')
|
|
|
b34edfe |
self.srpm_file = TestImportSrpm.build_srpm(self.srcrpmdir)
|
|
|
b34edfe |
+ self.srpm_file_rpmautospec = TestImportSrpm.build_srpm(
|
|
|
b34edfe |
+ self.srcrpmdir,
|
|
|
b34edfe |
+ specfile_name='docpkg-rpmautospec.spec')
|
|
|
b34edfe |
|
|
|
b34edfe |
self.chaos_repo = tempfile.mkdtemp(prefix='rpkg-tests-chaos-repo-')
|
|
|
b34edfe |
cmds = (
|
|
|
b34edfe |
@@ -1827,40 +1830,29 @@ class TestImportSrpm(LookasideCacheMock, CliTestCase):
|
|
|
b34edfe |
self.assertFilesExist(['package.rpmlintrc'], search_dir=self.chaos_repo)
|
|
|
b34edfe |
self.assertFilesNotExist(['the_file_is_not_in_reserved.yaml'], search_dir=self.chaos_repo)
|
|
|
b34edfe |
|
|
|
b34edfe |
- @patch('pyrpkg.spec_file_processed_by_rpmautospec')
|
|
|
b34edfe |
- def test_import_srpm_not_processed_by_rpmautospec(self, rpmautospec_processed):
|
|
|
b34edfe |
+ def test_import_srpm_not_processed_by_rpmautospec(self):
|
|
|
b34edfe |
cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
|
|
|
b34edfe |
'import', '--skip-diffs', self.srpm_file]
|
|
|
b34edfe |
|
|
|
b34edfe |
- rpmautospec_processed.return_value = False
|
|
|
b34edfe |
with patch('sys.argv', new=cli_cmd):
|
|
|
b34edfe |
cli = self.new_cli()
|
|
|
b34edfe |
with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
|
|
|
b34edfe |
cli.import_srpm() # no exception should be raised
|
|
|
b34edfe |
- rpmautospec_processed.assert_called_once()
|
|
|
b34edfe |
|
|
|
b34edfe |
- @patch('pyrpkg.spec_file_processed_by_rpmautospec')
|
|
|
b34edfe |
- def test_import_srpm_processed_by_rpmautospec(self, rpmautospec_processed):
|
|
|
b34edfe |
+ def test_import_srpm_processed_by_rpmautospec(self):
|
|
|
b34edfe |
cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
|
|
|
b34edfe |
- 'import', '--skip-diffs', self.srpm_file]
|
|
|
b34edfe |
+ 'import', '--skip-diffs', self.srpm_file_rpmautospec]
|
|
|
b34edfe |
|
|
|
b34edfe |
- rpmautospec_processed.return_value = True
|
|
|
b34edfe |
with patch('sys.argv', new=cli_cmd):
|
|
|
b34edfe |
cli = self.new_cli()
|
|
|
b34edfe |
with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
|
|
|
b34edfe |
- six.assertRaisesRegex(
|
|
|
b34edfe |
- self,
|
|
|
b34edfe |
- rpkgError,
|
|
|
b34edfe |
- 'SRPM was processed by rpmautospec',
|
|
|
b34edfe |
- cli.import_srpm)
|
|
|
b34edfe |
- rpmautospec_processed.assert_called_once()
|
|
|
b34edfe |
+ cli.import_srpm()
|
|
|
b34edfe |
|
|
|
b34edfe |
- @patch('pyrpkg.spec_file_processed_by_rpmautospec')
|
|
|
b34edfe |
+ @patch('pyrpkg.spec_file_undo_rpmautospec')
|
|
|
b34edfe |
def test_import_srpm_processed_by_rpmautospec_allowed(self, rpmautospec_processed):
|
|
|
b34edfe |
cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
|
|
|
b34edfe |
'import', '--skip-diffs', self.srpm_file]
|
|
|
b34edfe |
|
|
|
b34edfe |
- rpmautospec_processed.return_value = True
|
|
|
b34edfe |
with patch('sys.argv', new=cli_cmd):
|
|
|
b34edfe |
cli = self.new_cli()
|
|
|
b34edfe |
cli.cmd.allow_pre_generated_srpm = True
|
|
|
b34edfe |
@@ -1868,6 +1860,18 @@ class TestImportSrpm(LookasideCacheMock, CliTestCase):
|
|
|
b34edfe |
cli.import_srpm() # no exception should be raised
|
|
|
b34edfe |
rpmautospec_processed.assert_not_called()
|
|
|
b34edfe |
|
|
|
b34edfe |
+ @patch('pyrpkg.spec_file_undo_rpmautospec')
|
|
|
b34edfe |
+ def test_import_srpm_processed_by_rpmautospec_not_allowed(self, rpmautospec_processed):
|
|
|
b34edfe |
+ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
|
|
|
b34edfe |
+ 'import', '--skip-diffs', self.srpm_file]
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+ with patch('sys.argv', new=cli_cmd):
|
|
|
b34edfe |
+ cli = self.new_cli()
|
|
|
b34edfe |
+ cli.cmd.allow_pre_generated_srpm = False # or None
|
|
|
b34edfe |
+ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
|
|
|
b34edfe |
+ cli.import_srpm() # no exception should be raised
|
|
|
b34edfe |
+ rpmautospec_processed.assert_called_once()
|
|
|
b34edfe |
+
|
|
|
b34edfe |
|
|
|
b34edfe |
class TestMockbuild(CliTestCase):
|
|
|
b34edfe |
"""Test mockbuild command"""
|
|
|
b34edfe |
diff --git a/tests/test_utils.py b/tests/test_utils.py
|
|
|
b34edfe |
index 34188c5..0cd62d8 100644
|
|
|
b34edfe |
--- a/tests/test_utils.py
|
|
|
b34edfe |
+++ b/tests/test_utils.py
|
|
|
b34edfe |
@@ -1,15 +1,22 @@
|
|
|
b34edfe |
import os
|
|
|
b34edfe |
+import shutil
|
|
|
b34edfe |
import tempfile
|
|
|
b34edfe |
import unittest
|
|
|
b34edfe |
import warnings
|
|
|
b34edfe |
|
|
|
b34edfe |
+try:
|
|
|
b34edfe |
+ import rpmautospec
|
|
|
b34edfe |
+except ImportError:
|
|
|
b34edfe |
+ rpmautospec = None
|
|
|
b34edfe |
+
|
|
|
b34edfe |
try:
|
|
|
b34edfe |
from unittest import mock
|
|
|
b34edfe |
except ImportError:
|
|
|
b34edfe |
import mock
|
|
|
b34edfe |
|
|
|
b34edfe |
from pyrpkg.utils import (cached_property, is_file_in_directory,
|
|
|
b34edfe |
- is_file_tracked, log_result, warn_deprecated)
|
|
|
b34edfe |
+ is_file_tracked, log_result,
|
|
|
b34edfe |
+ spec_file_undo_rpmautospec, warn_deprecated)
|
|
|
b34edfe |
|
|
|
b34edfe |
from utils import CommandTestCase
|
|
|
b34edfe |
|
|
|
b34edfe |
@@ -287,3 +294,30 @@ class FileTrackedTestCase(CommandTestCase):
|
|
|
b34edfe |
self.repo_path
|
|
|
b34edfe |
)
|
|
|
b34edfe |
)
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+@unittest.skipIf(
|
|
|
b34edfe |
+ rpmautospec is None,
|
|
|
b34edfe |
+ "Skip test on releases where rpmautospec is not available (RHEL)")
|
|
|
b34edfe |
+class SpecFileUndoRpmautospec(CommandTestCase):
|
|
|
b34edfe |
+ def test_remove_autospec_from_specfile(self):
|
|
|
b34edfe |
+ fixtures_dir = os.path.join(os.path.dirname(__file__), "fixtures", "docpkg")
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+ specfile_without_rpmautospec = os.path.join(fixtures_dir, "docpkg.spec")
|
|
|
b34edfe |
+ specfile_without_rpmautospec_copy = os.path.join(self.repo_path, "docpkg.spec")
|
|
|
b34edfe |
+ shutil.copy2(specfile_without_rpmautospec, specfile_without_rpmautospec_copy)
|
|
|
b34edfe |
+ self.assertFalse(rpmautospec.specfile_uses_rpmautospec(specfile_without_rpmautospec_copy))
|
|
|
b34edfe |
+ self.assertFalse(spec_file_undo_rpmautospec(specfile_without_rpmautospec_copy))
|
|
|
b34edfe |
+ self.assertFalse(rpmautospec.specfile_uses_rpmautospec(specfile_without_rpmautospec_copy))
|
|
|
b34edfe |
+ os.remove(specfile_without_rpmautospec_copy)
|
|
|
b34edfe |
+
|
|
|
b34edfe |
+ specfile_with_rpmautospec = os.path.join(fixtures_dir, "docpkg-rpmautospec.spec")
|
|
|
b34edfe |
+ specfile_with_rpmautospec_copy = os.path.join(self.repo_path, "docpkg-rpmautospec.spec")
|
|
|
b34edfe |
+ shutil.copy2(specfile_with_rpmautospec, specfile_with_rpmautospec_copy)
|
|
|
b34edfe |
+ # returns True if the specfile was modified
|
|
|
b34edfe |
+ self.assertTrue(spec_file_undo_rpmautospec(specfile_with_rpmautospec_copy))
|
|
|
b34edfe |
+ self.assertFalse(rpmautospec.specfile_uses_rpmautospec(
|
|
|
b34edfe |
+ specfile_with_rpmautospec_copy, check_autochangelog=False, check_autorelease=True))
|
|
|
b34edfe |
+ self.assertTrue(rpmautospec.specfile_uses_rpmautospec(
|
|
|
b34edfe |
+ specfile_with_rpmautospec_copy, check_autochangelog=True, check_autorelease=False))
|
|
|
b34edfe |
+ os.remove(specfile_with_rpmautospec_copy)
|
|
|
b34edfe |
--
|
|
|
b48b289 |
2.43.0
|
|
|
b34edfe |
|