annotate examples/trac/trac/web/tests/auth.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 from trac.test import EnvironmentStub, Mock
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 from trac.web.auth import LoginModule
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 from trac.web.href import Href
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 from Cookie import SimpleCookie as Cookie
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 import unittest
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 class LoginModuleTestCase(unittest.TestCase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 def setUp(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 self.env = EnvironmentStub()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 self.db = self.env.get_db_cnx()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 self.module = LoginModule(self.env)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16 def test_anonymous_access(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 req = Mock(incookie=Cookie(), href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18 remote_addr='127.0.0.1', remote_user=None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 self.assertEqual(None, self.module.authenticate(req))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21 def test_unknown_cookie_access(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 req = Mock(cgi_location='/trac', href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25 incookie=incookie, outcookie=Cookie(),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 remote_addr='127.0.0.1', remote_user=None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 self.assertEqual(None, self.module.authenticate(req))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 def test_known_cookie_access(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31 cursor.execute("INSERT INTO auth_cookie (cookie, name, ipnr) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 "VALUES ('123', 'john', '127.0.0.1')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 outcookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 req = Mock(incookie=incookie, outcookie=outcookie,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37 href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 remote_addr='127.0.0.1', remote_user=None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 self.assertEqual('john', self.module.authenticate(req))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 self.failIf('auth_cookie' in req.outcookie)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 def test_known_cookie_different_ipnr_access(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 cursor.execute("INSERT INTO auth_cookie (cookie, name, ipnr) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 "VALUES ('123', 'john', '127.0.0.1')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 outcookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 req = Mock(cgi_location='/trac', href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50 incookie=incookie, outcookie=outcookie,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 remote_addr='192.168.0.100', remote_user=None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 self.assertEqual(None, self.module.authenticate(req))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 self.failIf('trac_auth' not in req.outcookie)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 def test_known_cookie_ip_check_disabled(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 self.env.config.set('trac', 'check_auth_ip', 'no')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 cursor.execute("INSERT INTO auth_cookie (cookie, name, ipnr) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59 "VALUES ('123', 'john', '127.0.0.1')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 outcookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 req = Mock(incookie=incookie, outcookie=outcookie,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 remote_addr='192.168.0.100', remote_user=None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 self.assertEqual('john', self.module.authenticate(req))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 self.failIf('auth_cookie' in req.outcookie)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 def test_login(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 outcookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 # remote_user must be upper case to test that by default, case is
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 # preserved.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73 req = Mock(cgi_location='/trac', href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 incookie=Cookie(), outcookie=outcookie,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 remote_addr='127.0.0.1', remote_user='john', authname='john')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 self.module._do_login(req)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 assert outcookie.has_key('trac_auth'), '"trac_auth" Cookie not set'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 auth_cookie = outcookie['trac_auth'].value
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 cursor.execute("SELECT name,ipnr FROM auth_cookie WHERE cookie=%s",
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82 (auth_cookie,))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 row = cursor.fetchone()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 self.assertEquals('john', row[0])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 self.assertEquals('127.0.0.1', row[1])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87 def test_login_ignore_case(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 Test that login is succesful when the usernames differ in case, but case
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 is ignored.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 self.env.config.set('trac', 'ignore_auth_case', 'yes')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 outcookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 req = Mock(cgi_location='/trac', href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 incookie=Cookie(), outcookie=outcookie,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 remote_addr='127.0.0.1', remote_user='John',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 authname='anonymous')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 self.module._do_login(req)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101 assert outcookie.has_key('trac_auth'), '"trac_auth" Cookie not set'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 auth_cookie = outcookie['trac_auth'].value
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 cursor.execute("SELECT name,ipnr FROM auth_cookie WHERE cookie=%s",
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105 (auth_cookie,))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 row = cursor.fetchone()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 self.assertEquals('john', row[0])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 self.assertEquals('127.0.0.1', row[1])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 def test_login_no_username(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111 req = Mock(incookie=Cookie(), href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112 remote_addr='127.0.0.1', remote_user=None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 self.assertRaises(AssertionError, self.module._do_login, req)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 def test_already_logged_in_same_user(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 cursor.execute("INSERT INTO auth_cookie (cookie, name, ipnr) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 "VALUES ('123', 'john', '127.0.0.1')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
121 req = Mock(incookie=incookie, outcookie=Cookie(),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
122 href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
123 remote_addr='127.0.0.1', remote_user='john', authname='john')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
124 self.module._do_login(req) # this shouldn't raise an error
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
125
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
126 def test_already_logged_in_different_user(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
127 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
128 cursor.execute("INSERT INTO auth_cookie (cookie, name, ipnr) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
129 "VALUES ('123', 'john', '127.0.0.1')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
130 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
131 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
132 req = Mock(incookie=incookie, authname='john',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
133 href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
134 remote_addr='127.0.0.1', remote_user='tom')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
135 self.assertRaises(AssertionError, self.module._do_login, req)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
136
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
137 def test_logout(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
138 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
139 cursor.execute("INSERT INTO auth_cookie (cookie, name, ipnr) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
140 "VALUES ('123', 'john', '127.0.0.1')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
141 incookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
142 incookie['trac_auth'] = '123'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
143 outcookie = Cookie()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
144 req = Mock(cgi_location='/trac', href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
145 incookie=incookie, outcookie=outcookie,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
146 remote_addr='127.0.0.1', remote_user=None, authname='john')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
147 self.module._do_logout(req)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
148 self.failIf('trac_auth' not in outcookie)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
149 cursor.execute("SELECT name,ipnr FROM auth_cookie WHERE name='john'")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
150 self.failIf(cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
151
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
152 def test_logout_not_logged_in(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
153 req = Mock(cgi_location='/trac', href=Href('/trac.cgi'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
154 incookie=Cookie(), outcookie=Cookie(),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
155 remote_addr='127.0.0.1', remote_user=None,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
156 authname='anonymous')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
157 self.module._do_logout(req) # this shouldn't raise an error
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
158
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
159
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
160 def suite():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
161 return unittest.makeSuite(LoginModuleTestCase, 'test')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
162
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
163 if __name__ == '__main__':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
164 unittest.main()
Copyright (C) 2012-2017 Edgewall Software