blob: efd205cd950d196e3eda1e02f70fe99809dc4940 [file] [log] [blame]
#/usr/bin/python
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for BugDroid"""
import datetime
import os
import time
import unittest
from bugdroid import Bugdroid
class TestBugDroid(unittest.TestCase):
def get_password(self):
parent = os.path.abspath(os.path.dirname(__file__))
password_path = os.path.join(parent, '.bugdroid_password')
return open(password_path, 'r').readline().strip()
def test_single_bug(self):
""" Test single issue BUG=1234"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=1234', 'foo')
self.assertEqual('foo:1234', bugs[0])
def test_multiple_default_tracker(self):
""" Test multiple issues, default tracker BUG=1234,456,789"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=1234, 5678,890', 'foo')
self.assertEqual(['foo:1234', 'foo:5678', 'foo:890'], bugs)
def test_bugs_with_text(self):
""" Test issues with text BUG=1234,789 fixes the issue"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=1234,789 fixes the issue', 'foo')
self.assertEqual(['foo:1234', 'foo:789'], bugs)
def test_bugs_with_multiple_trackers(self):
""" Test multiple issues and trackers BUG=1234,goo:789, 891, goo:23"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=1234, goo:789, 891, goo:23', 'foo')
self.assertEqual(['foo:1234', 'goo:23', 'goo:789', 'goo:891'], bugs)
def test_bugs_with_multiple_lines(self):
""" Test multiple issues and trackers BUG=1234\nBUG=234\nBUG=goo:789"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=1234\nBUG=234\nBUG=goo:789', 'foo')
self.assertEqual(['foo:1234', 'foo:234', 'goo:789',], bugs)
def test_bugs_with_embedded_text(self):
""" Test multiple issues and trackers BUG=123 fixes login, 456"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=123 fixes login, 456', 'foo')
self.assertEqual(['foo:123', 'foo:456',], bugs)
def test_bugs_with_multiple_trackers_shorthand(self):
""" Test multiple issues and trackers BUG=1234, 456,goo:78 89 90, 12"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=1234, 456,goo:78 89 90, 12', 'foo')
self.assertEqual(['foo:1234', 'foo:456', 'goo:12', 'goo:78', 'goo:89',
'goo:90'], bugs)
def test_bugs_with_multiple_trackers_space_delmited(self):
""" Test multiple issues and trackers BUG=foo:12 foo:34 goo:45 goo:56"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=foo:12 foo:34 goo:45 goo:56', 'foo')
self.assertEqual(['foo:12', 'foo:34', 'goo:45', 'goo:56'], bugs)
def test_bugs_with_mix_match_and_text(self):
""" Test mix and match with text BUG=12 fix bug goo:45, foo:14 goo:56, 9"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=12 fix bug goo:45, foo:14 goo:56, 9',
'foo')
self.assertEqual(['foo:12', 'foo:14', 'goo:45', 'goo:56', 'goo:9'], bugs)
def test_bugs_with_dashes_in_tracker_name(self):
""" Test mix and match with text BUG=90, foo-bar:123, goo:45, 67 89"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=90, foo-bar:123, goo:45, 67 89', 'foo')
self.assertEqual(['foo-bar:123', 'foo:90', 'goo:45', 'goo:67', 'goo:89'],
bugs)
def test_bugs_with_URL(self):
""" Test with URLs http://...id=13 foo:67 89 """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id(
'BUG=http://code.google.com/p/goo/issues/detail?id=13, foo:67 89', 'goo')
self.assertEqual(['foo:67', 'foo:89', 'goo:13'], bugs)
def test_bugs_with_http_URLs(self):
""" Test with URLs http://..goo..id=13 67 89 foo:45 http://..poo..97"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id(
'BUG=http://code.google.com/p/goo/issues/detail?id=13, 67 89 foo:45' +
' http://code.google.com/p/poo/issues/detail?id=97', 'foo')
self.assertEqual(['foo:45', 'goo:13', 'goo:67', 'goo:89', 'poo:97'], bugs)
def test_bugs_with_https_URLs(self):
""" Test with URLs https://..goo..id=13 67 89 foo:45 https://..poo..97"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id(
'BUG=https://code.google.com/p/goo/issues/detail?id=13, 67 89 foo:45' +
' https://code.google.com/p/poo/issues/detail?id=97', 'foo')
self.assertEqual(['foo:45', 'goo:13', 'goo:67', 'goo:89', 'poo:97'], bugs)
def test_bugs_with_http_and_https_URLs(self):
""" Test with URLs https://..goo..id=13 67 89 foo:45 http://..poo..97"""
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id(
'BUG=https://code.google.com/p/goo/issues/detail?id=13, 67 89 foo:45' +
' http://code.google.com/p/poo/issues/detail?id=97', 'foo')
self.assertEqual(['foo:45', 'goo:13', 'goo:67', 'goo:89', 'poo:97'], bugs)
def test_tracker_synonyms(self):
""" Test the synonym matcher """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=chromeos:123, crbug:123, ' +
'crosbug.com/p:123', 'chromium-os')
self.assertEqual(['chrome-os-partner:123', 'chromium-os:123',
'chromium:123'], bugs)
def test_tracker_synonyms_mix(self):
""" Test the synonym matcher with valid trackers and synonyms """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
bugs = test_droid._get_bug_id('BUG=crosbug.com:123, cr:123, ' +
'chrome-os-partner:123', 'chromium-os')
self.assertEqual(['chrome-os-partner:123', 'chromium-os:123',
'chromium:123'], bugs)
def test_git_svn_no_update_when_tracker_in_ignore_list(self):
""" Test that git-svn updates for blacklisted trackers are not updated """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password(),
svn_trackers_to_ignore=['chromium', 'nativeclient'])
bugs = test_droid._get_bug_id('BUG=123\n' +
'git-svn-id: svn://svn.chromium.org/'
'chromium/trunk/src@107288 0039d316-1c4b-428',
'chromium-os')
self.assertEqual([], bugs)
def test_git_svn_no_update_when_multiple_tracker_in_ignore_list(self):
""" Test multiple git-svn updates for blacklisted trackers not updated """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password(),
svn_trackers_to_ignore=['chromium', 'nativeclient'])
bugs = test_droid._get_bug_id('BUG=123,chromium:456,chromium:789\n' +
'git-svn-id: svn://svn.chromium.org/'
'chromium/trunk/src@107288 0039d316-1c4b-428',
'chromium-os')
self.assertEqual([], bugs)
def test_git_svn_update_explicit(self):
""" Test that git-svn updates with the tracker set are updated """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password(),
svn_trackers_to_ignore=['chromium', 'nativeclient'])
bugs = test_droid._get_bug_id('BUG=123,chromium-os:234\n' +
'git-svn-id: svn://svn.chromium.org/'
'chromium/trunk/src@107288 0039d316-1c4b-428',
'chromium-os')
self.assertEqual(['chromium-os:234'], bugs)
def test_git_svn_multiple_update_explicit(self):
""" Test that git-svn multiple updates with the tracker set are updated """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password(),
svn_trackers_to_ignore=['chromium', 'nativeclient'])
bugs = test_droid._get_bug_id('BUG=123,chromium-os:234,456\n' +
'git-svn-id: svn://svn.chromium.org/'
'chromium/trunk/src@107288 0039d316-1c4b-428',
'chromium-os')
self.assertEqual(['chromium-os:234', 'chromium-os:456'], bugs)
def test_git_svn_webrtc_no_update(self):
""" Test the git-svn webrtc changes do not update bugs """
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password(),
svn_trackers_to_ignore=['chromium', 'webrtc'])
bugs = test_droid._get_bug_id('BUG=123,456\n' +
'git-svn-id: http://webrtc.googlecode.com/'
'svn/trunk/src@1768 '
'4adac7df-926f-26a2-2b94-8c16560cd09d',
'chromium-os')
self.assertEqual([], bugs)
def test_not_adding_duplicate_entries(self):
""" Test if the exact comment already exists we don't add it again """
# Note: This test requires a .bugdroid_password file with the password
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
test_droid.login()
timestamp = time.mktime(datetime.datetime.now().timetuple())
new_comment = 'unittest updating bug with message %f' % timestamp
result = test_droid.update_bug('chromium-os:8540', new_comment)
self.assertEqual(0, result, 'The bug should have been updated')
result = test_droid.update_bug('chromium-os:8540', new_comment)
self.assertEqual(-1, result, 'The bug should not have been updated')
def test_multiline_duplicate_entries(self):
""" Test if comments different by newlines or whitespace are not added """
# Note: This test requires a .bugdroid_password file with the password
test_droid = Bugdroid('bugdroid1@chromium.org', self.get_password())
test_droid.login()
timestamp = time.mktime(datetime.datetime.now().timetuple())
new_comment = 'unittest updating bug\n\n with message %f \n' % timestamp
result = test_droid.update_bug('chromium-os:8540', new_comment)
self.assertEqual(0, result, 'The bug should have been updated')
diff_comment = 'unittest updating bug\n\n with message %f \n' % timestamp
result = test_droid.update_bug('chromium-os:8540', new_comment)
self.assertEqual(-1, result, 'The bug should not have been updated')
diff_comment = 'unittest updating bug\n\nwith message %f \n' % timestamp
result = test_droid.update_bug('chromium-os:8540', new_comment)
self.assertEqual(-1, result, 'The bug should not have been updated')
diff_comment = '\n\nunittest updating bug\nwith message %f \n\n' % timestamp
result = test_droid.update_bug('chromium-os:8540', new_comment)
self.assertEqual(-1, result, 'The bug should not have been updated')
if __name__ == '__main__':
unittest.main()