def __init__(self, cal, fallback, team_name, people=None): super(Calendar, self).__init__() self.cal = cal self.people = People() if people is None else people self.fallback = fallback self.fb_bzmail = self.people.get_bzmail_from_name(self.fallback) self.fb_mozmail = self.people.get_moz_mail(self.fb_bzmail) self.team_name = team_name self.cache = {}
def __init__(self): super(Nag, self).__init__() self.people = People() self.send_nag_mail = True self.data = {} self.nag_date = None self.white_list = [] self.black_list = [] self.escalation = Escalation(self.people) self.triage_owners = {} self.all_owners = None self.query_params = {}
def __init__(self): super(CodeFreezeWeek, self).__init__() self.versions = utils.get_checked_versions() if not self.versions: return self.people = People() self.nightly = self.versions['central'] self.beta = self.versions['beta'] self.release = self.versions['release'] self.status_nightly = utils.get_flag(self.nightly, 'status', 'central') self.status_beta = utils.get_flag(self.beta, 'status', 'beta') self.status_release = utils.get_flag(self.release, 'status', 'release') self.tracking_nightly = utils.get_flag(self.nightly, 'tracking', 'central') self.tracking_beta = utils.get_flag(self.beta, 'tracking', 'beta') self.tracking_release = utils.get_flag(self.release, 'tracking', 'release')
def __init__(self): super(LeaveOpenNoActivity, self).__init__() self.people = People() self.nmonths = utils.get_config(self.name(), 'months_lookup') self.max_ni = utils.get_config(self.name(), 'max_ni') self.skiplist = set(utils.get_config(self.name(), 'skiplist', []))
def __init__(self): super(NewbieWithNI, self).__init__() self.people = People() self.ndays = utils.get_config(self.name(), 'number_of_days', 14) self.ncomments = utils.get_config(self.name(), 'number_of_comments', 2) self.autofix_reporters = {}
def __init__(self, rr=None, people=None): self.feed(rr=rr) self.nicks = {} self.people = People() if people is None else people
class TestRoundRobin(unittest.TestCase): default = { "duty-start-dates": { "2019-02-14": "A B", "2019-02-21": "C D", "2019-02-28": "E F", } } special = { "duty-start-dates": { "2019-02-14": "E F", "2019-02-21": "A B", "2019-02-28": "C D", } } config = { "fallback": "G H", "components": {"P1::C1": "default", "P2::C2": "default", "P3::C3": "special"}, "default": {"calendar": json.dumps(default)}, "special": {"calendar": json.dumps(special)}, } config_ics = { "fallback": "G H", "components": {"P1::C1": "default", "P2::C2": "default"}, "default": {"calendar": "auto_nag/tests/calendar.ics"}, } people = People( [ { "mail": "{}{}@mozilla.com".format(x, y), "cn": "{} {}".format(x.upper(), y.upper()), "ismanager": "FALSE", "title": "nothing", } for x, y in zip("aceg", "bdfh") ] ) def mk_bug(self, pc): p, c = pc.split("::") return { "product": p, "component": c, "triage_owner": "*****@*****.**", "triage_owner_detail": {"nick": "ij"}, } @staticmethod def _get_nick(x, bzmail, pc, cal): return bzmail.split("@")[0] def test_get(self): with patch.object(RoundRobin, "get_nick", new=TestRoundRobin._get_nick): rr = RoundRobin( rr={"team": TestRoundRobin.config}, people=TestRoundRobin.people ) assert rr.get(self.mk_bug("P1::C1"), "2019-02-17") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P2::C2"), "2019-02-17") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P3::C3"), "2019-02-17") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P1::C1"), "2019-02-24") == ( "*****@*****.**", "cd", ) assert rr.get(self.mk_bug("P2::C2"), "2019-02-24") == ( "*****@*****.**", "cd", ) assert rr.get(self.mk_bug("P3::C3"), "2019-02-24") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P1::C1"), "2019-02-28") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P2::C2"), "2019-02-28") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P3::C3"), "2019-02-28") == ( "*****@*****.**", "cd", ) assert rr.get(self.mk_bug("P1::C1"), "2019-03-05") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P2::C2"), "2019-03-05") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P3::C3"), "2019-03-05") == ( "*****@*****.**", "cd", ) assert rr.get(self.mk_bug("P1::C1"), "2019-03-08") == ( "*****@*****.**", "gh", ) assert rr.get(self.mk_bug("P2::C2"), "2019-03-08") == ( "*****@*****.**", "gh", ) assert rr.get(self.mk_bug("P3::C3"), "2019-03-08") == ( "*****@*****.**", "gh", ) assert rr.get(self.mk_bug("Foo::Bar"), "2019-03-01") == ( "*****@*****.**", "ij", ) def test_get_ics(self): with patch.object(RoundRobin, "get_nick", new=TestRoundRobin._get_nick): rr = RoundRobin( rr={"team": TestRoundRobin.config_ics}, people=TestRoundRobin.people ) assert rr.get(self.mk_bug("P1::C1"), "2019-02-17") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P2::C2"), "2019-02-17") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P1::C1"), "2019-02-24") == ( "*****@*****.**", "cd", ) assert rr.get(self.mk_bug("P2::C2"), "2019-02-24") == ( "*****@*****.**", "cd", ) assert rr.get(self.mk_bug("P1::C1"), "2019-02-28") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P2::C2"), "2019-02-28") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P1::C1"), "2019-03-05") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P2::C2"), "2019-03-05") == ( "*****@*****.**", "ef", ) assert rr.get(self.mk_bug("P1::C1"), "2019-03-08") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P2::C2"), "2019-03-08") == ( "*****@*****.**", "ab", ) assert rr.get(self.mk_bug("P1::C1"), "2019-03-15") == ( "*****@*****.**", "gh", ) assert rr.get(self.mk_bug("P2::C2"), "2019-03-15") == ( "*****@*****.**", "gh", ) assert rr.get(self.mk_bug("Foo::Bar"), "2019-03-01") == ( "*****@*****.**", "ij", ) def test_get_who_to_nag(self): rr = RoundRobin( rr={"team": TestRoundRobin.config}, people=TestRoundRobin.people ) empty = {"team": {"nobody": True, "persons": []}} assert rr.get_who_to_nag("2019-02-25") == {} assert rr.get_who_to_nag("2019-03-01") == {"*****@*****.**": empty} assert rr.get_who_to_nag("2019-03-05") == {"*****@*****.**": empty} assert rr.get_who_to_nag("2019-03-07") == {"*****@*****.**": empty} assert rr.get_who_to_nag("2019-03-10") == {"*****@*****.**": empty} with patch.object(People, "get_moz_mail", return_value=None): rr = RoundRobin( rr={"team": TestRoundRobin.config}, people=TestRoundRobin.people ) self.assertRaises(BadFallback, rr.get_who_to_nag, "2019-03-01")
def __init__(self): super(HasSTRNoRange, self).__init__() self.people = People() self.autofix_reporters = {}
def __init__(self, rr=None, people=None, teams=None): self.people = People() if people is None else people self.all_calendars = [] self.feed(teams, rr=rr) self.nicks = {}
class TestRoundRobin(unittest.TestCase): config = { 'doc': 'The triagers need to have a \'Fallback\' entry.', 'triagers': { 'A B': { 'bzmail': '*****@*****.**' }, 'C D': { 'bzmail': '*****@*****.**' }, 'E F': { 'bzmail': '*****@*****.**' }, 'Fallback': { 'bzmail': '*****@*****.**' }, }, 'components': { 'P1::C1': 'default', 'P2::C2': 'default', 'P3::C3': 'special' }, 'default': { 'doc': 'All the dates are the duty end dates.', '2019-02-21': 'A B', '2019-02-28': 'C D', '2019-03-07': 'E F', }, 'special': { 'doc': 'All the dates are the duty end dates.', '2019-02-21': 'E F', '2019-02-28': 'A B', '2019-03-07': 'C D', }, } people = People([{ 'mail': '*****@*****.**', 'cn': 'G H', 'ismanager': 'FALSE', 'title': 'nothing', }]) def mk_bug(self, pc): p, c = pc.split('::') return { 'product': p, 'component': c, 'triage_owner': '*****@*****.**', 'triage_owner_detail': { 'nick': 'ij' }, } @staticmethod def _get_nick(x, bzmail): return bzmail.split('@')[0] def test_get(self): with patch.object(RoundRobin, 'get_nick', new=TestRoundRobin._get_nick): rr = RoundRobin(rr={'team': TestRoundRobin.config}, people=TestRoundRobin.people) assert rr.get(self.mk_bug('P1::C1'), '2019-02-17') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-17') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P3::C3'), '2019-02-17') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P1::C1'), '2019-02-24') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-24') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P3::C3'), '2019-02-24') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P1::C1'), '2019-02-28') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-28') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P3::C3'), '2019-02-28') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P1::C1'), '2019-03-05') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P2::C2'), '2019-03-05') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P3::C3'), '2019-03-05') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P1::C1'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('P2::C2'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('P3::C3'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('Foo::Bar'), '2019-03-01') == ( '*****@*****.**', 'ij', ) def test_get_who_to_nag(self): rr = RoundRobin(rr={'team': TestRoundRobin.config}, people=TestRoundRobin.people) assert rr.get_who_to_nag('2019-02-25') == {} assert rr.get_who_to_nag('2019-02-28') == {'*****@*****.**': ['']} assert rr.get_who_to_nag('2019-03-05') == {'*****@*****.**': ['']} assert rr.get_who_to_nag('2019-03-07') == {'*****@*****.**': ['']} assert rr.get_who_to_nag('2019-03-10') == {'*****@*****.**': ['']} with patch.object(RoundRobin, 'is_mozilla', return_value=False): rr = RoundRobin(rr={'team': TestRoundRobin.config}, people=TestRoundRobin.people) self.assertRaises(BadFallback, rr.get_who_to_nag, '2019-03-01')
class TestRoundRobin(unittest.TestCase): default = { 'duty-start-dates': { '2019-02-14': 'A B', '2019-02-21': 'C D', '2019-02-28': 'E F', } } special = { 'duty-start-dates': { '2019-02-14': 'E F', '2019-02-21': 'A B', '2019-02-28': 'C D', } } config = { 'fallback': 'G H', 'components': { 'P1::C1': 'default', 'P2::C2': 'default', 'P3::C3': 'special' }, 'default': { 'calendar': json.dumps(default) }, 'special': { 'calendar': json.dumps(special) }, } config_ics = { 'fallback': 'G H', 'components': { 'P1::C1': 'default', 'P2::C2': 'default' }, 'default': { 'calendar': 'auto_nag/tests/calendar.ics' }, } people = People([{ 'mail': '{}{}@mozilla.com'.format(x, y), 'cn': '{} {}'.format(x.upper(), y.upper()), 'ismanager': 'FALSE', 'title': 'nothing', } for x, y in zip('aceg', 'bdfh')]) def mk_bug(self, pc): p, c = pc.split('::') return { 'product': p, 'component': c, 'triage_owner': '*****@*****.**', 'triage_owner_detail': { 'nick': 'ij' }, } @staticmethod def _get_nick(x, bzmail): return bzmail.split('@')[0] def test_get(self): with patch.object(RoundRobin, 'get_nick', new=TestRoundRobin._get_nick): rr = RoundRobin(rr={'team': TestRoundRobin.config}, people=TestRoundRobin.people) assert rr.get(self.mk_bug('P1::C1'), '2019-02-17') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-17') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P3::C3'), '2019-02-17') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P1::C1'), '2019-02-24') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-24') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P3::C3'), '2019-02-24') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P1::C1'), '2019-02-28') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-28') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P3::C3'), '2019-02-28') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P1::C1'), '2019-03-05') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P2::C2'), '2019-03-05') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P3::C3'), '2019-03-05') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P1::C1'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('P2::C2'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('P3::C3'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('Foo::Bar'), '2019-03-01') == ( '*****@*****.**', 'ij', ) def test_get_ics(self): with patch.object(RoundRobin, 'get_nick', new=TestRoundRobin._get_nick): rr = RoundRobin(rr={'team': TestRoundRobin.config_ics}, people=TestRoundRobin.people) assert rr.get(self.mk_bug('P1::C1'), '2019-02-17') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-17') == ( '*****@*****.**', 'ab', ) assert rr.get(self.mk_bug('P1::C1'), '2019-02-24') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-24') == ( '*****@*****.**', 'cd', ) assert rr.get(self.mk_bug('P1::C1'), '2019-02-28') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P2::C2'), '2019-02-28') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P1::C1'), '2019-03-05') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P2::C2'), '2019-03-05') == ( '*****@*****.**', 'ef', ) assert rr.get(self.mk_bug('P1::C1'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('P2::C2'), '2019-03-08') == ( '*****@*****.**', 'gh', ) assert rr.get(self.mk_bug('Foo::Bar'), '2019-03-01') == ( '*****@*****.**', 'ij', ) def test_get_who_to_nag(self): rr = RoundRobin(rr={'team': TestRoundRobin.config}, people=TestRoundRobin.people) empty = {'team': {'nobody': True, 'persons': []}} assert rr.get_who_to_nag('2019-02-25') == {} assert rr.get_who_to_nag('2019-03-01') == {'*****@*****.**': empty} assert rr.get_who_to_nag('2019-03-05') == {'*****@*****.**': empty} assert rr.get_who_to_nag('2019-03-07') == {'*****@*****.**': empty} assert rr.get_who_to_nag('2019-03-10') == {'*****@*****.**': empty} with patch.object(People, 'get_moz_mail', return_value=None): rr = RoundRobin(rr={'team': TestRoundRobin.config}, people=TestRoundRobin.people) self.assertRaises(BadFallback, rr.get_who_to_nag, '2019-03-01')
def __init__(self): super(MetaNoDepsNoActivity, self).__init__() self.people = People() self.nmonths = utils.get_config(self.name(), 'months_lookup') self.max_ni = utils.get_config(self.name(), 'max_ni') self.blacklist = set(utils.get_config(self.name(), 'blacklist', []))
def test_escalation(self): people = [ { "mail": "*****@*****.**", "cn": "A B", "ismanager": "FALSE", "manager": { "dn": "[email protected],o=org,dc=mozilla" }, "title": "nothing", }, { "mail": "*****@*****.**", "cn": "C D", "ismanager": "TRUE", "manager": { "dn": "[email protected],o=org,dc=mozilla" }, "title": "manager", }, { "mail": "*****@*****.**", "cn": "E F", "ismanager": "TRUE", "manager": { "dn": "[email protected],o=org,dc=mozilla" }, "title": "super manager", }, { "mail": "*****@*****.**", "cn": "G H", "ismanager": "TRUE", "manager": { "dn": "[email protected],o=org,dc=mozilla" }, "title": "super manager", }, { "mail": "*****@*****.**", "cn": "I J", "ismanager": "TRUE", "manager": { "dn": "[email protected],o=org,dc=mozilla" }, "title": "director", }, { "mail": "*****@*****.**", "cn": "K L", "ismanager": "TRUE", "title": "vice president", }, ] e = Escalation(People(people), data=TestEscalation.config) assert (e.get_supervisor( "high", 35, "*****@*****.**", foobar="*****@*****.**") == "*****@*****.**") assert e.get_supervisor("high", 25, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("high", 20, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("high", 18, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("high", 7, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("high", 1, "*****@*****.**") == "*****@*****.**" assert e.filter("high", 25, 0) is False assert e.filter("high", 25, 3) is True assert e.filter("high", 18, 0) is True assert e.filter("high", 18, 1) is False assert e.filter("high", 18, 3) is True assert e.filter("high", 18, 5) is False assert e.filter("high", 7, 1) is False assert e.filter("high", 7, 3) is True assert e.filter("high", 7, 5) is False assert e.filter("high", 1, 1) is True assert e.filter("high", 1, 3) is True assert e.filter("high", 1, 4) is True assert e.filter("high", 7, 5) is False assert e.get_supervisor("normal", 17, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("normal", 15, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("normal", 12, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("normal", 7, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("normal", 1, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("default", 17, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("default", 7, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("default", 1, "*****@*****.**") == "*****@*****.**" assert e.get_supervisor("default", 0, "*****@*****.**") == "*****@*****.**"
def test_escalation(self): people = [ { 'mail': '*****@*****.**', 'cn': 'A B', 'ismanager': 'FALSE', 'manager': { 'dn': '[email protected],o=org,dc=mozilla' }, 'title': 'nothing', }, { 'mail': '*****@*****.**', 'cn': 'C D', 'ismanager': 'TRUE', 'manager': { 'dn': '[email protected],o=org,dc=mozilla' }, 'title': 'manager', }, { 'mail': '*****@*****.**', 'cn': 'E F', 'ismanager': 'TRUE', 'manager': { 'dn': '[email protected],o=org,dc=mozilla' }, 'title': 'super manager', }, { 'mail': '*****@*****.**', 'cn': 'G H', 'ismanager': 'TRUE', 'manager': { 'dn': '[email protected],o=org,dc=mozilla' }, 'title': 'super manager', }, { 'mail': '*****@*****.**', 'cn': 'I J', 'ismanager': 'TRUE', 'manager': { 'dn': '[email protected],o=org,dc=mozilla' }, 'title': 'director', }, { 'mail': '*****@*****.**', 'cn': 'K L', 'ismanager': 'TRUE', 'title': 'vice president', }, ] e = Escalation(People(people), data=TestEscalation.config) assert e.get_supervisor( 'high', 35, '*****@*****.**', foobar='*****@*****.**') == '*****@*****.**' assert e.get_supervisor('high', 25, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('high', 20, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('high', 18, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('high', 7, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('high', 1, '*****@*****.**') == '*****@*****.**' assert e.filter('high', 25, 0) == False assert e.filter('high', 25, 3) == True assert e.filter('high', 18, 0) == True assert e.filter('high', 18, 1) == False assert e.filter('high', 18, 3) == True assert e.filter('high', 18, 5) == False assert e.filter('high', 7, 1) == False assert e.filter('high', 7, 3) == True assert e.filter('high', 7, 5) == False assert e.filter('high', 1, 1) == True assert e.filter('high', 1, 3) == True assert e.filter('high', 1, 4) == True assert e.filter('high', 7, 5) == False assert e.get_supervisor('normal', 17, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('normal', 15, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('normal', 12, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('normal', 7, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('normal', 1, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('default', 17, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('default', 7, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('default', 1, '*****@*****.**') == '*****@*****.**' assert e.get_supervisor('default', 0, '*****@*****.**') == '*****@*****.**'