Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2022-03-10 22:45:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.2349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Thu Mar 10 22:45:44 2022 rev:395 rq:960802 version:20220310.99e9d9a2
Wed Mar  9 18:47:52 2022 rev:394 rq:960375 version:20220308.807b0f93
Tue Mar  8 20:31:44 2022 rev:393 rq:960042 version:20220307.0e859719

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2022-03-07 18:26:21.450766593 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.2349/openSUSE-release-tools.changes
  2022-03-11 11:48:26.818800019 +0100
@@ -1,0 +2,22 @@
+Thu Mar 10 14:05:24 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220310.99e9d9a2:
+  * package: Package /usr/bin/osrt-check_bugowner
+  * check_bugowner: Relax check for patchinfo - patchinfo.* is good as well
+  * gocd: Run check_bugowner on SLE side
+  * Add a test case for check_bugowner
+  * Add ReviewBot to check for bugowner lines in requests for new packages
+
+-------------------------------------------------------------------
+Tue Mar 08 13:06:56 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220308.807b0f93:
+  * tests: Make use of fixtures to be able to test different workflows
+
+-------------------------------------------------------------------
+Mon Mar 07 18:54:24 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220307.0e859719:
+  * CI: Split the tests in multiple runs
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20220307.7fa0e0de.obscpio

New:
----
  openSUSE-release-tools-20220310.99e9d9a2.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.9tzHpP/_old  2022-03-11 11:48:27.730799113 +0100
+++ /var/tmp/diff_new_pack.9tzHpP/_new  2022-03-11 11:48:27.734799110 +0100
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20220307.7fa0e0de
+Version:        20220310.99e9d9a2
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT
@@ -345,6 +345,7 @@
 %{_bindir}/osrt-bugowner
 %{_bindir}/osrt-build-fail-reminder
 %{_bindir}/osrt-checknewer
+%{_bindir}/osrt-check_bugowner
 %{_bindir}/osrt-check_source_in_factory
 %{_bindir}/osrt-check_tags_in_requests
 %{_bindir}/osrt-compare_pkglist

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.9tzHpP/_old  2022-03-11 11:48:27.790799054 +0100
+++ /var/tmp/diff_new_pack.9tzHpP/_new  2022-03-11 11:48:27.798799045 +0100
@@ -1,7 +1,7 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">7fa0e0de0d1ab1fb00fed7aad91ecc4d77f38123</param>
+    <param 
name="changesrevision">d344cf66a899f0c46ca6cf1ad9bfbfda9ebe1918</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20220307.7fa0e0de.obscpio -> 
openSUSE-release-tools-20220310.99e9d9a2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/.github/workflows/ci-test.yml 
new/openSUSE-release-tools-20220310.99e9d9a2/.github/workflows/ci-test.yml
--- old/openSUSE-release-tools-20220307.7fa0e0de/.github/workflows/ci-test.yml  
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/.github/workflows/ci-test.yml  
2022-03-10 15:03:42.000000000 +0100
@@ -12,6 +12,10 @@
   tests:
     timeout-minutes: 40
     runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        ci_node_index: [Long1,Long2,Rest]
 
     steps:
     - name: Checkout
@@ -22,6 +26,12 @@
 
     - name: Run tests
       run: docker-compose -f dist/ci/docker-compose.yml run test
+      env:
+         # Specifies how many jobs you would like to run in parallel,
+         # used for partitioning
+         CI_NODE_TOTAL: ${{ matrix.ci_node_total }}
+         # Use the index from matrix as an environment variable
+         CI_NODE_INDEX: ${{ matrix.ci_node_index }}
 
     - name: Submit coverage report to Codecov
       uses: codecov/codecov-action@v1.5.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20220307.7fa0e0de/CONTENTS.md 
