def test_open_webkit_committers_file(self):
     auth = CommitterAuth('path/to/auth.json')
     auth.webkit_committers_filename = lambda: 'webkit committers filename'
     self.fake_open_was_called = False
     with open_override(self.fake_open_function(auth.webkit_committers_filename())):
         auth.open_webkit_committers_file()
     self.assertTrue(self.fake_open_was_called)
 def test_fail_to_open_auth_json_file(self):
     def raise_IOError():
         raise IOError(2, 'No such file or directory', 'path/to/auth.json')
     auth = CommitterAuth('path/to/auth.json')
     auth.open_auth_json_file = raise_IOError
     self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
     self.assertEqual('Error opening auth.json file: No such file or directory', auth.errmsg())
 def test_open_trac_credentials_file(self):
     auth = CommitterAuth('path/to/auth.json')
     auth.trac_credentials_filename = lambda: 'trac credentials filename'
     self.fake_open_was_called = False
     with open_override(self.fake_open_function(auth.trac_credentials_filename())):
         auth.open_trac_credentials_file()
     self.assertTrue(self.fake_open_was_called)
Example #4
0
 def test_open_webkit_committers_file(self):
     auth = CommitterAuth('path/to/auth.json')
     auth.webkit_committers_filename = lambda: 'webkit committers filename'
     self.fake_open_was_called = False
     with open_override(
             self.fake_open_function(auth.webkit_committers_filename())):
         auth.open_webkit_committers_file()
     self.assertTrue(self.fake_open_was_called)
Example #5
0
 def test_open_trac_credentials_file(self):
     auth = CommitterAuth('path/to/auth.json')
     auth.trac_credentials_filename = lambda: 'trac credentials filename'
     self.fake_open_was_called = False
     with open_override(
             self.fake_open_function(auth.trac_credentials_filename())):
         auth.open_trac_credentials_file()
     self.assertTrue(self.fake_open_was_called)
Example #6
0
 def test_invalid_auth_json_file(self):
     auth = CommitterAuth('path/to/auth.json')
     auth.open_auth_json_file = self.invalid_auth_json_file
     self.assertFalse(
         auth.authenticate('*****@*****.**', 'committerpassword'))
     self.assertEqual(
         'Error parsing auth.json file: No JSON object could be decoded',
         auth.errmsg())
    def test_missing_auth_json_keys(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = lambda: CMStringIO('{ "trac_credentials": "path/to/trac/credentials" }')
        self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "webkit_committers" key', auth.errmsg())

        auth.open_auth_json_file = lambda: CMStringIO('{ "webkit_committers": "path/to/webkit/committers" }')
        auth.open_webkit_committers_file = self.fake_committers_file
        self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "trac_credentials" key', auth.errmsg())
Example #8
0
    def test_fail_to_open_auth_json_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory', 'path/to/auth.json')

        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = raise_IOError
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual(
            'Error opening auth.json file: No such file or directory',
            auth.errmsg())
Example #9
0
    def test_missing_auth_json_keys(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = lambda: CMStringIO(
            '{ "trac_credentials": "path/to/trac/credentials" }')
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "webkit_committers" key',
                         auth.errmsg())

        auth.open_auth_json_file = lambda: CMStringIO(
            '{ "webkit_committers": "path/to/webkit/committers" }')
        auth.open_webkit_committers_file = self.fake_committers_file
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "trac_credentials" key',
                         auth.errmsg())
 def setUp(self):
     self.auth = CommitterAuth('path/to/auth.json')
     self.auth.open_auth_json_file = self.fake_auth_json_file
     self.auth.open_webkit_committers_file = self.fake_committers_file
     self.auth.open_trac_credentials_file = self.fake_htdigest_file
