source: main/waeup.sirp/trunk/src/waeup/sirp/tests/test_imagestorage.py @ 6526

Last change on this file since 6526 was 6520, checked in by uli, 14 years ago

Add tests for image storage. The image storage is not yet activated in
fresh universities.

File size: 8.1 KB
Line 
1import os
2import tempfile
3import shutil
4import unittest
5from hurry.file.interfaces import IFileRetrieval
6from zope.component.hooks import setSite, clearSite
7from zope.interface.verify import verifyClass, verifyObject
8from waeup.sirp.app import University
9from waeup.sirp.testing import FunctionalLayer, FunctionalTestCase
10from waeup.sirp.imagestorage import (
11    md5digest, Basket, ImageStorage, ImageStorageFileRetrieval,)
12
13class HelperFuncsTests(unittest.TestCase):
14
15    def setUp(self):
16        self.workdir = tempfile.mkdtemp()
17
18    def tearDown(self):
19        shutil.rmtree(self.workdir)
20
21    def test_md5digest(self):
22        samplefile = os.path.join(self.workdir, 'sample')
23        open(samplefile, 'wb').write('blah')
24        fp = open(samplefile, 'r')
25        digest = md5digest(fp)
26        self.assertEqual(digest, '6f1ed002ab5595859014ebf0951522d9')
27
28class BasketTests(FunctionalTestCase):
29
30    layer = FunctionalLayer
31
32    def setUp(self):
33        super(BasketTests, self).setUp()
34        self.workdir = tempfile.mkdtemp()
35        self.samplefile = os.path.join(self.workdir, 'sample')
36        open(self.samplefile, 'wb').write('Hi there!')
37        self.basket = Basket()
38        self.fd = open(self.samplefile, 'r')
39
40    def tearDown(self):
41        super(BasketTests, self).tearDown()
42        self.fd.close()
43        shutil.rmtree(self.workdir)
44        self.basket._del() # Remove subojects explicitly
45        del self.basket
46        return
47
48    def test_ifaces(self):
49        pass
50
51    def test_curr_id_empty(self):
52        curr_id = self.basket.curr_id
53        self.assertEqual(curr_id, '1')
54
55    def test_getInternalId_empty(self):
56        basket_id = self.basket.getInternalId(self.fd)
57        self.assertTrue(basket_id is None)
58
59    def test_storeFile_single(self):
60        basket_id = self.basket.storeFile(self.fd, 'sample')
61        self.assertEqual(basket_id, '1')
62
63    def test_storeFile_double(self):
64        basket_id1 = self.basket.storeFile(self.fd, 'sample')
65        basket_id2 = self.basket.storeFile(self.fd, 'sample')
66        self.assertTrue(basket_id1 == basket_id2 == '1')
67
68    def test_retrieveFile(self):
69        basket_id = self.basket.storeFile(self.fd, 'sample')
70        fd = self.basket.retrieveFile(basket_id)
71        result = fd.read()
72        self.assertEqual(result, 'Hi there!')
73
74    def test_retrieveFile_not_existent(self):
75        result = self.basket.retrieveFile('not-a-valid-basket-id')
76        self.assertTrue(result is None)
77
78class ImageStorageTests(FunctionalTestCase):
79
80    layer = FunctionalLayer
81
82    def setUp(self):
83        super(ImageStorageTests, self).setUp()
84        self.workdir = tempfile.mkdtemp()
85        self.samplefile = os.path.join(self.workdir, 'sample')
86        self.otherfile = os.path.join(self.workdir, 'other')
87        open(self.samplefile, 'wb').write('Hi there!')
88        open(self.otherfile, 'wb').write('Hi from other!')
89        self.storage = ImageStorage()
90        self.fd = open(self.samplefile, 'r')
91        self.fd2 = open(self.otherfile, 'r')
92
93    def tearDown(self):
94        super(ImageStorageTests, self).tearDown()
95        self.fd.close()
96        self.fd2.close()
97        shutil.rmtree(self.workdir)
98        self.storage._del() # Remove subojects explicitly
99        del self.storage
100        return
101
102    def test_ifaces(self):
103        pass
104
105    def test_storeFile(self):
106        full_id = self.storage.storeFile(self.fd, 'sample.txt')
107        self.assertEqual(full_id, '396199333edbf40ad43e62a1c1397793-1')
108
109    def test_storeFile_duplicate(self):
110        full_id1 = self.storage.storeFile(self.fd, 'sample1.txt')
111        full_id2 = self.storage.storeFile(self.fd, 'sample2.txt')
112        self.assertEqual(full_id1, '396199333edbf40ad43e62a1c1397793-1')
113        self.assertEqual(full_id2, '396199333edbf40ad43e62a1c1397793-1')
114
115    def test_storeFile_multiple(self):
116        full_id1 = self.storage.storeFile(self.fd, 'sample1.txt')
117        full_id2 = self.storage.storeFile(self.fd2, 'sample1.txt')
118        self.assertEqual(full_id1, '396199333edbf40ad43e62a1c1397793-1')
119        self.assertEqual(full_id2, '6936fcf8d564f1c5be5a017e650c5e8f-1')
120
121    def test_retrieveFile_not_existent(self):
122        result = self.storage.retrieveFile('not-existent')
123        self.assertTrue(result is None)
124
125    def test_retrieveFile_illegal_marker(self):
126        result1 = self.storage.retrieveFile('really-not-existent')
127        result2 = self.storage.retrieveFile('notexistent')
128        self.assertTrue(result1 is result2 is None)
129
130    def test_retrieveFile(self):
131        full_id = self.storage.storeFile(self.fd, 'sample.txt')
132        result = self.storage.retrieveFile(full_id)
133        content = result.read()
134        self.assertEqual(content, 'Hi there!')
135
136    def test_retrieveFile_multiple(self):
137        full_id1 = self.storage.storeFile(self.fd, 'sample.txt')
138        full_id2 = self.storage.storeFile(self.fd2, 'other.txt')
139        result1 = self.storage.retrieveFile(full_id1)
140        result2 = self.storage.retrieveFile(full_id2)
141        content1 = result1.read()
142        content2 = result2.read()
143        self.assertEqual(content1, 'Hi there!')
144        self.assertEqual(content2, 'Hi from other!')
145
146class ImageStorageFileRetrievalTests(FunctionalTestCase):
147
148    layer = FunctionalLayer
149
150    def setUp(self):
151        super(ImageStorageFileRetrievalTests, self).setUp()
152        self.workdir = tempfile.mkdtemp()
153        self.samplefile = os.path.join(self.workdir, 'sample')
154        self.otherfile = os.path.join(self.workdir, 'other')
155        open(self.samplefile, 'wb').write('Hi there!')
156        open(self.otherfile, 'wb').write('Hi from other!')
157        self.storage = ImageStorage()
158        self.fd = open(self.samplefile, 'r')
159        self.fd2 = open(self.otherfile, 'r')
160        # Set up a single image storage in a site
161        self.getRootFolder()['app'] = University()
162        self.app = self.getRootFolder()['app']
163        if not 'images' in self.app.keys():
164            self.app['images'] = ImageStorage()
165        self.storage = self.app['images']
166        return
167
168
169    def tearDown(self):
170        super(ImageStorageFileRetrievalTests, self).tearDown()
171        self.fd.close()
172        self.fd2.close()
173        shutil.rmtree(self.workdir)
174        self.storage._del() # Remove subojects explicitly
175        return
176
177    def test_ifaces(self):
178        retrieval = ImageStorageFileRetrieval()
179        assert verifyClass(IFileRetrieval, ImageStorageFileRetrieval)
180        assert verifyObject(IFileRetrieval, retrieval)
181        return
182
183    def test_getImageStorage_nosite(self):
184        retrieval = ImageStorageFileRetrieval()
185        storage = retrieval.getImageStorage()
186        self.assertTrue(storage is None)
187        return
188
189    def test_getImageStorage(self):
190        setSite(self.app)
191        retrieval = ImageStorageFileRetrieval()
192        storage = retrieval.getImageStorage()
193        self.assertTrue(storage is self.storage)
194        return
195
196    def test_isImageStorageEnabled_nosite(self):
197        retrieval = ImageStorageFileRetrieval()
198        self.assertTrue(retrieval.isImageStorageEnabled() is False)
199        return
200
201    def test_isImageStorageEnabled(self):
202        setSite(self.app)
203        retrieval = ImageStorageFileRetrieval()
204        self.assertTrue(retrieval.isImageStorageEnabled() is True)
205        return
206
207    def test_getFile_nosite(self):
208        retrieval = ImageStorageFileRetrieval()
209        f = retrieval.getFile('Hi there!')
210        self.assertEqual(f.read(), 'Hi there!')
211        return
212
213    def test_getFile(self):
214        setSite(self.app)
215        retrieval = ImageStorageFileRetrieval()
216        waeup_image = retrieval.createFile('sample.txt', self.fd)
217        full_id = waeup_image.data
218        result = retrieval.getFile(full_id)
219        self.assertEqual(result.read(), 'Hi there!')
220        return
221
222    def test_createFile_nosite(self):
223        retrieval = ImageStorageFileRetrieval()
224        waeup_image = retrieval.createFile('sample.txt', self.fd)
225        self.assertEqual(waeup_image.data, 'Hi there!')
226        return
227
228    def test_createFile(self):
229        setSite(self.app)
230        retrieval = ImageStorageFileRetrieval()
231        waeup_image = retrieval.createFile('sample.txt', self.fd)
232        full_id = waeup_image.data
233        self.assertEqual(full_id, '396199333edbf40ad43e62a1c1397793-1')
234        return
Note: See TracBrowser for help on using the repository browser.