new/openSUSE-release-tools-20220310.99e9d9a2/CONTENTS.md
--- old/openSUSE-release-tools-20220307.7fa0e0de/CONTENTS.md    2022-03-07 
17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/CONTENTS.md    2022-03-10 
15:03:42.000000000 +0100
@@ -322,11 +322,20 @@
 #### issue-diff.py
 
 Compares packages from a project against factory for differences in referenced 
issues and presents
-changes to allow whitelisting before creating Bugzilla entries.
+changes to allow whitelisting before creating Bugzilla entries. It's used to 
check Factory packages
+have all the bug references fixed in SLE (i.e. if 'Factory First' policy was 
correctly applied).
 
 * Sources: [issue-diff.py](issue-diff.py)
 * Documentation: --
 * Package: openSUSE-release-tools
-* Usage: ???
+* Usage: manually
 
+### check_bugowner.py
 
+Verifies requests for new packages have a bugowner line in the request 
description (used in SLE where we don't have
+devel projects).
+
+ * Sources: [check_bugowner.py](check_bugowner.py)
+ * Documentation: --
+ * Package: openSUSE-release-tools
+ * Usage: gocd
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/ReviewBot.py 
new/openSUSE-release-tools-20220310.99e9d9a2/ReviewBot.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/ReviewBot.py   2022-03-07 
17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/ReviewBot.py   2022-03-10 
15:03:42.000000000 +0100
@@ -289,8 +289,10 @@
             self.add_review(req, by_group=by_group, by_user=by_user, 
msg='Adding fallback reviewer')
 
         if doit:
-            self.logger.debug("setting %s to %s" % (req.reqid, state))
-            if not self.dryrun:
+            if self.dryrun:
+                self.logger.info("(dryrun) would set %s to %s with message %s" 
% (req.reqid, state, msg))
+            else:
+                self.logger.debug("setting %s to %s" % (req.reqid, state))
                 try:
                     osc.core.change_review_state(apiurl=self.apiurl,
                                                  reqid=req.reqid, 
newstate=newstate,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/check_bugowner.py 
new/openSUSE-release-tools-20220310.99e9d9a2/check_bugowner.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/check_bugowner.py      
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/check_bugowner.py      
2022-03-10 15:03:42.000000000 +0100
@@ -0,0 +1,82 @@
+#!/usr/bin/python3
+
+# SPDX-License-Identifier: MIT
+
+import sys
+import re
+
+from urllib.error import HTTPError
+
+import osc.conf
+import osc.core
+import ReviewBot
+
+http_GET = osc.core.http_GET
+
+
+class CheckerBugowner(ReviewBot.ReviewBot):
+
+    def __init__(self, *args, **kwargs):
+        ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
+
+    def check_source_submission(self, src_project, src_package, src_rev, 
target_project, target_package):
+        self.logger.info("%s/%s@%s -> %s/%s" % (src_project,
+                                                src_package, src_rev, 
target_project, target_package))
+        if src_package.startswith('patchinfo'):
+            return True
+        if self.exists_in(target_project, target_package):
+            return True
+        for line in self.request.description.splitlines():
+            matched_package = None
+            matched_maintainer = None
+            m = re.match(r'bugowner:\s*(\S*)\s*$', line)
+            if m:
+                matched_maintainer = m.group(1)
+            m = re.match(r'bugowner:\s(\S*)\s(\S*)\s*$', line)
+            if m:
+                matched_maintainer = m.group(2)
+                matched_package = m.group(1)
+            if not matched_maintainer:
+                continue
+            if matched_package and matched_package != target_package:
+                continue
+            if not self.valid_maintainer(matched_maintainer):
+                self.review_messages['declined'] = f"\n{matched_maintainer} 
could not be found on this instance."
+                return False
+            return True
+        self.review_messages['declined'] += f"\n{target_package } appears to 
be a new package and " + \
+            "no matching 'bugowner:' line could be found in the request 
description."
+        return False
+
+    def existing_url(self, url):
+        "Return False if url returns 404"
+        try:
+            osc.core.http_GET(url)
+        except HTTPError as e:
+            if e.code == 404:
+                return False
+        return True
+
+    def valid_maintainer(self, maintainer):
+        if maintainer.startswith('group:'):
+            maintainer = maintainer.replace('group:', '')
+            url = osc.core.makeurl(self.apiurl, ['group', maintainer])
+            return self.existing_url(url)
+        url = osc.core.makeurl(self.apiurl, ['person', maintainer])
+        return self.existing_url(url)
+
+    def exists_in(self, project, package):
+        url = osc.core.makeurl(self.apiurl, ['source', project, package])
+        return self.existing_url(url)
+
+
+class CommandLineInterface(ReviewBot.CommandLineInterface):
+
+    def __init__(self, *args, **kwargs):
+        ReviewBot.CommandLineInterface.__init__(self, args, kwargs)
+        self.clazz = CheckerBugowner
+
+
+if __name__ == "__main__":
+    app = CommandLineInterface()
+    sys.exit(app.main())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/dist/ci/docker-compose-test.sh 
new/openSUSE-release-tools-20220310.99e9d9a2/dist/ci/docker-compose-test.sh
--- old/openSUSE-release-tools-20220307.7fa0e0de/dist/ci/docker-compose-test.sh 
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/dist/ci/docker-compose-test.sh 
2022-03-10 15:03:42.000000000 +0100
@@ -13,7 +13,22 @@
 done
 
 cd /code
+
+ci_node=$1
+
 for file in tests/*_tests.py; do
+  if test -n "$ci_node"; then
+         if test "$ci_node" == "Rest"; then
+      if grep -q '# CI-Node' $file; then
+        echo "Skipping $file in 'Rest'"
+        continue
+      fi
+    else
+      if ! grep -q "# CI-Node: $ci_node" $file; then
+        continue
+      fi
+         fi
+  fi
   if ! test -f /code/.without-coverage; then
     COVER_ARGS="--cov=. --cov-append --cov-report=xml"
   else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/dist/ci/docker-compose.yml 
new/openSUSE-release-tools-20220310.99e9d9a2/dist/ci/docker-compose.yml
--- old/openSUSE-release-tools-20220307.7fa0e0de/dist/ci/docker-compose.yml     
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/dist/ci/docker-compose.yml     
2022-03-10 15:03:42.000000000 +0100
@@ -48,7 +48,7 @@
     depends_on:
       - api
       - smtp
-    command: /code/dist/ci/docker-compose-test.sh
+    command: /code/dist/ci/docker-compose-test.sh ${CI_NODE_INDEX}
     cap_add:
       - SYS_PTRACE
   flaker:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/dist/package/openSUSE-release-tools.spec
 
new/openSUSE-release-tools-20220310.99e9d9a2/dist/package/openSUSE-release-tools.spec
--- 
old/openSUSE-release-tools-20220307.7fa0e0de/dist/package/openSUSE-release-tools.spec
       2022-03-07 17:47:13.000000000 +0100
+++ 
new/openSUSE-release-tools-20220310.99e9d9a2/dist/package/openSUSE-release-tools.spec
       2022-03-10 15:03:42.000000000 +0100
@@ -345,6 +345,7 @@
 %{_bindir}/osrt-bugowner
 %{_bindir}/osrt-build-fail-reminder
 %{_bindir}/osrt-checknewer
+%{_bindir}/osrt-check_bugowner
 %{_bindir}/osrt-check_source_in_factory
 %{_bindir}/osrt-check_tags_in_requests
 %{_bindir}/osrt-compare_pkglist
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/gocd/checkers.suse.gocd.yaml 
new/openSUSE-release-tools-20220310.99e9d9a2/gocd/checkers.suse.gocd.yaml
--- old/openSUSE-release-tools-20220307.7fa0e0de/gocd/checkers.suse.gocd.yaml   
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/gocd/checkers.suse.gocd.yaml   
2022-03-10 15:03:42.000000000 +0100
@@ -20,6 +20,26 @@
             - staging-bot
             tasks:
             - script: ./check_tags_in_requests.py -A https://api.suse.de 
--verbose --user=sle-changelog-checker --review=accept-onpass 
--factory=openSUSE.org:openSUSE:Factory review
+  Run.Bugowner.Checker:
+    group: SLE.Checkers
+    lock_behavior: unlockWhenFinished
+    timer:
+      spec: 0 */5 * ? * *
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-bugowner-checker
+    materials:
+      git:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    stages:
+    - Run:
+        approval:
+          type: manual
+        jobs:
+          Run:
+            resources:
+            - staging-bot
+            tasks:
+            - script: ./check_bugowner.py -A https://api.suse.de --verbose 
--user=bugowner-checker --review=accept-onpass review
   SLE15SP4.Project:
     group: SLE.Checkers
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/gocd/checkers.suse.gocd.yaml.erb 
new/openSUSE-release-tools-20220310.99e9d9a2/gocd/checkers.suse.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20220307.7fa0e0de/gocd/checkers.suse.gocd.yaml.erb   
    2022-03-07 17:47:13.000000000 +0100
+++ 
new/openSUSE-release-tools-20220310.99e9d9a2/gocd/checkers.suse.gocd.yaml.erb   
    2022-03-10 15:03:42.000000000 +0100
@@ -20,6 +20,26 @@
             - staging-bot
             tasks:
             - script: ./check_tags_in_requests.py -A https://api.suse.de 
--verbose --user=sle-changelog-checker --review=accept-onpass 
--factory=openSUSE.org:openSUSE:Factory review
+  Run.Bugowner.Checker:
+    group: SLE.Checkers
+    lock_behavior: unlockWhenFinished
+    timer:
+      spec: 0 */5 * ? * *
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-bugowner-checker
+    materials:
+      git:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    stages:
+    - Run:
+        approval:
+          type: manual
+        jobs:
+          Run:
+            resources:
+            - staging-bot
+            tasks:
+            - script: ./check_bugowner.py -A https://api.suse.de --verbose 
--user=bugowner-checker --review=accept-onpass review
   SLE15SP4.Project:
     group: SLE.Checkers
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/OBSLocal.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/OBSLocal.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/OBSLocal.py      
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/OBSLocal.py      
2022-03-10 15:03:42.000000000 +0100
@@ -525,7 +525,7 @@
                                       project_links=project_links)
         return self.projects[name]
 
