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_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)
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::: """)
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::: """)