class CommitterAuthTest(unittest.TestCase):
    def setUp(self):
        self.auth = CommitterAuth('path/to/auth.json')
        self.auth.open_auth_json_file = self.fake_auth_json_file
        self.auth.open_webkit_committers_file = self.fake_committers_file
        self.auth.open_trac_credentials_file = self.fake_htdigest_file

    def fake_open_function(self, expected_filename):
        def fake_open(name, mode='r'):
            self.fake_open_was_called = True
            self.assertEqual(expected_filename, name)
        return fake_open

    def test_authentication_success(self):
        self.assertTrue(self.auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('', self.auth.errmsg())
        self.assertTrue(self.auth.authenticate('*****@*****.**', 'committer2password'))
        self.assertEqual('', self.auth.errmsg())

    def test_committer_without_trac_credentials_fails(self):
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'committer3password'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_fail_to_open_auth_json_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory', 'path/to/auth.json')
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = raise_IOError
        self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Error opening auth.json file: No such file or directory', auth.errmsg())

    def test_fail_to_open_trac_credentials_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory', 'path/to/trac/credentials')
        self.auth.open_trac_credentials_file = raise_IOError
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Error opening Trac credentials file: No such file or directory', self.auth.errmsg())

    def test_fail_to_open_webkit_committers_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory', 'path/to/webkit/committers')
        self.auth.open_webkit_committers_file = raise_IOError
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Error opening WebKit committers file: No such file or directory', self.auth.errmsg())

    def test_implements_IAuth(self):
        self.assertTrue(buildbot.status.web.auth.IAuth.implementedBy(CommitterAuth))

    def test_invalid_auth_json_file(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = self.invalid_auth_json_file
        self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Error parsing auth.json file: No JSON object could be decoded', auth.errmsg())

    def test_invalid_committers_file(self):
        self.auth.open_webkit_committers_file = self.invalid_committers_file
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Error parsing WebKit committers file', self.auth.errmsg())

    def test_invalid_trac_credentials_file(self):
        self.auth.open_trac_credentials_file = self.invalid_htdigest_file
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Error parsing Trac credentials file', self.auth.errmsg())

    def test_missing_auth_json_keys(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = lambda: CMStringIO('{ "trac_credentials": "path/to/trac/credentials" }')
        self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "webkit_committers" key', auth.errmsg())

        auth.open_auth_json_file = lambda: CMStringIO('{ "webkit_committers": "path/to/webkit/committers" }')
        auth.open_webkit_committers_file = self.fake_committers_file
        self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "trac_credentials" key', auth.errmsg())

    def test_open_auth_json_file(self):
        auth = CommitterAuth('path/to/auth.json')
        self.fake_open_was_called = False
        with open_override(self.fake_open_function(auth.auth_json_filename())):
            auth.open_auth_json_file()
        self.assertTrue(self.fake_open_was_called)

    def test_open_trac_credentials_file(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.trac_credentials_filename = lambda: 'trac credentials filename'
        self.fake_open_was_called = False
        with open_override(self.fake_open_function(auth.trac_credentials_filename())):
            auth.open_trac_credentials_file()
        self.assertTrue(self.fake_open_was_called)

    def test_open_webkit_committers_file(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.webkit_committers_filename = lambda: 'webkit committers filename'
        self.fake_open_was_called = False
        with open_override(self.fake_open_function(auth.webkit_committers_filename())):
            auth.open_webkit_committers_file()
        self.assertTrue(self.fake_open_was_called)

    def test_non_committer_fails(self):
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'noncommitterpassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_trac_credentials_filename(self):
        self.assertEqual('path/to/trac/credentials', self.auth.trac_credentials_filename())

    def test_unknown_user_fails(self):
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'nobodypassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_username_is_prefix_of_valid_user(self):
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_webkit_committers(self):
        self.assertEqual(['*****@*****.**', '*****@*****.**', '*****@*****.**'], self.auth.webkit_committers())

    def test_webkit_committers_filename(self):
        self.assertEqual('path/to/webkit/committers', self.auth.webkit_committers_filename())

    def test_wrong_password_fails(self):
        self.assertFalse(self.auth.authenticate('*****@*****.**', 'wrongpassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def fake_auth_json_file(self):
        return CMStringIO("""{
    "trac_credentials": "path/to/trac/credentials",
    "webkit_committers": "path/to/webkit/committers"
}""")

    def invalid_auth_json_file(self):
        return CMStringIO('~!@#$%^&*()_+')

    def fake_committers_file(self):
        return CMStringIO("""[groups]
group1 = [email protected],[email protected]
group2 = [email protected]

group3 =
group4 =

webkit = [email protected],[email protected],[email protected]

[service:/]
*    = r
""")

    def invalid_committers_file(self):
        return CMStringIO("""[groups]

[[groups2]
""")

    def fake_htdigest_file(self):
        return CMStringIO("""[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
""")

    def invalid_htdigest_file(self):
        return CMStringIO("""[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
[email protected]:Mac OS Forge:::
""")
 def test_invalid_auth_json_file(self):
     auth = CommitterAuth('path/to/auth.json')
     auth.open_auth_json_file = self.invalid_auth_json_file
     self.assertFalse(auth.authenticate('*****@*****.**', 'committerpassword'))
     self.assertEqual('Error parsing auth.json file: No JSON object could be decoded', auth.errmsg())
Example #13
0
 def setUp(self):
     self.auth = CommitterAuth('path/to/auth.json')
     self.auth.open_auth_json_file = self.fake_auth_json_file
     self.auth.open_webkit_committers_file = self.fake_committers_file
     self.auth.open_trac_credentials_file = self.fake_htdigest_file
Example #14
0
class CommitterAuthTest(unittest.TestCase):
    def setUp(self):
        self.auth = CommitterAuth('path/to/auth.json')
        self.auth.open_auth_json_file = self.fake_auth_json_file
        self.auth.open_webkit_committers_file = self.fake_committers_file
        self.auth.open_trac_credentials_file = self.fake_htdigest_file

    def fake_open_function(self, expected_filename):
        def fake_open(name, mode='r'):
            self.fake_open_was_called = True
            self.assertEqual(expected_filename, name)

        return fake_open

    def test_authentication_success(self):
        self.assertTrue(
            self.auth.authenticate('*****@*****.**',
                                   'committerpassword'))
        self.assertEqual('', self.auth.errmsg())
        self.assertTrue(
            self.auth.authenticate('*****@*****.**',
                                   'committer2password'))
        self.assertEqual('', self.auth.errmsg())

    def test_committer_without_trac_credentials_fails(self):
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'committer3password'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_fail_to_open_auth_json_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory', 'path/to/auth.json')

        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = raise_IOError
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual(
            'Error opening auth.json file: No such file or directory',
            auth.errmsg())

    def test_fail_to_open_trac_credentials_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory',
                          'path/to/trac/credentials')

        self.auth.open_trac_credentials_file = raise_IOError
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'committerpassword'))
        self.assertEqual(
            'Error opening Trac credentials file: No such file or directory',
            self.auth.errmsg())

    def test_fail_to_open_webkit_committers_file(self):
        def raise_IOError():
            raise IOError(2, 'No such file or directory',
                          'path/to/webkit/committers')

        self.auth.open_webkit_committers_file = raise_IOError
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'committerpassword'))
        self.assertEqual(
            'Error opening WebKit committers file: No such file or directory',
            self.auth.errmsg())

    def test_implements_IAuth(self):
        self.assertTrue(
            buildbot.status.web.auth.IAuth.implementedBy(CommitterAuth))

    def test_invalid_auth_json_file(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = self.invalid_auth_json_file
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual(
            'Error parsing auth.json file: No JSON object could be decoded',
            auth.errmsg())

    def test_invalid_committers_file(self):
        self.auth.open_webkit_committers_file = self.invalid_committers_file
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'committerpassword'))
        self.assertEqual('Error parsing WebKit committers file',
                         self.auth.errmsg())

    def test_invalid_trac_credentials_file(self):
        self.auth.open_trac_credentials_file = self.invalid_htdigest_file
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'committerpassword'))
        self.assertEqual('Error parsing Trac credentials file',
                         self.auth.errmsg())

    def test_missing_auth_json_keys(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.open_auth_json_file = lambda: CMStringIO(
            '{ "trac_credentials": "path/to/trac/credentials" }')
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "webkit_committers" key',
                         auth.errmsg())

        auth.open_auth_json_file = lambda: CMStringIO(
            '{ "webkit_committers": "path/to/webkit/committers" }')
        auth.open_webkit_committers_file = self.fake_committers_file
        self.assertFalse(
            auth.authenticate('*****@*****.**', 'committerpassword'))
        self.assertEqual('auth.json file is missing "trac_credentials" key',
                         auth.errmsg())

    def test_open_auth_json_file(self):
        auth = CommitterAuth('path/to/auth.json')
        self.fake_open_was_called = False
        with open_override(self.fake_open_function(auth.auth_json_filename())):
            auth.open_auth_json_file()
        self.assertTrue(self.fake_open_was_called)

    def test_open_trac_credentials_file(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.trac_credentials_filename = lambda: 'trac credentials filename'
        self.fake_open_was_called = False
        with open_override(
                self.fake_open_function(auth.trac_credentials_filename())):
            auth.open_trac_credentials_file()
        self.assertTrue(self.fake_open_was_called)

    def test_open_webkit_committers_file(self):
        auth = CommitterAuth('path/to/auth.json')
        auth.webkit_committers_filename = lambda: 'webkit committers filename'
        self.fake_open_was_called = False
        with open_override(
                self.fake_open_function(auth.webkit_committers_filename())):
            auth.open_webkit_committers_file()
        self.assertTrue(self.fake_open_was_called)

    def test_non_committer_fails(self):
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'noncommitterpassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_trac_credentials_filename(self):
        self.assertEqual('path/to/trac/credentials',
                         self.auth.trac_credentials_filename())

    def test_unknown_user_fails(self):
        self.assertFalse(
            self.auth.authenticate('*****@*****.**', 'nobodypassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_username_is_prefix_of_valid_user(self):
        self.assertFalse(
            self.auth.authenticate('*****@*****.**',
                                   'committerpassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def test_webkit_committers(self):
        self.assertEqual([
            '*****@*****.**', '*****@*****.**',
            '*****@*****.**'
        ], self.auth.webkit_committers())

    def test_webkit_committers_filename(self):
        self.assertEqual('path/to/webkit/committers',
                         self.auth.webkit_committers_filename())

    def test_wrong_password_fails(self):
        self.assertFalse(
            self.auth.authenticate('*****@*****.**', 'wrongpassword'))
        self.assertEqual('Invalid username/password', self.auth.errmsg())

    def fake_auth_json_file(self):
        return CMStringIO("""{
    "trac_credentials": "path/to/trac/credentials",
    "webkit_committers": "path/to/webkit/committers"
}""")

    def invalid_auth_json_file(self):
        return CMStringIO('~!@#$%^&*()_+')

    def fake_committers_file(self):
        return CMStringIO("""[groups]
group1 = [email protected],[email protected]
group2 = [email protected]

group3 =
group4 =

webkit = [email protected],[email protected],[email protected]

[service:/]
*    = r
""")

    def invalid_committers_file(self):
        return CMStringIO("""[groups]

[[groups2]
""")

    def fake_htdigest_file(self):
        return CMStringIO(
            """[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
""")

    def invalid_htdigest_file(self):
        return CMStringIO(
            """[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
[email protected]:Mac OS Forge:::
""")
Example #15
0
 def test_open_auth_json_file(self):
     auth = CommitterAuth('path/to/auth.json')
     self.fake_open_was_called = False
     with open_override(self.fake_open_function(auth.auth_json_filename())):
         auth.open_auth_json_file()
     self.assertTrue(self.fake_open_was_called)