import os import unittest import logging import httpretty import osc import re from . import OBSLocal try: from urllib.parse import urlparse, parse_qs except ImportError: # python 2.x from urlparse import urlparse, parse_qs from check_maintenance_incidents import MaintenanceChecker APIURL = 'http://0.0.0.0:3000' FIXTURES = os.path.join(os.getcwd(), 'tests/fixtures') class TestMaintenance(OBSLocal.TestCase): def setUp(self): """ Initialize the configuration """ super().setUp() httpretty.reset() httpretty.enable() logging.basicConfig() self.logger = logging.getLogger(__file__) self.logger.setLevel(logging.DEBUG) self.checker = MaintenanceChecker(apiurl = APIURL, user = 'maintbot', logger = self.logger) self.checker.override_allow = False # Test setup cannot handle. def test_non_maintainer_submit(self): """same as above but already has devel project as reviewer """ httpretty.register_uri(httpretty.GET, APIURL + '/search/request', body = """ Request created ... Request got a new review request ... """) httpretty.register_uri(httpretty.GET, APIURL + "/request/261355", match_querystring = True, body = """ Request created ... Request got a new review request ... """) httpretty.register_uri(httpretty.GET, APIURL + "/source/home:brassh/mysql-workbench", match_querystring = True, body = """ """) result = { 'devel_review_added': None } def change_request(result, method, uri, headers): query = parse_qs(urlparse(uri).query) if query == {'by_user': ['maintbot'], 'cmd': ['changereviewstate'], 'newstate': ['accepted']}: result['devel_review_added'] = True return (200, headers, '') httpretty.register_uri(httpretty.POST, APIURL + "/request/261355", body = lambda method, uri, headers: change_request(result, method, uri, headers)) httpretty.register_uri(httpretty.GET, APIURL + "/search/owner?project=openSUSE:13.2:Update&binary=mysql-workbench", match_querystring = True, body = """ """) httpretty.register_uri(httpretty.GET, APIURL + "/search/owner?binary=mysql-workbench", match_querystring = True, body = """ """) self.checker.requests = [] self.checker.set_request_ids_search_review() self.checker.check_requests() self.assertTrue(result['devel_review_added']) def test_non_maintainer_double_review(self): httpretty.register_uri(httpretty.GET, APIURL + '/search/request', body = """ review by devel project Request created ... Request got a new review request ... """) httpretty.register_uri(httpretty.GET, APIURL + "/request/261355", match_querystring = True, body = """ review by devel project Request created ... Request got a new review request ... """) httpretty.register_uri(httpretty.GET, APIURL + "/source/home:brassh/mysql-workbench", match_querystring = True, body = """ """) result = { 'devel_review_added': None } def change_request(result, method, uri, headers): u = urlparse(uri) if u.query == 'by_package=mysql-workbench&cmd=addreview&by_project=server%3Adatabase': result['devel_review_added'] = True return (200, headers, '') httpretty.register_uri(httpretty.POST, APIURL + "/request/261355", body = lambda method, uri, headers: change_request(result, method, uri, headers)) httpretty.register_uri(httpretty.GET, APIURL + "/search/owner?project=openSUSE:13.2:Update&binary=mysql-workbench", match_querystring = True, body = """ """) httpretty.register_uri(httpretty.GET, APIURL + "/search/owner?binary=mysql-workbench", match_querystring = True, body = """ """) self.checker.requests = [] self.checker.set_request_ids_search_review() self.checker.check_requests() self.assertFalse(result['devel_review_added']) def test_backports_submit(self): httpretty.register_uri(httpretty.GET, APIURL + '/search/request', body = """ Request created test update test update """) httpretty.register_uri(httpretty.GET, APIURL + "/request/261411", body = """ Request created test update test update """) httpretty.register_uri(httpretty.GET, APIURL + "/source/home:lnussel:branches:openSUSE:Backports:SLE-12/plan", body = """ """) httpretty.register_uri(httpretty.GET, APIURL + '/search/owner', body = """ """) result = { 'factory_review_added': None } def change_request(result, method, uri, headers): query = parse_qs(urlparse(uri).query) if query == { 'cmd': ['addreview'], 'by_user': ['factory-source'] }: result['factory_review_added'] = True return (200, headers, '') httpretty.register_uri(httpretty.POST, APIURL + "/request/261411", body = lambda method, uri, headers: change_request(result, method, uri, headers)) self.checker.requests = [] self.checker.set_request_ids_search_review() self.checker.check_requests() self.assertTrue(result['factory_review_added']) if __name__ == '__main__': unittest.main()