1 /***
2 * Copyright 2003-2010 Terracotta, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package net.sf.ehcache.constructs;
18
19 import java.util.Arrays;
20 import java.util.List;
21
22 import junit.framework.TestCase;
23 import net.sf.ehcache.CacheException;
24 import net.sf.ehcache.CacheManager;
25 import net.sf.ehcache.Ehcache;
26 import net.sf.ehcache.ObjectExistsException;
27 import net.sf.ehcache.constructs.MockDecoratorFactory.MockDecoratorFactoryCache;
28
29 import org.junit.Test;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 /***
34 * @author Abhishek Sanoujam
35 */
36 public class DecoratorNoNameTest extends TestCase {
37
38 private static final Logger LOG = LoggerFactory.getLogger(DecoratorNoNameTest.class);
39
40 private static final String EHCACHE_DECORATOR_NONAME_TEST_XML = "/ehcache-decorator-noname-test.xml";
41 private static final String EHCACHE_DECORATOR_NONAME_FAIL_TEST_XML = "/ehcache-decorator-noname-fail-test.xml";
42
43 @Test
44 public void testCacheDecoratorFactory() {
45 CacheManager cacheManager = new CacheManager(getClass().getResourceAsStream(EHCACHE_DECORATOR_NONAME_TEST_XML));
46 List<String> cacheNames = Arrays.asList(cacheManager.getCacheNames());
47 LOG.info("" + cacheNames);
48
49 assertEquals(6, cacheNames.size());
50
51 checkDeclaredNamesExists(cacheNames);
52
53 }
54
55 private void checkDeclaredNamesExists(List<String> cacheNames) {
56 assertTrue(cacheNames.contains("noDecoratorCache"));
57 assertTrue(cacheNames.contains("oneDecoratorCache"));
58 assertTrue(cacheNames.contains("oneDecoratorCacheFirst"));
59 assertTrue(cacheNames.contains("twoDecoratorCache"));
60 assertTrue(cacheNames.contains("twoDecoratorCacheFirst"));
61 assertTrue(cacheNames.contains("twoDecoratorCacheSecond"));
62 }
63
64 @Test
65 public void testCacheDecoratorFactoryProperties() {
66 LOG.info("Testing default cache decorator properties");
67 CacheManager cacheManager = new CacheManager(getClass().getResourceAsStream(EHCACHE_DECORATOR_NONAME_TEST_XML));
68 List<String> cacheNames = Arrays.asList(cacheManager.getCacheNames());
69 assertEquals(6, cacheNames.size());
70 checkDeclaredNamesExists(cacheNames);
71
72 for (String name : cacheNames) {
73 Ehcache ehcache = cacheManager.getEhcache(name);
74 assertTrue("Should be instance of MockDecoratorFactoryCache", ehcache instanceof MockDecoratorFactoryCache);
75 }
76
77 checkDeclaredCachesProperties(cacheManager);
78
79 LOG.info("Testing default cache decorator properties Complete");
80 }
81
82 private void checkDeclaredCachesProperties(CacheManager cacheManager) {
83
84 checkMockDecoratorCache(cacheManager, "noDecoratorCache", "defaultDecoratorKeyValue");
85 checkMockDecoratorCache(cacheManager, "oneDecoratorCache", "defaultDecoratorKeyValue");
86 checkMockDecoratorCache(cacheManager, "twoDecoratorCache", "defaultDecoratorKeyValue");
87 checkMockDecoratorCache(cacheManager, "oneDecoratorCacheFirst", "oneDecoratorCacheFirstKey");
88 checkMockDecoratorCache(cacheManager, "twoDecoratorCacheFirst", "twoDecoratorCacheFirstKey");
89 checkMockDecoratorCache(cacheManager, "twoDecoratorCacheSecond", "twoDecoratorCacheSecondKey");
90 }
91
92 @Test
93 public void testAddDynamicCache() {
94 LOG.info("Testing dynamic cache addition");
95 CacheManager cacheManager = new CacheManager(getClass().getResourceAsStream(EHCACHE_DECORATOR_NONAME_TEST_XML));
96 List<String> cacheNames = Arrays.asList(cacheManager.getCacheNames());
97 assertEquals(6, cacheNames.size());
98 checkDeclaredNamesExists(cacheNames);
99
100 cacheManager.addCache("newDynamicCache");
101 cacheNames = Arrays.asList(cacheManager.getCacheNames());
102 assertEquals(7, cacheNames.size());
103 checkDeclaredNamesExists(cacheNames);
104 assertTrue(cacheNames.contains("newDynamicCache"));
105
106 checkDeclaredCachesProperties(cacheManager);
107 checkMockDecoratorCache(cacheManager, "newDynamicCache", "defaultDecoratorKeyValue");
108
109 LOG.info("Testing dynamic cache addition Complete");
110 }
111
112 @Test
113 public void testAddDynamicCacheIfAbsent() {
114 LOG.info("Testing dynamic addCacheIfAbsent");
115 CacheManager cacheManager = new CacheManager(getClass().getResourceAsStream(EHCACHE_DECORATOR_NONAME_TEST_XML));
116 List<String> cacheNames = Arrays.asList(cacheManager.getCacheNames());
117 assertEquals(6, cacheNames.size());
118 checkDeclaredNamesExists(cacheNames);
119
120 Ehcache orig = cacheManager.addCacheIfAbsent("newDynamicCache");
121 assertEquals("Newly added cache should be MockDecoratorFactoryCache as defaultCache has decorator with no name", true,
122 orig instanceof MockDecoratorFactoryCache);
123 cacheNames = Arrays.asList(cacheManager.getCacheNames());
124
125 assertEquals(7, cacheNames.size());
126 checkDeclaredNamesExists(cacheNames);
127 assertTrue(cacheNames.contains("newDynamicCache"));
128
129 checkDeclaredCachesProperties(cacheManager);
130 checkMockDecoratorCache(cacheManager, "newDynamicCache", "defaultDecoratorKeyValue");
131
132
133 Ehcache newCache = cacheManager.addCacheIfAbsent("newDynamicCache");
134 assertTrue(orig == newCache);
135
136 cacheNames = Arrays.asList(cacheManager.getCacheNames());
137
138 assertEquals(7, cacheNames.size());
139 checkDeclaredNamesExists(cacheNames);
140 assertTrue(cacheNames.contains("newDynamicCache"));
141
142 checkDeclaredCachesProperties(cacheManager);
143 checkMockDecoratorCache(cacheManager, "newDynamicCache", "defaultDecoratorKeyValue");
144
145
146 assertTrue(orig == cacheManager.getEhcache("newDynamicCache"));
147
148
149 try {
150 cacheManager.addCache("newDynamicCache");
151 fail("Adding cache with same name should throw exception");
152 } catch (ObjectExistsException e) {
153
154 }
155
156 LOG.info("Testing dynamic addCacheIfAbsent Complete");
157 }
158
159 private void checkMockDecoratorCache(CacheManager cacheManager, String name, String expectedKeyValue) {
160 Ehcache ehcache = cacheManager.getEhcache(name);
161 assertEquals(name, ehcache.getName());
162 assertEquals("Should be instanceof MockDecoratorFactoryCache : " + ehcache, true, ehcache instanceof MockDecoratorFactoryCache);
163 MockDecoratorFactoryCache ns = (MockDecoratorFactoryCache) ehcache;
164 assertEquals(expectedKeyValue, ns.getProperties().get("someKey"));
165 }
166
167 @Test
168 public void testFailingConfig() {
169 LOG.info("Testing failing config");
170 try {
171 CacheManager cacheManager = new CacheManager(getClass().getResourceAsStream(EHCACHE_DECORATOR_NONAME_FAIL_TEST_XML));
172 fail("Config having multiple ambiguous decorators should fail to initialize");
173 } catch (CacheException e) {
174
175 }
176 LOG.info("Testing failing config Complete");
177 }
178 }