Annotation of ExtFile/tests/testCacheable.py, revision 1.1

1.1     ! dwinter     1: #
        !             2: # Tests the ZCacheable implementation
        !             3: #
        !             4: 
        !             5: import os, sys
        !             6: if __name__ == '__main__':
        !             7:     execfile(os.path.join(sys.path[0], 'framework.py'))
        !             8: 
        !             9: from Testing import ZopeTestCase
        !            10: 
        !            11: ZopeTestCase.installProduct('ExtFile')
        !            12: ZopeTestCase.utils.startZServer(4)
        !            13: 
        !            14: from Products.ExtFile.tests.ExtFileTestCase import ExtFileTestCase
        !            15: from Products.ExtFile.tests.ExtFileTestCase import gifImage, notImage
        !            16: 
        !            17: from Testing.ZopeTestCase import Functional
        !            18: from Testing.ZopeTestCase import user_name
        !            19: from Testing.ZopeTestCase import user_password
        !            20: user_auth = '%s:%s' % (user_name, user_password)
        !            21: 
        !            22: from OFS.SimpleItem import SimpleItem
        !            23: from OFS.Cache import ZCM_MANAGERS
        !            24: from webdav.common import rfc1123_date
        !            25: from DateTime import DateTime
        !            26: from StringIO import StringIO
        !            27: from Products.ExtFile.ExtImage import UPLOAD_RESIZE
        !            28: from Products.ExtFile.ExtFile import IStreamIterator
        !            29: 
        !            30: from Products.ExtFile.ExtFile import ChangePermission
        !            31: from AccessControl.Permissions import ftp_access as FTPAccess
        !            32: 
        !            33: 
        !            34: class DummyCache:
        !            35:     def __init__(self):
        !            36:         self.data = ''
        !            37:         self.called = []
        !            38:     def ZCache_set(self, ob, data, *args, **kw):
        !            39:         self.called.append('set')
        !            40:         self.data = data
        !            41:     def ZCache_get(self, ob, *args, **kw):
        !            42:         self.called.append('get')
        !            43:         return self.data
        !            44:     def ZCache_invalidate(self, ob):
        !            45:         self.called.append('invalidate')
        !            46:         self.data = ''
        !            47: 
        !            48: class DummyCacheManager(SimpleItem):
        !            49:     meta_type = 'Dummy Cache Manager'
        !            50:     def __init__(self, id):
        !            51:         self.id = id
        !            52:         self.cache = DummyCache()
        !            53:     def ZCacheManager_getCache(self):
        !            54:         return self.cache
        !            55: 
        !            56: 
        !            57: class ExtFileCacheableTests(Functional, ExtFileTestCase):
        !            58: 
        !            59:     def afterSetUp(self):
        !            60:         ExtFileTestCase.afterSetUp(self)
        !            61:         # Set up cache
        !            62:         self.folder.cache = DummyCacheManager('cache')
        !            63:         setattr(self.folder, ZCM_MANAGERS, ('cache',))
        !            64:         self.cache = self.folder.cache.cache
        !            65:         # Set up cached file
        !            66:         self.addExtFile(id='file.exe', file=notImage)
        !            67:         self.file.ZCacheable_setManagerId('cache')
        !            68:         self.file_path = self.file.absolute_url(1)
        !            69: 
        !            70:     def test304ResponseSetsCache(self):
        !            71:         response = self.publish(self.file_path,
        !            72:                                 env={'HTTP_IF_MODIFIED_SINCE': rfc1123_date(DateTime()+7)},
        !            73:                                 basic=user_auth)
        !            74:         self.assertEqual(response.getStatus(), 304)
        !            75:         self.assertEqual(self.cache.data, None)
        !            76:         self.assertEqual(self.cache.called, ['set'])
        !            77: 
        !            78:     def test200ResponseSetsCache(self):
        !            79:         response = self.publish(self.file_path, basic=user_auth)
        !            80:         self.assertEqual(response.getStatus(), 200)
        !            81:         self.assertEqual(self.cache.data, None)
        !            82:         self.assertEqual(self.cache.called, ['set'])
        !            83: 
        !            84:     def testManageUploadInvalidatesCache(self):
        !            85:         self.file.manage_upload(open(gifImage, 'rb'))
        !            86:         self.assertEqual(self.cache.data, '')
        !            87:         self.assertEqual(self.cache.called, ['invalidate'])
        !            88: 
        !            89:     def testManageFileUploadInvalidatesCache(self):
        !            90:         self.file.manage_file_upload(gifImage)
        !            91:         self.assertEqual(self.cache.data, '')
        !            92:         self.assertEqual(self.cache.called, ['invalidate'])
        !            93: 
        !            94:     def testManageHTTPUploadInvalidatesCache(self):
        !            95:         self.file.manage_http_upload(url=self.app.GifImage.absolute_url())
        !            96:         self.assertEqual(self.cache.data, '')
        !            97:         self.assertEqual(self.cache.called, ['invalidate'])
        !            98: 
        !            99:     def testPUTInvalidatesCache(self):
        !           100:         self.setPermissions([ChangePermission])
        !           101:         response = self.publish(self.file_path,
        !           102:                                 request_method='PUT',
        !           103:                                 env={'CONTENT_TYPE': 'image/gif'},
        !           104:                                 stdin=open(gifImage, 'rb'),
        !           105:                                 basic=user_auth)
        !           106:         self.assertEqual(response.getStatus(), 204)
        !           107:         self.assertEqual(self.cache.data, '')
        !           108:         self.assertEqual(self.cache.called, ['invalidate'])
        !           109: 
        !           110:     def testManageEditInvalidatesCache(self):
        !           111:         self.file.manage_editExtFile(title='Foo')
        !           112:         self.assertEqual(self.cache.data, '')
        !           113:         self.assertEqual(self.cache.called, ['invalidate'])
        !           114: 
        !           115:     def testRedirectDefaultViewReturns304(self):
        !           116:         self.file.manage_file_upload(gifImage)
        !           117:         self.file.redirect_default_view = 1
        !           118:         response = self.publish(self.file_path,
        !           119:                                 env={'HTTP_IF_MODIFIED_SINCE': rfc1123_date(DateTime()+7)},
        !           120:                                 basic=user_auth)
        !           121:         self.assertEqual(response.getStatus(), 304)
        !           122:         self.assertEqual(response.getHeader('Location'), None)
        !           123: 
        !           124:     def testRedirectDefaultViewReturns302(self):
        !           125:         self.file.redirect_default_view = 1
        !           126:         saved = os.environ.copy()
        !           127:         os.environ['EXTFILE_STATIC_PATH'] = '/static'
        !           128:         try:
        !           129:             response = self.publish(self.file_path, basic=user_auth)
        !           130:         finally:
        !           131:             os.environ = saved
        !           132:         self.assertEqual(response.getStatus(), 302)
        !           133:         self.assertEqual(response.getHeader('Location'),
        !           134:                          self.app.REQUEST.SERVER_URL+'/static/file.exe')
        !           135: 
        !           136:     if IStreamIterator is not None:
        !           137: 
        !           138:         def testStreamIterator(self):
        !           139:             response = self.publish(self.file_path, basic=user_auth)
        !           140:             self.assertEqual(response.getStatus(), 200)
        !           141:             # FIXME
        !           142:             self.failUnless(response.getBody().startswith('<Products.ExtFile.ExtFile.stream_iterator'))
        !           143:             self.assertEqual(self.cache.called, ['set'])
        !           144: 
        !           145:         def testFTPgetStreamIterator(self):
        !           146:             self.setPermissions([FTPAccess])
        !           147:             response = self.publish(self.file_path+'/manage_FTPget',
        !           148:                                     basic=user_auth)
        !           149:             self.assertEqual(response.getStatus(), 200)
        !           150:             # FIXME
        !           151:             self.failUnless(response.getBody().startswith('<Products.ExtFile.ExtFile.stream_iterator'))
        !           152:             self.assertEqual(self.cache.called, ['set'])
        !           153: 
        !           154:         def testNoRequestNoStreamIterator(self):
        !           155:             body = self.file.index_html()
        !           156:             self.assertEqual(self.app.REQUEST.RESPONSE.getStatus(), 200)
        !           157:             # Not taken from cache
        !           158:             self.assertEqual(body, open(notImage, 'rb').read())
        !           159:             self.assertEqual(self.cache.called, [])
        !           160: 
        !           161: 
        !           162: class ExtImageCacheableTests(ExtFileCacheableTests):
        !           163: 
        !           164:     def afterSetUp(self):
        !           165:         ExtFileTestCase.afterSetUp(self)
        !           166:         # Set up cache
        !           167:         self.folder.cache = DummyCacheManager('cache')
        !           168:         setattr(self.folder, ZCM_MANAGERS, ('cache',))
        !           169:         self.cache = self.folder.cache.cache
        !           170:         # Set up cached image
        !           171:         self.addExtImage(id='file.exe', file=notImage)
        !           172:         self.image.ZCacheable_setManagerId('cache')
        !           173:         self.file = self.image
        !           174:         self.file_path = self.image.absolute_url(1)
        !           175: 
        !           176:     def testManageUploadPreviewInvalidatesCache(self):
        !           177:         self.image.manage_upload(open(gifImage, 'rb'), is_preview=1)
        !           178:         self.assertEqual(self.cache.data, '')
        !           179:         self.assertEqual(self.cache.called, ['invalidate'])
        !           180: 
        !           181:     def testManageUploadPreviewResizeInvalidatesCache(self):
        !           182:         self.image.manage_upload(open(gifImage, 'rb'), is_preview=1, create_prev=UPLOAD_RESIZE)
        !           183:         self.assertEqual(self.cache.data, '')
        !           184:         self.assertEqual(self.cache.called, ['invalidate'])
        !           185: 
        !           186:     def testManageFileUploadPreviewInvalidatesCache(self):
        !           187:         self.image.manage_file_upload(gifImage, is_preview=1)
        !           188:         self.assertEqual(self.cache.data, '')
        !           189:         self.assertEqual(self.cache.called, ['invalidate'])
        !           190: 
        !           191:     def testManageFileUploadPreviewResizeInvalidatesCache(self):
        !           192:         self.image.manage_file_upload(gifImage, is_preview=1, create_prev=UPLOAD_RESIZE)
        !           193:         self.assertEqual(self.cache.data, '')
        !           194:         self.assertEqual(self.cache.called, ['invalidate'])
        !           195: 
        !           196:     def testManageHTTPUploadPreviewInvalidatesCache(self):
        !           197:         self.image.manage_http_upload(url=self.app.GifImage.absolute_url(), is_preview=1)
        !           198:         self.assertEqual(self.cache.data, '')
        !           199:         self.assertEqual(self.cache.called, ['invalidate'])
        !           200: 
        !           201:     def testManageCreatePrevInvalidatesCache(self):
        !           202:         self.image.manage_file_upload(gifImage)
        !           203:         self.cache.ZCache_invalidate(None)
        !           204:         self.cache.called = []
        !           205:         self.image.manage_create_prev(maxx=100, maxy=100, ratio=1)
        !           206:         self.assertEqual(self.cache.data, '')
        !           207:         self.assertEqual(self.cache.called, ['invalidate'])
        !           208: 
        !           209:     def testManageDelPrevInvalidatesCache(self):
        !           210:         self.image.manage_file_upload(gifImage)
        !           211:         self.image.manage_create_prev(maxx=100, maxy=100, ratio=1)
        !           212:         self.cache.ZCache_invalidate(None)
        !           213:         self.cache.called = []
        !           214:         self.image.manage_del_prev()
        !           215:         self.assertEqual(self.cache.data, '')
        !           216:         self.assertEqual(self.cache.called, ['invalidate'])
        !           217: 
        !           218: 
        !           219: def test_suite():
        !           220:     from unittest import TestSuite, makeSuite
        !           221:     suite = TestSuite()
        !           222:     suite.addTest(makeSuite(ExtFileCacheableTests))
        !           223:     suite.addTest(makeSuite(ExtImageCacheableTests))
        !           224:     return suite
        !           225: 
        !           226: if __name__ == '__main__':
        !           227:     framework()
        !           228: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>