Clover coverage report -
Coverage timestamp: Thu Jul 5 2007 20:02:32 EDT
file stats: LOC: 304   Methods: 11
NCLOC: 215   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
ChainingCacheLoaderFullTest.java 50% 97.8% 90.9% 96.1%
coverage coverage
 1    /*
 2    * JBoss, Home of Professional Open Source
 3    *
 4    * Distributable under LGPL license.
 5    * See terms of license at gnu.org.
 6    */
 7    package org.jboss.cache.loader;
 8   
 9    import junit.framework.Assert;
 10    import junit.framework.Test;
 11    import junit.framework.TestCase;
 12    import junit.framework.TestSuite;
 13    import org.jboss.cache.CacheImpl;
 14    import org.jboss.cache.DefaultCacheFactory;
 15    import org.jboss.cache.Fqn;
 16    import org.jboss.cache.config.CacheLoaderConfig;
 17    import org.jboss.cache.factories.XmlConfigurationParser;
 18    import org.jboss.cache.misc.TestingUtil;
 19    import org.jboss.cache.xml.XmlHelper;
 20    import org.w3c.dom.Element;
 21   
 22    import javax.transaction.TransactionManager;
 23    import java.io.File;
 24   
 25    /**
 26    * Tests ignoreModifications and tests contents of individual loaders
 27    *
 28    * @author <a href="mailto:manik@jboss.org">Manik Surtani (manik@jboss.org)</a>
 29    */
 30    public class ChainingCacheLoaderFullTest extends TestCase
 31    {
 32    private String loc1 = System.getProperty("java.io.tmpdir", ".") + File.separator + "JBossCache-ChainingCacheLoaderBasicTest-1";
 33    private String loc2 = System.getProperty("java.io.tmpdir", ".") + File.separator + "JBossCache-ChainingCacheLoaderBasicTest-2";
 34   
 35    private CacheImpl cache;
 36    private ChainingCacheLoader chainingCacheLoader;
 37    private CacheLoader loader1, loader2;
 38    private Fqn fqn = Fqn.fromString("/a/b");
 39    private String key = "key";
 40    private String value = "value";
 41   
 42   
 43  5 public ChainingCacheLoaderFullTest()
 44    {
 45  5 File dir1 = new File(loc1);
 46  5 File dir2 = new File(loc2);
 47   
 48  0 if (!dir1.exists()) dir1.mkdirs();
 49  0 if (!dir2.exists()) dir2.mkdirs();
 50    }
 51   
 52  5 protected void startCache(boolean ignoreMods1, boolean ignoreMods2) throws Exception
 53    {
 54  5 cache = (CacheImpl) DefaultCacheFactory.getInstance().createCache(false);
 55  5 cache.getConfiguration().setCacheLoaderConfig(getCacheLoaderConfig(loc1, loc2, ignoreMods1, ignoreMods2));
 56   
 57  5 TestingUtil.recursiveFileRemove(loc1);
 58  5 TestingUtil.recursiveFileRemove(loc2);
 59   
 60  5 cache.getConfiguration().setCacheMode("local");
 61  5 cache.getConfiguration().setTransactionManagerLookupClass("org.jboss.cache.transaction.DummyTransactionManagerLookup");
 62  5 cache.start();
 63   
 64  5 chainingCacheLoader = (ChainingCacheLoader) cache.getCacheLoaderManager().getCacheLoader();
 65  5 loader1 = chainingCacheLoader.getCacheLoaders().get(0);
 66  5 loader2 = chainingCacheLoader.getCacheLoaders().get(1);
 67    }
 68   
 69  5 protected void cleanup() throws Exception
 70    {
 71  5 cache.remove("/");
 72  5 cache.stop();
 73  5 cache = null;
 74    }
 75   
 76  5 protected CacheLoaderConfig getCacheLoaderConfig(String loc1, String loc2, boolean ignoreMods1, boolean ignoreMods2) throws Exception
 77    {
 78  5 String xml = "<config>\n" +
 79    "<passivation>false</passivation>\n" +
 80    "<preload></preload>\n" +
 81    "<cacheloader>\n" +
 82    "<class>org.jboss.cache.loader.FileCacheLoader</class>\n" +
 83    "<properties>" +
 84    " location=" + loc1 + "\n" +
 85    "</properties>\n" +
 86    "<async>false</async>\n" +
 87    "<fetchPersistentState>true</fetchPersistentState>\n" +
 88    "<ignoreModifications>" + ignoreMods1 + "</ignoreModifications>\n" +
 89    "</cacheloader>\n" +
 90    "<cacheloader>\n" +
 91    "<class>org.jboss.cache.loader.FileCacheLoader</class>\n" +
 92    "<properties>" +
 93    " location=" + loc2 + "\n" +
 94    "</properties>\n" +
 95    "<async>false</async>\n" +
 96    "<fetchPersistentState>false</fetchPersistentState>\n" +
 97    "<ignoreModifications>" + ignoreMods2 + "</ignoreModifications>\n" +
 98    "</cacheloader>\n" +
 99    "</config>";
 100  5 Element element = XmlHelper.stringToElement(xml);
 101  5 return XmlConfigurationParser.parseCacheLoaderConfig(element);
 102    }
 103   
 104  1 public void testCruds() throws Exception
 105    {
 106  1 startCache(false, false);
 107   
 108    // put something in the cache.
 109  1 cache.put(fqn, key, value);
 110   
 111  1 Assert.assertEquals(value, cache.get(fqn, key));
 112  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 113  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 114  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 115   
 116    // evict
 117  1 cache.evict(fqn);
 118  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 119  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 120  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 121  1 Assert.assertEquals(value, cache.get(fqn, key));
 122   
 123    // remove
 124  1 cache.remove(fqn);
 125  1 Assert.assertNull(value, cache.get(fqn, key));
 126  1 Assert.assertNull(value, chainingCacheLoader.get(fqn));
 127  1 Assert.assertNull(value, loader1.get(fqn));
 128  1 Assert.assertNull(value, loader2.get(fqn));
 129   
 130  1 cleanup();
 131    }
 132   
 133  1 public void testGets() throws Exception
 134    {
 135  1 startCache(false, false);
 136   
 137  1 cache.put(fqn, key, value);
 138   
 139    // test that loader1 is always looked up first.
 140  1 cache.evict(fqn);
 141  1 loader1.put(fqn, key, value + 2);
 142  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 143  1 Assert.assertEquals(value + 2, loader1.get(fqn).get(key));
 144  1 Assert.assertEquals(value + 2, chainingCacheLoader.get(fqn).get(key));
 145  1 Assert.assertEquals(value + 2, cache.get(fqn, key));
 146   
 147  1 cache.remove("/");
 148  1 cache.put(fqn, key, value);
 149   
 150    // test that loader2 is NOT checked if loader1 has the value
 151  1 cache.evict(fqn);
 152  1 loader2.put(fqn, key, value + 2);
 153  1 Assert.assertEquals(value + 2, loader2.get(fqn).get(key));
 154  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 155  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 156  1 Assert.assertEquals(value, cache.get(fqn, key));
 157   
 158  1 cache.remove("/");
 159  1 cache.put(fqn, key, value);
 160   
 161    // test that loader2 is checked if loader1 returns a null
 162  1 cache.evict(fqn);
 163  1 loader1.remove(fqn);
 164  1 Assert.assertNull(loader1.get(fqn));
 165  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 166  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 167  1 Assert.assertEquals(value, cache.get(fqn, key));
 168   
 169  1 cleanup();
 170    }
 171   
 172  1 public void testIgnoreMods() throws Exception
 173    {
 174  1 startCache(false, true);
 175   
 176    // initialise the loaders
 177  1 loader1.put(fqn, key, value);
 178  1 loader2.put(fqn, key, value);
 179   
 180    // check contents
 181  1 Assert.assertEquals(value, cache.get(fqn, key));
 182  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 183  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 184  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 185   
 186    // do a put
 187  1 cache.put(fqn, key, value + 2);
 188  1 Assert.assertEquals(value + 2, cache.get(fqn, key));
 189  1 Assert.assertEquals(value + 2, chainingCacheLoader.get(fqn).get(key));
 190  1 Assert.assertEquals(value + 2, loader1.get(fqn).get(key));
 191  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 192   
 193    // remove
 194  1 cache.remove(fqn);
 195  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 196  1 Assert.assertNull(loader1.get(fqn));
 197  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 198  1 Assert.assertEquals(value, cache.get(fqn, key));
 199   
 200  1 cleanup();
 201    }
 202   
 203  1 public void testIgnoreModsTransactional() throws Exception
 204    {
 205  1 startCache(false, true);
 206  1 TransactionManager mgr = cache.getTransactionManager();
 207   
 208    // initialise the loaders
 209  1 loader1.put(fqn, key, value);
 210  1 loader2.put(fqn, key, value);
 211   
 212    // check contents
 213  1 Assert.assertEquals(value, cache.get(fqn, key));
 214  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 215  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 216  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 217   
 218    // do a put
 219  1 mgr.begin();
 220  1 cache.put(fqn, key, value + 2);
 221  1 Assert.assertEquals(value + 2, cache.get(fqn, key));
 222  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 223  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 224  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 225  1 mgr.commit();
 226  1 Assert.assertEquals(value + 2, cache.get(fqn, key));
 227  1 Assert.assertEquals(value + 2, chainingCacheLoader.get(fqn).get(key));
 228  1 Assert.assertEquals(value + 2, loader1.get(fqn).get(key));
 229  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 230   
 231    // remove - not in a tx, see http://jira.jboss.com/jira/browse/JBCACHE-352
 232    // mgr.begin();
 233  1 cache.remove(fqn);
 234   
 235    // Assert.assertNull(cache.get(fqn, key));
 236    // Assert.assertEquals(value + 2, chainingCacheLoader.get(fqn).get(key));
 237    // Assert.assertEquals(value + 2, loader1.get(fqn).get(key));
 238    // Assert.assertEquals(value, loader2.get(fqn).get(key));
 239    // mgr.commit();
 240  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 241  1 Assert.assertNull(loader1.get(fqn));
 242  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 243  1 Assert.assertEquals(value, cache.get(fqn, key));
 244   
 245  1 cleanup();
 246    }
 247   
 248  1 public void testCrudsTransactional() throws Exception
 249    {
 250  1 startCache(false, false);
 251  1 TransactionManager mgr = cache.getTransactionManager();
 252   
 253    // assert that the loaders ae empty
 254  1 chainingCacheLoader.remove(cache.getRoot().getFqn());
 255  1 Assert.assertNull(loader1.get(fqn));
 256  1 Assert.assertNull(loader2.get(fqn));
 257  1 Assert.assertNull(chainingCacheLoader.get(fqn));
 258   
 259    // put something in the cache.
 260  1 mgr.begin();
 261  1 cache.put(fqn, key, value);
 262  1 Assert.assertEquals(value, cache.get(fqn, key));
 263  1 Assert.assertNull(chainingCacheLoader.get(fqn));
 264  1 Assert.assertNull(loader1.get(fqn));
 265  1 Assert.assertNull(loader2.get(fqn));
 266  1 mgr.commit();
 267  1 Assert.assertEquals(value, cache.get(fqn, key));
 268  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 269  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 270  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 271   
 272    // evict
 273  1 cache.evict(fqn);
 274  1 Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 275  1 Assert.assertEquals(value, loader1.get(fqn).get(key));
 276  1 Assert.assertEquals(value, loader2.get(fqn).get(key));
 277  1 Assert.assertEquals(value, cache.get(fqn, key));
 278   
 279    // remove - not in a tx, see http://jira.jboss.com/jira/browse/JBCACHE-352
 280    // mgr.begin();
 281  1 cache.remove(fqn);
 282    // Assert.assertEquals(value, chainingCacheLoader.get(fqn).get(key));
 283    // Assert.assertEquals(value, loader1.get(fqn).get(key));
 284    // Assert.assertEquals(value, loader2.get(fqn).get(key));
 285    // Assert.assertNull(value, cache.get(fqn, key));
 286    // mgr.commit();
 287  1 Assert.assertNull(value, cache.get(fqn, key));
 288  1 Assert.assertNull(value, chainingCacheLoader.get(fqn));
 289  1 Assert.assertNull(value, loader1.get(fqn));
 290  1 Assert.assertNull(value, loader2.get(fqn));
 291   
 292  1 cleanup();
 293    }
 294   
 295  1 public static Test suite()
 296    {
 297  1 return new TestSuite(ChainingCacheLoaderFullTest.class);
 298    }
 299   
 300  0 public static void main(String[] args)
 301    {
 302  0 junit.textui.TestRunner.run(suite());
 303    }
 304    }