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()