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