-    def submit_package(self, package, project=None):
+    def submit_package(self, package, project=None, request_description=""):
         """Creates submit request from package to target project.
 
         Both have to exist (Use :func:`create_submit_request` otherwise).
@@ -534,12 +534,14 @@
         :type package: Package
         :param project: project where to send submit request, None means use 
the default.
         :type project: Project or str or None
+        :param request_description what the request description should be
+        :type request_description str or None
         :return: created request.
         :rtype: Request
         """
         if not project:
             project = self.project
-        request = Request(source_package=package, target_project=project)
+        request = Request(source_package=package, target_project=project, 
description=request_description)
         self.requests.append(request)
         return request
 
@@ -550,7 +552,7 @@
         self.requests.append(request)
         return request
 
-    def create_submit_request(self, project, package, text=None, 
add_commit=True):
+    def create_submit_request(self, project, package, text=None, 
add_commit=True, description=""):
         """Creates submit request from package in specified project to default 
project.
 
         It creates project if not exist and also package.
@@ -573,7 +575,7 @@
         package = Package(name=package, project=project)
         if add_commit:
             package.create_commit(text=text)
-        return self.submit_package(package)
+        return self.submit_package(package, request_description=description)
 
     def __del__(self):
         if not self.api:
@@ -1049,7 +1051,7 @@
     .. _osc.core: https://github.com/openSUSE/osc/blob/master/osc/core.py
     """
 
