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