import os import unittest import logging import httpretty import osc import re try: from urllib.parse import urlparse except ImportError: # python 2.x from urlparse import urlparse from check_maintenance_incidents import MaintenanceChecker APIURL = 'https://maintenancetest.example.com' FIXTURES = os.path.join(os.getcwd(), 'tests/fixtures') def rr(s): return re.compile(re.escape(APIURL + s)) class TestMaintenance(unittest.TestCase): def setUp(self): """ Initialize the configuration """ httpretty.reset() httpretty.enable() oscrc = os.path.join(FIXTURES, 'oscrc') osc.core.conf.get_config(override_conffile=oscrc, override_no_keyring=True, override_no_gnome_keyring=True) #osc.conf.config['debug'] = 1 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, rr("/search/request?withfullhistory=1&match=state%2F%40name%3D%27review%27+and+review%5B%40by_user%3D%27maintbot%27+and+%40state%3D%27new%27%5D"), match_querystring = True, 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): 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.assertTrue(result['devel_review_added']) def test_non_maintainer_double_review(self): httpretty.register_uri(httpretty.GET, rr("/search/request?withfullhistory=1&match=state%2F%40name%3D%27review%27+and+review%5B%40by_user%3D%27maintbot%27+and+%40state%3D%27new%27%5D"), match_querystring = True, 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, rr("/search/request?withfullhistory=1&match=state%2F%40name%3D%27review%27+and+review%5B%40by_user%3D%27maintbot%27+and+%40state%3D%27new%27%5D"), match_querystring = True, 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?project=openSUSE:Backports:SLE-12&binary=plan", match_querystring = True, body = """ """) httpretty.register_uri(httpretty.GET, APIURL + "/search/owner?binary=plan", match_querystring = True, body = """ """) result = { 'factory_review_added' : None } def change_request(result, method, uri, headers): u = urlparse(uri) if u.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()