-    def __init__(self, source_package=None, target_project=None, 
target_package=None, type='submit'):
+    def __init__(self, source_package=None, target_project=None, 
target_package=None, type='submit', description=""):
         """Creates a request in the OBS instance and instantiates an object to 
represent it"""
         self.revoked = True
 
@@ -1058,7 +1060,8 @@
                                                         
src_project=source_package.project.name,
                                                         
src_package=source_package.name,
                                                         
dst_project=target_project,
-                                                        
dst_package=target_package)
+                                                        
dst_package=target_package,
+                                                        message=description)
             print('created submit request {}/{} -> {}'.format(
                 source_package.project.name, source_package.name, 
target_project))
         elif type == 'delete':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/accept_tests.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/accept_tests.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/accept_tests.py  
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/accept_tests.py  
2022-03-10 15:03:42.000000000 +0100
@@ -8,6 +8,8 @@
 from mock import MagicMock
 from . import OBSLocal
 
+# CI-Node: Long2
+
 
 class TestAccept(unittest.TestCase):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/api_tests.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/api_tests.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/api_tests.py     
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/api_tests.py     
2022-03-10 15:03:42.000000000 +0100
@@ -2,6 +2,8 @@
 from osclib.core import attribute_value_delete, attribute_value_save
 from . import OBSLocal
 
+# CI-Node: Long1
+
 
 class TestApiCalls(OBSLocal.TestCase):
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/check_bugowner_tests.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/check_bugowner_tests.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/check_bugowner_tests.py  
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/check_bugowner_tests.py  
2022-03-10 15:03:42.000000000 +0100
@@ -0,0 +1,82 @@
+import logging
+from . import OBSLocal
+from check_bugowner import CheckerBugowner
+import pytest
+
+PROJECT = "SLE:Next-SP"
+
+
+@pytest.fixture
+def default_config(request):
+    wf = OBSLocal.FactoryWorkflow(PROJECT)
+    project = wf.projects[PROJECT]
+
+    request.cls.bot_user = 'factory-auto'
+
+    wf.create_user(request.cls.bot_user)
+    # When creating a review, set the by_user to bot_user
+    project.add_reviewers(users=[request.cls.bot_user])
+
+    request.cls.wf = wf
+
+    request.cls.review_bot = CheckerBugowner(request.cls.wf.apiurl, 
user=request.cls.bot_user, logger=logging.getLogger())
+
+    yield "workflow"
+    del request.cls.wf
+
+
+class TestCheckBugowner(OBSLocal.TestCase):
+
+    @pytest.mark.usefixtures("default_config")
+    def test_no_bugowner(self):
+        """Declines the request for a new package"""
+        req_id = self.wf.create_submit_request('devel:wine', 'merlot').reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
+        self.assertIn('merlot appears to be a new package', review.comment)
+
+    @pytest.mark.usefixtures("default_config")
+    def test_existing_package(self):
+        """Accepts requests for existing packages"""
+        self.wf.create_package(PROJECT, 'merlot')
+
+        req_id = self.wf.create_submit_request('devel:wine', 'merlot').reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        review = self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
+        self.assertEqual('ok', review.comment)
+
+    @pytest.mark.usefixtures("default_config")
+    def test_invalid_bugowner(self):
+        """Declines the request for a new package because of wrong 
maintainer"""
+        req_id = self.wf.create_submit_request('devel:wine', 'merlot', 
description="bugowner: thatguythere").reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
+        self.assertIn('thatguythere could not be found on this instance.', 
review.comment)
+
+    @pytest.mark.usefixtures("default_config")
+    def test_valid_bugowner(self):
+        """Accept request with valid maintainer"""
+        self.wf.create_user('thegirl')
+        req_id = self.wf.create_submit_request('devel:wine', 'merlot', 
description="bugowner: thegirl").reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/check_source_tests.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/check_source_tests.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/check_source_tests.py    
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/check_source_tests.py    
2022-03-10 15:03:42.000000000 +0100
@@ -1,11 +1,11 @@
 import logging
 from . import OBSLocal
 from check_source import CheckSource
