21
21
from repository .models .method import Method
22
22
23
23
class RepositoryTest (TestCase ):
24
+ def remove_if_exists (self , path ):
25
+ try :
26
+ os .remove (path )
27
+ except OSError , e :
28
+ # No file to be removed
29
+ pass
30
+
31
+
32
+
24
33
url = {
25
34
'index' : '/repository/' ,
26
35
'index_data' : '/repository/data/' ,
@@ -36,13 +45,16 @@ class RepositoryTest(TestCase):
36
45
'new_method' : '/repository/method/new/' ,
37
46
'new_data_review' : '/repository/data/new/review/test/' ,
38
47
'new_data_view' : '/repository/data/view/test/' ,
39
- }
48
+
49
+ 'new_data_review_generic' : '/repository/data/new/review/%s/' ,
50
+ 'new_data_view_generic' : '/repository/data/view/%s/' ,
51
+ }
40
52
minimal_data = {
41
53
'license' : '1' ,
42
54
'name' : 'test' ,
43
55
'summary' : 'summary' ,
44
56
'tags' : 'test, data' ,
45
- 'file' : open ('fixtures/breastcancer.txt' , 'r' ),
57
+ 'file' : open ('fixtures/breastcancer-small .txt' , 'r' ),
46
58
}
47
59
data_file_name = os .path .join (MEDIA_ROOT , 'data' , 'test.h5' )
48
60
data_file_name_src = os .path .join (MEDIA_ROOT , 'data' , 'breastcancer.txt' )
@@ -154,12 +166,7 @@ def test_new_data_user(self):
154
166
155
167
def test_new_data_user_approve (self ):
156
168
"""Post a new data set and approve"""
157
-
158
- try :
159
- os .remove (self .data_file_name )
160
- except OSError , e :
161
- # No file to be removed
162
- pass
169
+ self .remove_if_exists (self .data_file_name )
163
170
164
171
self .do_login ()
165
172
r = self .do_post ('new_data' , self .minimal_data , follow = True )
@@ -229,28 +236,47 @@ def test_tags_with_comma(self):
229
236
230
237
231
238
class PerformenceTest (RepositoryTest ):
232
- def add_data (self ):
233
- try :
234
- os .remove (self .data_file_name )
235
- except OSError , e :
236
- # No file to be removed
237
- pass
238
-
239
+ def add_data (self , suffix = '' ):
239
240
self .do_login ()
240
- r = self .do_post ('new_data' , self .minimal_data , follow = True )
241
+ data = self .minimal_data .copy ()
242
+
243
+ data ['name' ] = data ['name' ] + suffix
244
+ self .remove_if_exists (os .path .join (MEDIA_ROOT , 'data' , data ['name' ] + ".h5" ))
245
+ r = self .client .post (self .url ['new_data' ],
246
+ data ,
247
+ follow = True )
241
248
242
249
self .minimal_data ['file' ].seek (0 )
243
250
self .assertTemplateUsed (r , 'data/data_new_review.html' )
244
- r = self .do_post ('new_data_review' , self .review_data_approve , follow = True )
251
+ r = self .client .post (self .url ['new_data_review_generic' ] % data ['name' ],
252
+ self .review_data_approve ,
253
+ follow = True )
245
254
self .assertTemplateUsed (r , 'data/item_view.html' )
246
255
247
256
def test_view_data_queries (self ):
248
257
from django .conf import settings
249
258
from django .db import connection
250
259
260
+ self .remove_if_exists (self .data_file_name )
251
261
settings .DEBUG = True
252
262
self .add_data ()
253
263
connection .queries = []
254
264
r = self .do_post ('new_data_view' , {}, follow = True )
255
265
self .assertLess (len (connection .queries ), 5 , "More than 5 queries executed during simple data view" )
256
- settings .DEBUG = False
266
+ settings .DEBUG = False
267
+
268
+ def test_view_many_datasets (self ):
269
+ from django .conf import settings
270
+ from django .db import connection
271
+
272
+ for i in xrange (1 , 100 ):
273
+ self .add_data (i .__str__ ())
274
+
275
+ import time
276
+ start = time .time ()
277
+ settings .DEBUG = True
278
+ connection .queries = []
279
+ r = self .do_post ('new_data_view' , {}, follow = True )
280
+ self .assertLess (len (connection .queries ), 5 , "More than 5 queries executed during simple data view" )
281
+ settings .DEBUG = False
282
+ self .assertLess (time .time () - start , 1000 , "Slow response ( > 1 sek)" )
0 commit comments