1 import unittest, time, os, datetime
2 import tempfile
3
4
5 from webgateway.webgateway_cache import FileCache, WebGatewayCache
6 from webgateway import views
7 import omero
8 from omero.gateway.scripts.testdb_create import *
9
10 from django.test.client import Client
11 from django.core.handlers.wsgi import WSGIRequest
12 from django.conf import settings
13 from django.http import QueryDict
14
15
16
17
18
19
20
21 CLIENT_BASE='test'
22
24 def bogus_request(self, **request):
25 """
26 The master request method. Composes the environment dictionary
27 and passes to the handler, returning the result of the handler.
28 Assumes defaults for the query environment, which can be overridden
29 using the arguments to the request.
30 """
31 environ = {
32 'HTTP_COOKIE': self.cookies,
33 'PATH_INFO': '/',
34 'QUERY_STRING': '',
35 'REQUEST_METHOD': 'GET',
36 'SCRIPT_NAME': '',
37 'SERVER_NAME': 'testserver',
38 'SERVER_PORT': '80',
39 'SERVER_PROTOCOL': 'HTTP/1.1',
40 'HTTP_HOST': 'localhost',
41 'wsgi.version': (1,0),
42 'wsgi.url_scheme': 'http',
43 'wsgi.errors': None,
44 'wsgi.multiprocess': True,
45 'wsgi.multithread': False,
46 'wsgi.run_once': False,
47 }
48 environ.update(self.defaults)
49 environ.update(request)
50 r = WSGIRequest(environ)
51 if 'django.contrib.sessions' in settings.INSTALLED_APPS:
52 engine = __import__(settings.SESSION_ENGINE, {}, {}, [''])
53 r.session = engine.SessionStore()
54 qlen = len(r.REQUEST.dicts)
55 def setQuery (**query):
56 r.REQUEST.dicts = r.REQUEST.dicts[:qlen]
57 q = QueryDict('', mutable=True)
58 q.update(query)
59 r.REQUEST.dicts += (q,)
60 r.setQuery = setQuery
61 return r
62 Client.bogus_request = bogus_request
63 c = Client()
64 return c.bogus_request(**kwargs)
65
77
80 ColorHolder = omero.gateway.ColorHolder
81 c1 = ColorHolder()
82 self.assertEqual(c1._color, {'red': 0, 'green': 0,'blue': 0, 'alpha': 255})
83 c1 = ColorHolder('blue')
84 self.assertEqual(c1.getHtml(), '0000FF')
85 self.assertEqual(c1.getCss(), 'rgba(0,0,255,1.000)')
86 self.assertEqual(c1.getRGB(), (0,0,255))
87 c1.setRed(0xF0)
88 self.assertEqual(c1.getCss(), 'rgba(240,0,255,1.000)')
89 c1.setGreen(0x0F)
90 self.assertEqual(c1.getCss(), 'rgba(240,15,255,1.000)')
91 c1.setBlue(0)
92 self.assertEqual(c1.getCss(), 'rgba(240,15,0,1.000)')
93 c1.setAlpha(0x7F)
94 self.assertEqual(c1.getCss(), 'rgba(240,15,0,0.498)')
95 c1 = ColorHolder.fromRGBA(50,100,200,300)
96 self.assertEqual(c1.getCss(), 'rgba(50,100,200,1.000)')
97
105
107 splitHTMLColor = omero.gateway.splitHTMLColor
108 self.assertEqual(splitHTMLColor('abc'), [0xAA, 0xBB, 0xCC, 0xFF])
109 self.assertEqual(splitHTMLColor('abcd'), [0xAA, 0xBB, 0xCC, 0xDD])
110 self.assertEqual(splitHTMLColor('abbccd'), [0xAB, 0xBC, 0xCD, 0xFF])
111 self.assertEqual(splitHTMLColor('abbccdde'), [0xAB, 0xBC, 0xCD, 0xDE])
112 self.assertEqual(splitHTMLColor('#$%&%'), None)
113
114
122
126
128 os.system('rm -fr test_cache')
129
131 self.assertEqual(self.cache.get('date/test/1'), None, 'Key already exists in cache')
132 self.cache.set('date/test/1', '1', 3)
133 self.assertEqual(self.cache.get('date/test/1'), '1', 'Key not properly cached')
134 time.sleep(4)
135 self.assertEqual(self.cache.get('date/test/1'), None, 'Timeout failed')
136
138 empty_size, cache_block = _testCacheFSBlockSize(self.cache)
139 self.cache._max_size = empty_size + 4*cache_block + 1
140
141
142 for i in range(6):
143 self.cache.set('date/test/%d' % i, 'abcdefgh'*127*cache_block)
144 for i in range(4):
145 self.assertEqual(self.cache.get('date/test/%d' % i), 'abcdefgh'*127*cache_block,
146 'Key %d not properly cached' % i)
147 self.assertEqual(self.cache.get('date/test/5'), None, 'Size limit failed')
148
150 self.cache._max_entries = 2
151 self.cache.set('date/test/1', '1')
152 self.cache.set('date/test/2', '2')
153 self.cache.set('date/test/3', '3')
154 self.assertEqual(self.cache.get('date/test/1'), '1', 'Key not properly cached')
155 self.assertEqual(self.cache.get('date/test/2'), '2', 'Key not properly cached')
156 self.assertEqual(self.cache.get('date/test/3'), None, 'File number limit failed')
157
159 self.cache._max_entries = 2
160 self.cache._default_timeout = 3
161 self.cache.set('date/test/1', '1')
162 self.cache.set('date/test/2', '2')
163 self.cache.set('date/test/3', '3')
164 self.assertEqual(self.cache.get('date/test/1'), '1', 'Key not properly cached')
165 self.assertEqual(self.cache.get('date/test/2'), '2', 'Key not properly cached')
166 self.assertEqual(self.cache.get('date/test/3'), None, 'File number limit failed')
167 time.sleep(4)
168 self.cache.set('date/test/3', '3')
169 self.assertEqual(self.cache.get('date/test/3'), '3', 'Purge not working')
170
172
173 self.assertRaises(ValueError, self.cache.set, 'date/test/1', 123)
174
175 self.assertRaises(ValueError, self.cache.set, '/date/test/1', '1')
176 self.assertRaises(ValueError, self.cache.set, 'date/test/../1', '1')
177
178 self.cache.set('date/test/1', '1')
179 self.cache.set('date/test/2', '2')
180 self.cache.set('date/test/3', '3')
181 self.assertEqual(self.cache.get('date/test/1'), '1', 'Key not properly cached')
182 self.assertEqual(self.cache.get('date/test/2'), '2', 'Key not properly cached')
183 self.assertEqual(self.cache.get('date/test/3'), '3', 'Key not properly cached')
184
185 self.assert_(self.cache.has_key('date/test/1'))
186 self.assert_(not self.cache.has_key('date/test/bogus'))
187
188 self.assertEqual(self.cache._num_entries, 3)
189 self.cache.wipe()
190 self.assertEqual(self.cache._num_entries, 0)
191
194 self.wcache = WebGatewayCache(backend=FileCache, basedir='test_cache')
195 class r:
196 def __init__ (self):
197 self.REQUEST = {'c':'1|292:1631$FF0000,2|409:5015$0000FF','m':'c', 'q':'0.9'}
198 def new (self, q):
199 rv = self.__class__()
200 rv.REQUEST.update(q)
201 return rv
202 self.request = r()
203
205 os.system('rm -fr test_cache')
206
208 uid = 123
209 empty_size, cache_block = _testCacheFSBlockSize(self.wcache._thumb_cache)
210 max_size = empty_size + 4 * cache_block + 1
211 self.wcache._updateCacheSettings(self.wcache._thumb_cache, timeout=2, max_entries=5, max_size=max_size )
212 for i in range(6):
213 self.wcache.setThumb(self.request, 'test', uid, i, 'abcdefgh'*127*cache_block)
214 for i in range(4):
215 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, i), 'abcdefgh'*127*cache_block,
216 'Key %d not properly cached' % i)
217 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 5), None, 'Size limit failed')
218 for i in range(10):
219 self.wcache.setThumb(self.request, 'test', uid, i, 'abcdefgh')
220 for i in range(5):
221 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, i), 'abcdefgh', 'Key %d not properly cached' % i)
222 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 5), None, 'Entries limit failed')
223 time.sleep(2)
224 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 0), None, 'Time limit failed')
225
227 uid = 123
228 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), None)
229 self.wcache.setThumb(self.request, 'test', uid, 1, 'thumbdata')
230 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), 'thumbdata',
231 'Thumb not properly cached (%s)' % self.wcache.getThumb(self.request, 'test', uid, 1))
232 self.wcache.clearThumb(self.request, 'test', uid, 1)
233 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), None)
234
235 self.wcache.setThumb(self.request, 'test', uid, 1, 'thumbdata')
236 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), 'thumbdata', 'Thumb not properly cached')
237 self.assertNotEqual(self.wcache._thumb_cache._num_entries, 0)
238 self.wcache.clear()
239 self.assertEqual(self.wcache._thumb_cache._num_entries, 0)
240
242 uid = 123
243
244 preq = self.request.new({'p':'intmax'})
245 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), None)
246 self.wcache.setThumb(self.request, 'test', uid, 1, 'thumbdata')
247 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), 'thumbdata')
248 img = omero.gateway.ImageWrapper(None, omero.model.ImageI(1,False))
249 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), None)
250 self.wcache.setImage(self.request, 'test', img, 2, 3, 'imagedata')
251 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), 'imagedata')
252 self.assertEqual(self.wcache.getImage(preq, 'test', img, 2, 3), None)
253 self.wcache.setImage(preq, 'test', img, 2, 3, 'imagedata')
254 self.assertEqual(self.wcache.getImage(preq, 'test', img, 2, 3), 'imagedata')
255 self.assertEqual(self.wcache.getSplitChannelImage(self.request, 'test', img, 2, 3), None)
256 self.wcache.setSplitChannelImage(self.request, 'test', img, 2, 3, 'imagedata')
257 self.assertEqual(self.wcache.getSplitChannelImage(self.request, 'test', img, 2, 3), 'imagedata')
258 self.wcache.clearImage(self.request, 'test', uid, img)
259 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), None)
260 self.assertEqual(self.wcache.getSplitChannelImage(self.request, 'test', img, 2, 3), None)
261 self.assertEqual(self.wcache.getImage(preq, 'test', img, 2, 3), None)
262 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), None)
263
264 self.wcache.setThumb(self.request, 'test', uid, 1, 'thumbdata')
265 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), 'thumbdata')
266 self.wcache.setImage(self.request, 'test', img, 2, 3, 'imagedata')
267 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), 'imagedata')
268 self.assertEqual(self.wcache.getImage(preq, 'test', img, 2, 3), None)
269 self.wcache.setImage(preq, 'test', img, 2, 3, 'imagedata')
270 self.assertEqual(self.wcache.getImage(preq, 'test', img, 2, 3), 'imagedata')
271 self.assertEqual(self.wcache.getSplitChannelImage(self.request, 'test', img, 2, 3), None)
272 self.wcache.setSplitChannelImage(self.request, 'test', img, 2, 3, 'imagedata')
273 self.assertEqual(self.wcache.getSplitChannelImage(self.request, 'test', img, 2, 3), 'imagedata')
274 self.wcache.invalidateObject('test', uid, img)
275 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), None)
276 self.assertEqual(self.wcache.getSplitChannelImage(self.request, 'test', img, 2, 3), None)
277 self.assertEqual(self.wcache.getImage(preq, 'test', img, 2, 3), None)
278 self.assertEqual(self.wcache.getThumb(self.request, 'test', uid, 1), None)
279
280 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), None)
281 self.wcache.setImage(self.request, 'test', img, 2, 3, 'imagedata')
282 self.assertEqual(self.wcache.getImage(self.request, 'test', img, 2, 3), 'imagedata')
283 self.assertNotEqual(self.wcache._img_cache._num_entries, 0)
284 self.wcache.clear()
285 self.assertEqual(self.wcache._img_cache._num_entries, 0)
286
296
298 uid = 123
299 ds = omero.gateway.DatasetWrapper(None, omero.model.DatasetI(1,False))
300 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), None)
301 self.wcache.setDatasetContents(self.request, 'test', ds, 'datasetdata')
302 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), 'datasetdata')
303 self.wcache.clearDatasetContents(self.request, 'test', ds)
304 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), None)
305
306 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), None)
307 self.wcache.setDatasetContents(self.request, 'test', ds, 'datasetdata')
308 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), 'datasetdata')
309 self.wcache.invalidateObject('test', uid, ds)
310 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), None)
311
312 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), None)
313 self.wcache.setDatasetContents(self.request, 'test', ds, 'datasetdata')
314 self.assertEqual(self.wcache.getDatasetContents(self.request, 'test', ds), 'datasetdata')
315 self.assertNotEqual(self.wcache._json_cache._num_entries, 0)
316 self.wcache.clear()
317 self.assertEqual(self.wcache._json_cache._num_entries, 0)
318
319
320
331
341
342
350