~canonical-django/canonical-django/project-template

« back to all changes in this revision

Viewing changes to trunk/python-packages/django/contrib/sessions/tests.py

  • Committer: Matthew Nuzum
  • Date: 2008-11-13 05:46:03 UTC
  • Revision ID: matthew.nuzum@canonical.com-20081113054603-v0kvr6z6xyexvqt3
adding to version control

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
r"""
 
2
 
 
3
>>> from django.conf import settings
 
4
>>> from django.contrib.sessions.backends.db import SessionStore as DatabaseSession
 
5
>>> from django.contrib.sessions.backends.cache import SessionStore as CacheSession
 
6
>>> from django.contrib.sessions.backends.file import SessionStore as FileSession
 
7
>>> from django.contrib.sessions.backends.base import SessionBase
 
8
>>> from django.contrib.sessions.models import Session
 
9
 
 
10
>>> db_session = DatabaseSession()
 
11
>>> db_session.modified
 
12
False
 
13
>>> db_session.get('cat')
 
14
>>> db_session['cat'] = "dog"
 
15
>>> db_session.modified
 
16
True
 
17
>>> db_session.pop('cat')
 
18
'dog'
 
19
>>> db_session.pop('some key', 'does not exist')
 
20
'does not exist'
 
21
>>> db_session.save()
 
22
>>> db_session.exists(db_session.session_key)
 
23
True
 
24
>>> db_session.delete(db_session.session_key)
 
25
>>> db_session.exists(db_session.session_key)
 
26
False
 
27
 
 
28
>>> db_session['foo'] = 'bar'
 
29
>>> db_session.save()
 
30
>>> db_session.exists(db_session.session_key)
 
31
True
 
32
>>> prev_key = db_session.session_key
 
33
>>> db_session.flush()
 
34
>>> db_session.exists(prev_key)
 
35
False
 
36
>>> db_session.session_key == prev_key
 
37
False
 
38
>>> db_session.modified, db_session.accessed
 
39
(True, True)
 
40
>>> db_session['a'], db_session['b'] = 'c', 'd'
 
41
>>> db_session.save()
 
42
>>> prev_key = db_session.session_key
 
43
>>> prev_data = db_session.items()
 
44
>>> db_session.cycle_key()
 
45
>>> db_session.session_key == prev_key
 
46
False
 
47
>>> db_session.items() == prev_data
 
48
True
 
49
 
 
50
# Submitting an invalid session key (either by guessing, or if the db has
 
51
# removed the key) results in a new key being generated.
 
52
>>> Session.objects.filter(pk=db_session.session_key).delete()
 
53
>>> db_session = DatabaseSession(db_session.session_key)
 
54
>>> db_session.save()
 
55
>>> DatabaseSession('1').get('cat')
 
56
 
 
57
>>> file_session = FileSession()
 
58
>>> file_session.modified
 
59
False
 
60
>>> file_session['cat'] = "dog"
 
61
>>> file_session.modified
 
62
True
 
63
>>> file_session.pop('cat')
 
64
'dog'
 
65
>>> file_session.pop('some key', 'does not exist')
 
66
'does not exist'
 
67
>>> file_session.save()
 
68
>>> file_session.exists(file_session.session_key)
 
69
True
 
70
>>> file_session.delete(file_session.session_key)
 
71
>>> file_session.exists(file_session.session_key)
 
72
False
 
73
>>> FileSession('1').get('cat')
 
74
 
 
75
>>> file_session['foo'] = 'bar'
 
76
>>> file_session.save()
 
77
>>> file_session.exists(file_session.session_key)
 
78
True
 
79
>>> prev_key = file_session.session_key
 
80
>>> file_session.flush()
 
81
>>> file_session.exists(prev_key)
 
82
False
 
83
>>> file_session.session_key == prev_key
 
84
False
 
85
>>> file_session.modified, file_session.accessed
 
86
(True, True)
 
87
>>> file_session['a'], file_session['b'] = 'c', 'd'
 
88
>>> file_session.save()
 
89
>>> prev_key = file_session.session_key
 
90
>>> prev_data = file_session.items()
 
91
>>> file_session.cycle_key()
 
92
>>> file_session.session_key == prev_key
 
93
False
 
94
>>> file_session.items() == prev_data
 
95
True
 
96
 
 
97
>>> Session.objects.filter(pk=file_session.session_key).delete()
 
98
>>> file_session = FileSession(file_session.session_key)
 
99
>>> file_session.save()
 
100
 
 
101
# Make sure the file backend checks for a good storage dir
 
102
>>> settings.SESSION_FILE_PATH = "/if/this/directory/exists/you/have/a/weird/computer"
 
103
>>> FileSession()
 
104
Traceback (innermost last):
 
105
    ...
 
106
ImproperlyConfigured: The session storage path '/if/this/directory/exists/you/have/a/weird/computer' doesn't exist. Please set your SESSION_FILE_PATH setting to an existing directory in which Django can store session data.
 
107
 
 
108
>>> cache_session = CacheSession()
 
109
>>> cache_session.modified
 
110
False
 
111
>>> cache_session['cat'] = "dog"
 
112
>>> cache_session.modified
 
113
True
 
114
>>> cache_session.pop('cat')
 
115
'dog'
 
116
>>> cache_session.pop('some key', 'does not exist')
 
117
'does not exist'
 
118
>>> cache_session.save()
 
119
>>> cache_session.delete(cache_session.session_key)
 
120
>>> cache_session.exists(cache_session.session_key)
 
121
False
 
122
>>> cache_session['foo'] = 'bar'
 
123
>>> cache_session.save()
 
124
>>> cache_session.exists(cache_session.session_key)
 
125
True
 
126
>>> prev_key = cache_session.session_key
 
127
>>> cache_session.flush()
 
128
>>> cache_session.exists(prev_key)
 
129
False
 
130
>>> cache_session.session_key == prev_key
 
131
False
 
132
>>> cache_session.modified, cache_session.accessed
 
133
(True, True)
 
134
>>> cache_session['a'], cache_session['b'] = 'c', 'd'
 
135
>>> cache_session.save()
 
136
>>> prev_key = cache_session.session_key
 
137
>>> prev_data = cache_session.items()
 
138
>>> cache_session.cycle_key()
 
139
>>> cache_session.session_key == prev_key
 
140
False
 
141
>>> cache_session.items() == prev_data
 
142
True
 
143
 
 
144
>>> Session.objects.filter(pk=cache_session.session_key).delete()
 
145
>>> cache_session = CacheSession(cache_session.session_key)
 
146
>>> cache_session.save()
 
147
>>> CacheSession('1').get('cat')
 
148
 
 
149
>>> s = SessionBase()
 
150
>>> s._session['some key'] = 'exists' # Pre-populate the session with some data
 
151
>>> s.accessed = False   # Reset to pretend this wasn't accessed previously
 
152
 
 
153
>>> s.accessed, s.modified
 
154
(False, False)
 
155
 
 
156
>>> s.pop('non existant key', 'does not exist')
 
157
'does not exist'
 
158
>>> s.accessed, s.modified
 
159
(True, False)
 
160
 
 
161
>>> s.setdefault('foo', 'bar')
 
162
'bar'
 
163
>>> s.setdefault('foo', 'baz')
 
164
'bar'
 
165
 
 
166
>>> s.accessed = False  # Reset the accessed flag
 
167
 
 
168
>>> s.pop('some key')
 
169
'exists'
 
170
>>> s.accessed, s.modified
 
171
(True, True)
 
172
 
 
173
>>> s.pop('some key', 'does not exist')
 
174
'does not exist'
 
175
 
 
176
 
 
177
>>> s.get('update key', None)
 
178
 
 
179
# test .update()
 
180
>>> s.modified = s.accessed = False   # Reset to pretend this wasn't accessed previously
 
181
>>> s.update({'update key':1})
 
182
>>> s.accessed, s.modified
 
183
(True, True)
 
184
>>> s.get('update key', None)
 
185
1
 
186
 
 
187
# test .has_key()
 
188
>>> s.modified = s.accessed = False   # Reset to pretend this wasn't accessed previously
 
189
>>> s.has_key('update key')
 
190
True
 
191
>>> s.accessed, s.modified
 
192
(True, False)
 
193
 
 
194
# test .values()
 
195
>>> s = SessionBase()
 
196
>>> s.values()
 
197
[]
 
198
>>> s.accessed
 
199
True
 
200
>>> s['x'] = 1
 
201
>>> s.values()
 
202
[1]
 
203
 
 
204
# test .iterkeys()
 
205
>>> s.accessed = False
 
206
>>> i = s.iterkeys()
 
207
>>> hasattr(i,'__iter__')
 
208
True
 
209
>>> s.accessed
 
210
True
 
211
>>> list(i)
 
212
['x']
 
213
 
 
214
# test .itervalues()
 
215
>>> s.accessed = False
 
216
>>> i = s.itervalues()
 
217
>>> hasattr(i,'__iter__')
 
218
True
 
219
>>> s.accessed
 
220
True
 
221
>>> list(i)
 
222
[1]
 
223
 
 
224
# test .iteritems()
 
225
>>> s.accessed = False
 
226
>>> i = s.iteritems()
 
227
>>> hasattr(i,'__iter__')
 
228
True
 
229
>>> s.accessed
 
230
True
 
231
>>> list(i)
 
232
[('x', 1)]
 
233
 
 
234
# test .clear()
 
235
>>> s.modified = s.accessed = False
 
236
>>> s.items()
 
237
[('x', 1)]
 
238
>>> s.clear()
 
239
>>> s.items()
 
240
[]
 
241
>>> s.accessed, s.modified
 
242
(True, True)
 
243
 
 
244
#########################
 
245
# Custom session expiry #
 
246
#########################
 
247
 
 
248
>>> from django.conf import settings
 
249
>>> from datetime import datetime, timedelta
 
250
 
 
251
>>> td10 = timedelta(seconds=10)
 
252
 
 
253
# A normal session has a max age equal to settings
 
254
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
 
255
True
 
256
 
 
257
# So does a custom session with an idle expiration time of 0 (but it'll expire
 
258
# at browser close)
 
259
>>> s.set_expiry(0)
 
260
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
 
261
True
 
262
 
 
263
# Custom session idle expiration time
 
264
>>> s.set_expiry(10)
 
265
>>> delta = s.get_expiry_date() - datetime.now()
 
266
>>> delta.seconds in (9, 10)
 
267
True
 
268
>>> age = s.get_expiry_age()
 
269
>>> age in (9, 10)
 
270
True
 
271
 
 
272
# Custom session fixed expiry date (timedelta)
 
273
>>> s.set_expiry(td10)
 
274
>>> delta = s.get_expiry_date() - datetime.now()
 
275
>>> delta.seconds in (9, 10)
 
276
True
 
277
>>> age = s.get_expiry_age()
 
278
>>> age in (9, 10)
 
279
True
 
280
 
 
281
# Custom session fixed expiry date (fixed datetime)
 
282
>>> s.set_expiry(datetime.now() + td10)
 
283
>>> delta = s.get_expiry_date() - datetime.now()
 
284
>>> delta.seconds in (9, 10)
 
285
True
 
286
>>> age = s.get_expiry_age()
 
287
>>> age in (9, 10)
 
288
True
 
289
 
 
290
# Set back to default session age
 
291
>>> s.set_expiry(None)
 
292
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
 
293
True
 
294
 
 
295
# Allow to set back to default session age even if no alternate has been set
 
296
>>> s.set_expiry(None)
 
297
 
 
298
 
 
299
# We're changing the setting then reverting back to the original setting at the
 
300
# end of these tests.
 
301
>>> original_expire_at_browser_close = settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
 
302
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False
 
303
 
 
304
# Custom session age
 
305
>>> s.set_expiry(10)
 
306
>>> s.get_expire_at_browser_close()
 
307
False
 
308
 
 
309
# Custom expire-at-browser-close
 
310
>>> s.set_expiry(0)
 
311
>>> s.get_expire_at_browser_close()
 
312
True
 
313
 
 
314
# Default session age
 
315
>>> s.set_expiry(None)
 
316
>>> s.get_expire_at_browser_close()
 
317
False
 
318
 
 
319
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True
 
320
 
 
321
# Custom session age
 
322
>>> s.set_expiry(10)
 
323
>>> s.get_expire_at_browser_close()
 
324
False
 
325
 
 
326
# Custom expire-at-browser-close
 
327
>>> s.set_expiry(0)
 
328
>>> s.get_expire_at_browser_close()
 
329
True
 
330
 
 
331
# Default session age
 
332
>>> s.set_expiry(None)
 
333
>>> s.get_expire_at_browser_close()
 
334
True
 
335
 
 
336
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = original_expire_at_browser_close
 
337
"""
 
338
 
 
339
if __name__ == '__main__':
 
340
    import doctest
 
341
    doctest.testmod()