-import random
 import os
 from osc.core import get_request_list
+import pytest
 
-PROJECT = 'openSUSE:Factory'
+PROJECT = 'Testing:Project'
 SRC_PROJECT = 'devel:Fishing'
 FIXTURES = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'fixtures')
 REVIEW_TEAM = 'reviewers-team'
@@ -18,42 +18,57 @@
 
 # Inherit from OBSLocal.Testcase since it provides many commodity methods for 
testing against
 # a local testing instance of OBS
+# CI-Node: Long1
 
 
-class TestCheckSource(OBSLocal.TestCase):
-    def setUp(self):
-        super(TestCheckSource, self).setUp()
+def _common_workflow(request):
+    # Using OBSLocal.FactoryWorkflow makes it easier to setup testing scenarios
+    wf = OBSLocal.FactoryWorkflow(PROJECT)
+    project = wf.projects[PROJECT]
 
-        # Using OBSLocal.FactoryWorkflow makes it easier to setup testing 
scenarios
-        self.wf = OBSLocal.FactoryWorkflow(PROJECT)
-        self.project = self.wf.projects[PROJECT]
+    # Set up the reviewers team
+    wf.create_group(REVIEW_TEAM)
 
-        # Set up the reviewers team
-        self.wf.create_group(REVIEW_TEAM)
+    request.cls.bot_user = 'factory-auto'
 
-        self.wf.remote_config_set(
-            {'required-source-maintainer': 'Admin', 'review-team': REVIEW_TEAM}
-        )
+    wf.create_user(request.cls.bot_user)
+    # When creating a review, set the by_user to bot_user
+    project.add_reviewers(users=[request.cls.bot_user])
+
+    request.cls.wf = wf
+
+
+def _add_review_bot(request):
+    # StagingWorkflow creates reviews with the reviewer set to bot_user, so 
it's necessary to
+    # configure our review bot to act upon such reviews
+    request.cls.review_bot = CheckSource(request.cls.wf.apiurl, 
user=request.cls.bot_user, logger=logging.getLogger())
 
-        self.bot_user = 'factory-auto'
-        self.wf.create_user(self.bot_user)
-        # When creating a review, set the by_user to bot_user
-        self.project.add_reviewers(users=[self.bot_user])
-
-        # Ensure different test runs operate in unique namespace.
-        self.bot_name = '::'.join([type(self).__name__, 
str(random.getrandbits(8))])
-
-        # StagingWorkflow creates reviews with the reviewer set to bot_user, 
so it's necessary to
-        # configure our review bot to act upon such reviews
-        self.review_bot = CheckSource(
-            self.wf.apiurl, user=self.bot_user, 
logger=logging.getLogger(self.bot_name)
-        )
-        self.review_bot.bot_name = self.bot_name
 
-    def tearDown(self):
-        super().tearDown()
-        del self.wf
+@pytest.fixture
+def required_source_maintainer(request):
+    _common_workflow(request)
+    request.cls.wf.remote_config_set(
+        {'required-source-maintainer': 'Admin', 'review-team': REVIEW_TEAM, 
'devel-project-enforce': 'True'}
+    )
+    _add_review_bot(request)
+    yield "workflow"
+    del request.cls.wf
+
+
+@pytest.fixture
+def default_config(request):
+    _common_workflow(request)
+    request.cls.wf.remote_config_set(
+        {'review-team': REVIEW_TEAM, 'devel-project-enforce': 'True'}
+    )
+    _add_review_bot(request)
+    yield "workflow"
+    del request.cls.wf
+
+
+class TestCheckSource(OBSLocal.TestCase):
 
+    @pytest.mark.usefixtures("default_config")
     def test_no_devel_project(self):
         """Declines the request when it does not come from a devel project"""
         req_id = self.wf.create_submit_request(SRC_PROJECT, 
self.randomString('package')).reqid
@@ -66,6 +81,7 @@
         review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
         self.assertIn('%s is not a devel project of %s' % (SRC_PROJECT, 
PROJECT), review.comment)
 
