1 | import unittest |
---|
2 | |
---|
3 | from base import CacheFuTestCase |
---|
4 | |
---|
5 | from Products.CMFCore.utils import getToolByName |
---|
6 | import Products.CacheSetup.config as config |
---|
7 | |
---|
8 | # util for making content in a container |
---|
9 | def makeContent(container, id, portal_type, title=None): |
---|
10 | container.invokeFactory(id=id, type_name=portal_type) |
---|
11 | o = getattr(container, id) |
---|
12 | if title is not None: |
---|
13 | o.setTitle(title) |
---|
14 | return o |
---|
15 | |
---|
16 | |
---|
17 | # This is the test case. You will have to add test_<methods> to your |
---|
18 | # class inorder to assert things about your Product. |
---|
19 | class CacheManagerTest(CacheFuTestCase): |
---|
20 | USER1 = 'user1' |
---|
21 | |
---|
22 | def afterSetUp(self): |
---|
23 | CacheFuTestCase.afterSetUp(self) |
---|
24 | |
---|
25 | # Add a couple of users |
---|
26 | self.portal.acl_users._doAddUser('manager', 'secret', ['Manager'], []) |
---|
27 | self.portal.acl_users._doAddUser(self.USER1, 'secret', ['Member'], []) |
---|
28 | self.login('manager') |
---|
29 | |
---|
30 | self.portal.portal_quickinstaller.installProducts(['CacheSetup']) |
---|
31 | |
---|
32 | # We have added a skin so we need to rebuild the skin object |
---|
33 | # (since the object is cached in the current request) |
---|
34 | self._refreshSkinData() |
---|
35 | |
---|
36 | def test_rule_and_header_set(self): |
---|
37 | d = makeContent(self.folder, 'doc', 'Document', 'My document') |
---|
38 | pcs = self.portal.portal_cache_settings |
---|
39 | member = self.portal.portal_membership.getAuthenticatedMember() |
---|
40 | |
---|
41 | # these aren't comprehensive -- there is better coverage in test_functional |
---|
42 | (rule, header_set) = pcs.getRuleAndHeaderSet(d.REQUEST, d, 'document_view', None) |
---|
43 | self.assertEqual(rule.getId(), 'plone-content-types') |
---|
44 | self.assertEqual(header_set.getId(), 'cache-in-memory') |
---|
45 | (rule, header_set) = pcs.getRuleAndHeaderSet(d.REQUEST, d, 'document_view', member) |
---|
46 | self.assertEqual(rule.getId(), 'plone-content-types') |
---|
47 | self.assertEqual(header_set.getId(), 'cache-with-etag') |
---|
48 | |
---|
49 | (rule, header_set) = pcs.getRuleAndHeaderSet(self.portal.REQUEST, self.portal, 'sitemap', None) |
---|
50 | self.assertEqual(rule.getId(), 'plone-templates') |
---|
51 | self.assertEqual(header_set.getId(), 'cache-in-memory') |
---|
52 | (rule, header_set) = pcs.getRuleAndHeaderSet(self.portal.REQUEST, self.portal, 'sitemap', member) |
---|
53 | self.assertEqual(rule.getId(), 'plone-templates') |
---|
54 | self.assertEqual(header_set.getId(), 'cache-with-etag') |
---|
55 | |
---|
56 | (rule, header_set) = pcs.getRuleAndHeaderSet(self.portal.REQUEST, self.folder, 'folder_contents', None) |
---|
57 | self.assertEqual(rule.getId(), 'plone-containers') |
---|
58 | self.assertEqual(header_set.getId(), 'cache-in-memory') |
---|
59 | (rule, header_set) = pcs.getRuleAndHeaderSet(self.portal.REQUEST, self.folder, 'folder_contents', member) |
---|
60 | self.assertEqual(rule.getId(), 'plone-containers') |
---|
61 | self.assertEqual(header_set.getId(), 'cache-with-etag') |
---|
62 | |
---|
63 | image = getattr(self.portal, 'addFavorite.gif') # associated with HTTPCache in Plone 2.1.2 |
---|
64 | (rule, header_set) = pcs.getRuleAndHeaderSet(image.REQUEST, image, None, None) |
---|
65 | self.assertEqual(rule.getId(), 'httpcache') |
---|
66 | self.assertEqual(header_set.getId(), 'cache-in-browser-24-hours') |
---|
67 | (rule, header_set) = pcs.getRuleAndHeaderSet(image.REQUEST, image, None, member) |
---|
68 | self.assertEqual(rule.getId(), 'httpcache') |
---|
69 | self.assertEqual(header_set.getId(), 'cache-in-browser-24-hours') |
---|
70 | |
---|
71 | def test_purged_urls(self): |
---|
72 | pcs = self.portal.portal_cache_settings |
---|
73 | url_tool = getToolByName(self.portal, 'portal_url') |
---|
74 | |
---|
75 | d = makeContent(self.folder, 'doc', 'Document', 'My document') |
---|
76 | doc_url = url_tool.getRelativeUrl(d) |
---|
77 | purged_urls = [doc_url + url for url in ['','/','/view','/document_view']] |
---|
78 | purged_urls.sort() |
---|
79 | |
---|
80 | pcs.setCacheConfig('zserver') |
---|
81 | urls = pcs.getUrlsToPurge(d) |
---|
82 | self.assertEqual(urls, []) |
---|
83 | |
---|
84 | pcs.setCacheConfig('apache') |
---|
85 | urls = pcs.getUrlsToPurge(d) |
---|
86 | self.assertEqual(urls, []) |
---|
87 | |
---|
88 | pcs.setCacheConfig('squid') |
---|
89 | urls = pcs.getUrlsToPurge(d) |
---|
90 | urls.sort() |
---|
91 | self.assertEqual(urls, purged_urls) |
---|
92 | |
---|
93 | d = makeContent(self.folder, 'index_html', 'Document', 'My document') |
---|
94 | doc_url = url_tool.getRelativeUrl(d) |
---|
95 | purged_urls = [doc_url + url for url in ['','/','/view','/document_view']] |
---|
96 | parent_url = url_tool.getRelativeUrl(d.getParentNode()) |
---|
97 | purged_urls += [parent_url + url for url in ['','/','/view']] |
---|
98 | purged_urls.sort() |
---|
99 | |
---|
100 | urls = pcs.getUrlsToPurge(d) |
---|
101 | urls.sort() |
---|
102 | self.assertEqual(urls, purged_urls) |
---|
103 | |
---|
104 | def test_purged_urls_for_squid_behind_apache(self): |
---|
105 | pcs = self.portal.portal_cache_settings |
---|
106 | url_tool = getToolByName(self.portal, 'portal_url') |
---|
107 | pcs.setCacheConfig('squid_behind_apache') |
---|
108 | pcs.setDomains(['http://www.mysite.com','https://www.mysite.com']) |
---|
109 | |
---|
110 | d = makeContent(self.folder, 'doc', 'Document', 'My document') |
---|
111 | |
---|
112 | |
---|
113 | def test_suite(): |
---|
114 | suite = unittest.TestSuite() |
---|
115 | suite.addTest(unittest.makeSuite(CacheManagerTest)) |
---|
116 | return suite |
---|