1
# Copyright (C) 2007-2010 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Tests for Launchpad user ID management functions."""
19
from bzrlib import config
20
from bzrlib.tests import TestCaseInTempDir, TestCaseWithMemoryTransport
21
from bzrlib.plugins.launchpad import account
24
class LaunchpadAccountTests(TestCaseInTempDir):
26
def test_get_lp_login_unconfigured(self):
27
# Test that get_lp_login() returns None if no username has
29
my_config = config.MemoryStack('')
30
self.assertEqual(None, account.get_lp_login(my_config))
32
def test_get_lp_login(self):
33
# Test that get_lp_login() returns the configured username
34
my_config = config.MemoryStack(
35
'[DEFAULT]\nlaunchpad_username=test-user\n')
36
self.assertEqual('test-user', account.get_lp_login(my_config))
38
def test_set_lp_login(self):
39
# Test that set_lp_login() updates the config file.
40
my_config = config.MemoryStack('')
41
self.assertEqual(None, my_config.get('launchpad_username'))
42
account.set_lp_login('test-user', my_config)
44
'test-user', my_config.get('launchpad_username'))
46
def test_unknown_launchpad_username(self):
47
# Test formatting of UnknownLaunchpadUsername exception
48
error = account.UnknownLaunchpadUsername(user='test-user')
49
self.assertEqualDiff('The user name test-user is not registered '
50
'on Launchpad.', str(error))
52
def test_no_registered_ssh_keys(self):
53
# Test formatting of NoRegisteredSSHKeys exception
54
error = account.NoRegisteredSSHKeys(user='test-user')
55
self.assertEqualDiff('The user test-user has not registered any '
56
'SSH keys with Launchpad.\n'
57
'See <https://launchpad.net/people/+me>',
60
def test_set_lp_login_updates_authentication_conf(self):
61
self.assertIs(None, account._get_auth_user())
62
account.set_lp_login('foo')
63
self.assertEqual('foo', account._get_auth_user())
65
def test_get_lp_login_does_not_update_for_none_user(self):
66
account.get_lp_login()
67
self.assertIs(None, account._get_auth_user())
69
def test_get_lp_login_updates_authentication_conf(self):
70
account._set_global_option('foo')
71
self.assertIs(None, account._get_auth_user())
72
account.get_lp_login()
73
auth = config.AuthenticationConfig()
74
self.assertEqual('foo', account._get_auth_user(auth))
75
self.assertEqual('foo', auth.get_user('ssh', 'bazaar.launchpad.net'))
76
self.assertEqual('foo', auth.get_user('ssh',
77
'bazaar.staging.launchpad.net'))
79
def test_get_lp_login_leaves_existing_credentials(self):
80
auth = config.AuthenticationConfig()
81
auth.set_credentials('Foo', 'bazaar.launchpad.net', 'foo', 'ssh')
82
auth.set_credentials('Bar', 'bazaar.staging.launchpad.net', 'foo',
84
account._set_global_option('foo')
85
account.get_lp_login()
86
auth = config.AuthenticationConfig()
87
credentials = auth.get_credentials('ssh', 'bazaar.launchpad.net')
88
self.assertEqual('Foo', credentials['name'])
90
def test_get_lp_login_errors_on_mismatch(self):
91
account._set_auth_user('foo')
92
account._set_global_option('bar')
93
e = self.assertRaises(account.MismatchedUsernames,
95
self.assertEqual('bazaar.conf and authentication.conf disagree about'
96
' launchpad account name. Please re-run launchpad-login.', str(e))
99
class CheckAccountTests(TestCaseWithMemoryTransport):
101
def test_check_lp_login_valid_user(self):
102
transport = self.get_transport()
103
transport.mkdir('~test-user')
104
transport.put_bytes('~test-user/+sshkeys', 'some keys here')
105
account.check_lp_login('test-user', transport)
107
def test_check_lp_login_no_user(self):
108
transport = self.get_transport()
109
self.assertRaises(account.UnknownLaunchpadUsername,
110
account.check_lp_login, 'test-user', transport)
112
def test_check_lp_login_no_ssh_keys(self):
113
transport = self.get_transport()
114
transport.mkdir('~test-user')
115
transport.put_bytes('~test-user/+sshkeys', '')
116
self.assertRaises(account.NoRegisteredSSHKeys,
117
account.check_lp_login, 'test-user', transport)