+    @pytest.mark.usefixtures("required_source_maintainer")
     def test_devel_project(self):
         """Accepts a request coming from a devel project"""
         self._setup_devel_project()
@@ -80,6 +96,7 @@
         self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
+    @pytest.mark.usefixtures("default_config")
     def test_missing_patch_in_changelog(self):
         """Reject a request if it adds patch and it is not mentioned in 
changelog"""
         # devel files contain patch but not changes
@@ -99,6 +116,7 @@
             review.comment
         )
 
+    @pytest.mark.usefixtures("default_config")
     def test_patch_in_changelog(self):
         """Accepts a request if it adds patch and it is mentioned in 
changelog"""
         self._setup_devel_project()
@@ -114,6 +132,7 @@
         self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
+    @pytest.mark.usefixtures("default_config")
     def test_revert_of_patch(self):
         """Accepts a request if it reverts addition of patch"""
         # switch target and devel, so basically do revert of changes done
@@ -132,6 +151,7 @@
         self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
+    @pytest.mark.usefixtures("required_source_maintainer")
     def test_no_source_maintainer(self):
         """Declines the request when the 'required_maintainer' is not 
maintainer of the source project
 
@@ -167,6 +187,7 @@
 
         self.assertEqual(len(add_role_reqs), 1)
 
+    @pytest.mark.usefixtures("required_source_maintainer")
     def test_source_maintainer(self):
         """Accepts the request when the 'required_maintainer' is a group and 
is a maintainer for the project"""
         group_name = FACTORY_MAINTAINERS.replace('group:', '')
@@ -185,6 +206,7 @@
         self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
+    @pytest.mark.usefixtures("required_source_maintainer")
     def test_source_inherited_maintainer(self):
         """Declines the request when the 'required_maintainer' is only 
inherited maintainer of the source project"""
         # Change the required maintainer
@@ -221,5 +243,5 @@
         self.devel_package.commit_files(fixtures_path)
 
         fixtures_path = os.path.join(FIXTURES, 'packages', target_files)
-        self.target_package = OBSLocal.Package('blowfish', self.project, 
devel_project=SRC_PROJECT)
+        self.target_package = OBSLocal.Package('blowfish', 
self.wf.projects[PROJECT], devel_project=SRC_PROJECT)
         self.target_package.commit_files(fixtures_path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/origin_tests.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/origin_tests.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/origin_tests.py  
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/origin_tests.py  
2022-03-10 15:03:42.000000000 +0100
@@ -20,6 +20,8 @@
 import yaml
 from . import OBSLocal
 
+# CI-Node: Long2
+
 
 class TestOrigin(OBSLocal.TestCase):
     script = './origin-manager.py'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220307.7fa0e0de/tests/select_tests.py 
new/openSUSE-release-tools-20220310.99e9d9a2/tests/select_tests.py
--- old/openSUSE-release-tools-20220307.7fa0e0de/tests/select_tests.py  
2022-03-07 17:47:13.000000000 +0100
+++ new/openSUSE-release-tools-20220310.99e9d9a2/tests/select_tests.py  
2022-03-10 15:03:42.000000000 +0100
@@ -11,6 +11,8 @@
 from mock import MagicMock
 from . import OBSLocal
 
+# CI-Node: Long1
+
 
 class TestSelect(OBSLocal.TestCase):
 

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.9tzHpP/_old  2022-03-11 11:48:28.650798199 +0100
+++ /var/tmp/diff_new_pack.9tzHpP/_new  2022-03-11 11:48:28.654798195 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20220307.7fa0e0de
-mtime: 1646671633
-commit: 7fa0e0de0d1ab1fb00fed7aad91ecc4d77f38123
+version: 20220310.99e9d9a2
+mtime: 1646921022
+commit: 99e9d9a2eb2ccd72455c9c949f80e7d02b402de9
 

Reply via email to