[3296] | 1 | from base import CacheFuTestCase |
---|
| 2 | |
---|
| 3 | from Interface.Verify import verifyObject |
---|
| 4 | from Products.Archetypes.public import listTypes |
---|
| 5 | from Products.CMFCore.utils import getToolByName |
---|
| 6 | |
---|
| 7 | from Products.CacheSetup.config import * |
---|
| 8 | from Products.CacheSetup.interfaces import ICacheTool |
---|
| 9 | |
---|
| 10 | # util for making content in a container |
---|
| 11 | def makeContent(container, id, portal_type, title=None): |
---|
| 12 | container.invokeFactory(id=id, type_name=portal_type) |
---|
| 13 | o = getattr(container, id) |
---|
| 14 | if title is not None: |
---|
| 15 | o.setTitle(title) |
---|
| 16 | return o |
---|
| 17 | |
---|
| 18 | |
---|
| 19 | # This is the test case. You will have to add test_<methods> to your |
---|
| 20 | # class inorder to assert things about your Product. |
---|
| 21 | class CacheManagerTest(CacheFuTestCase): |
---|
| 22 | USER1 = 'user1' |
---|
| 23 | |
---|
| 24 | def afterSetUp(self): |
---|
| 25 | CacheFuTestCase.afterSetUp(self) |
---|
| 26 | |
---|
| 27 | # Add a couple of users |
---|
| 28 | self.portal.acl_users._doAddUser('manager', 'secret', ['Manager'], []) |
---|
| 29 | self.portal.acl_users._doAddUser(self.USER1, 'secret', ['Member'], []) |
---|
| 30 | self.login('manager') |
---|
| 31 | |
---|
| 32 | def test_install(self): |
---|
| 33 | cpm = self.portal.caching_policy_manager |
---|
| 34 | cpm.addPolicy('foo', 'python:0', '', 1, 1, 0, 1, 'foo', '') |
---|
| 35 | original_class = cpm.__class__ |
---|
| 36 | installed_types = [typeinfo['name'] for typeinfo in listTypes(PROJECT_NAME)] |
---|
| 37 | # before installation the new types are not in the types factory |
---|
| 38 | portal_factory = getToolByName(self, 'portal_factory') |
---|
| 39 | self.assertEqual(set(installed_types).issubset(set(portal_factory.getFactoryTypes())), False) |
---|
| 40 | self.portal.portal_quickinstaller.installProducts(['CacheSetup']) |
---|
| 41 | self.portal.portal_quickinstaller.installProducts(['CacheSetup']) |
---|
| 42 | # now the new types are in the types factory |
---|
| 43 | self.assertEqual(set(installed_types).issubset(set(portal_factory.getFactoryTypes())), True) |
---|
| 44 | cpm = self.portal.caching_policy_manager |
---|
| 45 | self.assertNotEqual(cpm.__class__, original_class) |
---|
| 46 | #self.failIf('caching_policy_manager' in self.portal.objectIds()) |
---|
| 47 | |
---|
| 48 | self.portal.portal_quickinstaller.uninstallProducts(['CacheSetup']) |
---|
| 49 | # now the new types are gone again |
---|
| 50 | self.assertEqual(set(installed_types).issubset(set(portal_factory.getFactoryTypes())), False) |
---|
| 51 | cpm = self.portal.caching_policy_manager |
---|
| 52 | self.assertEqual(cpm.__class__, original_class) |
---|
| 53 | lp = cpm.listPolicies() |
---|
| 54 | self.assertEqual(len(lp), 1) |
---|
| 55 | (id, p) = lp[0] |
---|
| 56 | self.assertEqual(id, 'foo') |
---|
| 57 | self.assertEqual(p.getPredicate(), 'python:0') |
---|
| 58 | |
---|
| 59 | class TestInstall(CacheFuTestCase): |
---|
| 60 | """ ensure product is properly installed """ |
---|
| 61 | |
---|
| 62 | def afterSetUp(self): |
---|
| 63 | self.types = self.portal.portal_types |
---|
| 64 | self.skins = self.portal.portal_skins |
---|
| 65 | self.factory = self.portal.portal_factory |
---|
| 66 | self.tool = self.portal.portal_cache_settings |
---|
| 67 | self.setRoles(['Manager', 'Member']) |
---|
| 68 | self.tool.setEnabled(True) |
---|
| 69 | self.metaTypes = ('CacheTool','ContentCacheRule', |
---|
| 70 | 'TemplateCacheRule','PolicyHTTPCacheManagerCacheRule', |
---|
| 71 | 'RuleFolder','HeaderSet','HeaderSetFolder') |
---|
| 72 | |
---|
| 73 | def testTypesInstalled(self): |
---|
| 74 | for t in self.metaTypes: |
---|
| 75 | self.failUnless(t in self.types.objectIds(), |
---|
| 76 | '%s content type not installed' % t) |
---|
| 77 | |
---|
| 78 | def testPortalFactorySetup(self): |
---|
| 79 | for t in self.metaTypes: |
---|
| 80 | self.failUnless(t in self.factory.getFactoryTypes(), |
---|
| 81 | '%s content type not in Portal Factory' % t) |
---|
| 82 | |
---|
| 83 | def testSkinLayersInstalled(self): |
---|
| 84 | self.failUnless('cache_setup' in self.skins.objectIds()) |
---|
| 85 | |
---|
| 86 | def testDependenciesInstalled(self): |
---|
| 87 | # Zope products; not sure about this |
---|
| 88 | #self.dependencies = ('PageCacheManager','PolicyHTTPCacheManager') |
---|
| 89 | |
---|
| 90 | # Plone products |
---|
| 91 | self.dependencies = ('CMFSquidTool',) |
---|
| 92 | self.qitool = self.portal.portal_quickinstaller |
---|
| 93 | installed = [p['id'] for p in self.qitool.listInstalledProducts()] |
---|
| 94 | for p in self.dependencies: |
---|
| 95 | self.failUnless(p in installed, |
---|
| 96 | '%s not installed' % p) |
---|
| 97 | |
---|
| 98 | def testWorkflowSetup(self): |
---|
| 99 | """ test if no workflow is associated with CacheFu's content types """ |
---|
| 100 | self.workflow = self.portal.portal_workflow |
---|
| 101 | for t in self.metaTypes: |
---|
| 102 | self.failUnless(self.workflow.getChainForPortalType(t) is ()) |
---|
| 103 | |
---|
| 104 | def testToolInstalled(self): |
---|
| 105 | self.failUnless(getattr(self.portal, CACHE_TOOL_ID, None) is not None) |
---|
| 106 | |
---|
| 107 | def testToolInterface(self): |
---|
| 108 | t = self.tool |
---|
| 109 | self.failUnless(ICacheTool.providedBy(t)) |
---|
| 110 | self.failUnless(verifyObject(ICacheTool, t)) |
---|
| 111 | |
---|
| 112 | def testToolNames(self): |
---|
| 113 | t = self.tool |
---|
| 114 | self.failUnlessEqual(t.meta_type, 'CacheTool') |
---|
| 115 | self.failUnlessEqual(t.getId(), CACHE_TOOL_ID) |
---|
| 116 | self.failUnlessEqual(t.title, 'Cache Configuration Tool') |
---|
| 117 | self.failUnlessEqual(t.plone_tool, True) |
---|
| 118 | |
---|
| 119 | # too specific... these policies will change |
---|
| 120 | def testHeaderSetsInstalled(self): |
---|
| 121 | return |
---|
| 122 | self.headers = ('no-cache','cache-in-memory', |
---|
| 123 | 'cache-with-etag','cache-with-last-modified', |
---|
| 124 | 'cache-in-proxy-1-hour','cache-in-proxy-24-hours', |
---|
| 125 | 'cache-in-browser-1-hour','cache-in-browser-24-hours', |
---|
| 126 | 'cache-in-browser-forever') |
---|
| 127 | installed = self.tool.getHeaderSets().objectIds() |
---|
| 128 | for h in self.headers: |
---|
| 129 | self.failUnless(h in installed, |
---|
| 130 | '%s header set not installed' % h) |
---|
| 131 | |
---|
| 132 | # too specific... these policies will change |
---|
| 133 | def testCacheRulesInstalled(self): |
---|
| 134 | return |
---|
| 135 | self.rules = ('httpcache','plone-content-types', |
---|
| 136 | 'plone-containers','plone-templates', |
---|
| 137 | 'resource-registries','downloads','dtml-css') |
---|
| 138 | installed = self.tool.getRules().objectIds() |
---|
| 139 | for r in self.rules: |
---|
| 140 | self.failUnless(r in installed, |
---|
| 141 | '%s rule not installed' % r) |
---|
| 142 | |
---|
| 143 | def _testCachingPolicyManagerRemoved(self): |
---|
| 144 | self.fail('not yet implemented...') |
---|
| 145 | |
---|
| 146 | def testSquidToolSetup(self): |
---|
| 147 | squidtool = self.portal.portal_squid |
---|
| 148 | expression = 'python:object.%s.getUrlsToPurge(object)' % CACHE_TOOL_ID |
---|
| 149 | self.failUnlessEqual(squidtool.getUrlExpression(), expression) |
---|
| 150 | |
---|
| 151 | def _testPolicyHTTPCaches(self): |
---|
| 152 | self.fail('not yet implemented...') |
---|
| 153 | |
---|
| 154 | def testResourceRegistrySetup(self): |
---|
| 155 | cache = getattr(self.portal, RR_CACHE_ID, None) |
---|
| 156 | self.failUnless(cache is not None) |
---|
| 157 | settings = cache.getSettings() |
---|
| 158 | self.failUnlessEqual(cache.title, 'Cache for saved ResourceRegistry files') |
---|
| 159 | self.failUnlessEqual(settings['max_age'], 86400) |
---|
| 160 | self.failUnlessEqual(settings['request_vars'], ('URL',)) |
---|
| 161 | self.csstool = self.portal.portal_css |
---|
| 162 | self.failUnlessEqual(self.csstool.ZCacheable_getManagerId(), RR_CACHE_ID) |
---|
| 163 | self.failUnless(self.csstool.ZCacheable_enabled()) |
---|
| 164 | self.jstool = self.portal.portal_javascripts |
---|
| 165 | self.failUnlessEqual(self.jstool.ZCacheable_getManagerId(), RR_CACHE_ID) |
---|
| 166 | self.failUnless(self.jstool.ZCacheable_enabled()) |
---|
| 167 | |
---|
| 168 | def _testSiteProperties(self): |
---|
| 169 | self.fail('not yet implemented...') |
---|
| 170 | |
---|
| 171 | def testConfigletInstalled(self): |
---|
| 172 | self.controlpanel = self.portal.portal_controlpanel |
---|
| 173 | installed = [a.getAction(self)['title'] for a in self.controlpanel.listActions()] |
---|
| 174 | self.failUnless('Cache Configuration Tool' in installed) |
---|
| 175 | |
---|
| 176 | class TestUninstall(CacheFuTestCase): |
---|
| 177 | """ ensure product is properly uninstalled """ |
---|
| 178 | |
---|
| 179 | def afterSetUp(self): |
---|
| 180 | """ uninstall requieres 'Manager' role """ |
---|
| 181 | self.setRoles(['Manager', 'Member']) |
---|
| 182 | self.portal.portal_cache_settings.setEnabled(True) |
---|
| 183 | self.qitool = self.portal.portal_quickinstaller |
---|
| 184 | self.qitool.uninstallProducts(products=[PROJECT_NAME]) |
---|
| 185 | |
---|
| 186 | def testProductUninstalled(self): |
---|
| 187 | self.failIf(self.qitool.isProductInstalled(PROJECT_NAME)) |
---|
| 188 | |
---|
| 189 | def testToolUninstalled(self): |
---|
| 190 | self.failIf(getattr(self.portal, CACHE_TOOL_ID, None) is not None) |
---|
| 191 | |
---|
| 192 | def testSquidToolUninstalled(self): |
---|
| 193 | """ uninstalling the product now also removes CMFSquidTool """ |
---|
| 194 | self.failIf(getattr(self.portal, 'portal_squid', None) is not None) |
---|
| 195 | |
---|
| 196 | def testResourceRegistryRestore(self): |
---|
| 197 | cache = getattr(self.portal, RR_CACHE_ID, None) |
---|
| 198 | self.failIf(cache is not None) |
---|
| 199 | self.csstool = self.portal.portal_css |
---|
| 200 | #self.assertEqual(self.csstool.ZCacheable_getManagerId(), '---') |
---|
| 201 | self.failIf(self.csstool.ZCacheable_getManagerId() is not None) |
---|
| 202 | self.failIf(self.csstool.ZCacheable_enabled()) |
---|
| 203 | self.jstool = self.portal.portal_javascripts |
---|
| 204 | self.failIf(self.jstool.ZCacheable_getManagerId() is not None) |
---|
| 205 | self.failIf(self.jstool.ZCacheable_enabled()) |
---|
| 206 | |
---|
| 207 | def testConfigletsUninstalled(self): |
---|
| 208 | self.configlets = ('Cache Configuration Tool',) |
---|
| 209 | self.controlpanel = self.portal.portal_controlpanel |
---|
| 210 | installed = [a.getAction(self)['title'] for a in self.controlpanel.listActions()] |
---|
| 211 | for c in self.configlets: |
---|
| 212 | self.failIf(c in installed, |
---|
| 213 | '%s configlet installed' % c) |
---|
| 214 | |
---|
| 215 | def test_suite(): |
---|
| 216 | from unittest import TestSuite, makeSuite |
---|
| 217 | suite = TestSuite() |
---|
| 218 | #suite.addTest(makeSuite(CacheManagerTest)) |
---|
| 219 | suite.addTest(makeSuite(TestInstall)) |
---|
| 220 | suite.addTest(makeSuite(TestUninstall)) |
---|
| 221 | return suite |
---|