Clover coverage report -
Coverage timestamp: Wed Jan 31 2007 15:38:53 EST
file stats: LOC: 276   Methods: 13
NCLOC: 208   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
ObjectGraphTest.java - 99.4% 84.6% 98.2%
coverage coverage
 1    package org.jboss.cache.pojo;
 2   
 3    import junit.framework.Test;
 4    import junit.framework.TestCase;
 5    import junit.framework.TestSuite;
 6    import org.apache.commons.logging.Log;
 7    import org.apache.commons.logging.LogFactory;
 8    import org.jboss.cache.pojo.test.Address;
 9    import org.jboss.cache.pojo.test.Person;
 10   
 11    /**
 12    * Test object graph handling in PojoCache, e.g., circular reference, multiple reference, link, etc.
 13    *
 14    * @author Ben Wang
 15    */
 16   
 17    public class ObjectGraphTest extends TestCase
 18    {
 19    Log log = LogFactory.getLog(ObjectGraphTest.class);
 20    PojoCache cache_;
 21   
 22  12 public ObjectGraphTest(String name)
 23    {
 24  12 super(name);
 25    }
 26   
 27  12 protected void setUp() throws Exception
 28    {
 29  12 super.setUp();
 30  12 log.info("setUp() ....");
 31  12 String configFile = "META-INF/local-service.xml";
 32  12 boolean toStart = false;
 33  12 cache_ = PojoCacheFactory.createCache(configFile, toStart);
 34  12 cache_.start();
 35    }
 36   
 37  12 protected void tearDown() throws Exception
 38    {
 39  12 super.tearDown();
 40  12 cache_.stop();
 41    }
 42   
 43    // public void testDummy() {}
 44   
 45  26 protected Person createPerson(String name, int age)
 46    {
 47  26 Person p = new Person();
 48  26 p.setName(name);
 49  26 p.setAge(age);
 50  26 return p;
 51    }
 52   
 53    /**
 54    * Test shared sub-object. In diagram, it is a forest
 55    * where the sub-object is connected by two tree parents.
 56    */
 57  2 public void testMultipleReference() throws Exception
 58    {
 59  2 log.info("testMultipleReference() ...");
 60  2 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 61  2 Person joe = (Person) cache_.find("/person/joe");
 62  2 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 63  2 Person ben = (Person) cache_.find("/person/ben");
 64   
 65  2 Address addr = new Address();
 66  2 addr.setStreet("123 Albert Ave.");
 67  2 addr.setCity("Sunnyvale");
 68  2 addr.setZip(94087);
 69   
 70    // They share the sub-object: address
 71  2 log.info("testMultipleReference(): set Joe address");
 72  2 joe.setAddress(addr);
 73  2 log.info("testMultipleReference(): set Ben address");
 74  2 ben.setAddress(addr);
 75   
 76  2 log.info("testMultipleReference(): verify");
 77  2 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 78  2 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 79  2 assertEquals(add1.getCity(), add2.getCity());
 80  2 addr.setCity("Santa Clara");
 81  2 assertEquals(add1.getCity(), add2.getCity());
 82    }
 83   
 84  2 public void testReAttach() throws Exception
 85    {
 86  2 log.info("testMultipleReference() ...");
 87  2 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 88  2 Person joe = (Person) cache_.find("/person/joe");
 89  2 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 90  2 Person ben = (Person) cache_.find("/person/ben");
 91   
 92  2 Address addr = new Address();
 93  2 addr.setStreet("123 Albert Ave.");
 94  2 addr.setCity("Sunnyvale");
 95  2 addr.setZip(94087);
 96   
 97    // They share the sub-object: address
 98  2 log.info("testMultipleReference(): set Joe address");
 99  2 joe.setAddress(addr);
 100  2 log.info("testMultipleReference(): set Ben address");
 101  2 ben.setAddress(addr);
 102   
 103  2 log.info("testMultipleReference(): verify");
 104  2 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 105  2 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 106  2 assertEquals(add1.getCity(), add2.getCity());
 107  2 addr.setCity("Santa Clara");
 108  2 assertEquals(add1.getCity(), add2.getCity());
 109   
 110  2 cache_.detach("/person/joe");
 111   
 112  2 cache_.attach("/person/joe", joe);
 113    }
 114   
 115    /**
 116    * Reattach in reverse order
 117    *
 118    * @throws Exception
 119    */
 120  2 public void testReAttach1() throws Exception
 121    {
 122  2 log.info("testMultipleReference() ...");
 123  2 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 124  2 Person joe = (Person) cache_.find("/person/joe");
 125  2 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 126  2 Person ben = (Person) cache_.find("/person/ben");
 127   
 128  2 Address addr = new Address();
 129  2 addr.setStreet("123 Albert Ave.");
 130  2 addr.setCity("Sunnyvale");
 131  2 addr.setZip(94087);
 132   
 133    // They share the sub-object: address
 134  2 log.info("testMultipleReference(): set Joe address");
 135  2 joe.setAddress(addr);
 136  2 log.info("testMultipleReference(): set Ben address");
 137  2 ben.setAddress(addr);
 138   
 139  2 log.info("testMultipleReference(): verify");
 140  2 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 141  2 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 142  2 assertEquals(add1.getCity(), add2.getCity());
 143  2 addr.setCity("Santa Clara");
 144  2 assertEquals(add1.getCity(), add2.getCity());
 145   
 146  2 cache_.detach("/person/ben");
 147  2 cache_.detach("/person/joe");
 148   
 149  2 cache_.attach("/person/ben", ben);
 150  2 cache_.attach("/person/joe", joe);
 151    }
 152   
 153  2 public void testRefCount() throws Exception
 154    {
 155  2 log.info("testRefCount() ...");
 156  2 Person joe = createPerson("Joe Black", 31);
 157  2 Person ben = createPerson("Ben Hogan", 51);
 158  2 cache_.attach("/person/joe", joe);
 159  2 cache_.attach("/person/ben", ben);
 160   
 161  2 Address addr = new Address();
 162  2 addr.setStreet("123 Albert Ave.");
 163  2 addr.setCity("Sunnyvale");
 164  2 addr.setZip(94087);
 165   
 166  2 joe.setAddress(addr);
 167  2 ben.setAddress(addr);
 168    // They share the sub-object: address
 169  2 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 170  2 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 171  2 assertEquals("Joe's address should still be valid ", "Sunnyvale", add1.getCity());
 172  2 assertEquals("Ben's address should still be valid ", "Sunnyvale", add2.getCity());
 173  2 assertEquals(add1.getCity(), add2.getCity());
 174  2 addr.setCity("Santa Clara");
 175  2 assertEquals(add1.getCity(), add2.getCity());
 176   
 177  2 cache_.detach("/person/joe");
 178  2 ben = (Person) cache_.find("/person/ben");
 179  2 addr = ben.getAddress();
 180  2 addr.setCity("Santa Clara");
 181  2 assertEquals("Ben's address should be changed ", "Santa Clara", addr.getCity());
 182   
 183  2 cache_.detach("/person/ben");
 184    }
 185   
 186  2 public void testRemoveObject1() throws Exception
 187    {
 188  2 log.info("testRemoveObject1() ...");
 189  2 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 190  2 Person joe = (Person) cache_.find("/person/joe");
 191  2 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 192  2 Person ben = (Person) cache_.find("/person/ben");
 193   
 194  2 Address addr = new Address();
 195  2 addr.setStreet("123 Albert Ave.");
 196  2 addr.setCity("Sunnyvale");
 197  2 addr.setZip(94087);
 198   
 199    // They share the sub-object: address
 200  2 log.info("testMultipleReference(): set Joe address");
 201  2 joe.setAddress(addr);
 202  2 log.info("testMultipleReference(): set Ben address");
 203  2 ben.setAddress(addr);
 204   
 205  2 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 206  2 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 207  2 assertEquals(add1.getCity(), add2.getCity());
 208  2 addr.setCity("Santa Clara");
 209  2 assertEquals(add1.getCity(), add2.getCity());
 210   
 211    // Remove pojo joe will relocate the address field to ben's
 212  2 cache_.detach("/person/joe");
 213  2 add2 = ((Person) cache_.find("/person/ben")).getAddress();
 214  2 assertEquals("City ", "Santa Clara", add2.getCity());
 215    }
 216   
 217  2 public void testRemoveObject2() throws Exception
 218    {
 219  2 log.info("testRemoveObject2() ...");
 220  2 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 221  2 Person joe = (Person) cache_.find("/person/joe");
 222  2 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 223  2 Person ben = (Person) cache_.find("/person/ben");
 224  2 cache_.attach("/person/john", createPerson("John Daly", 41));
 225  2 Person john = (Person) cache_.find("/person/john");
 226   
 227  2 Address addr = new Address();
 228  2 addr.setStreet("123 Albert Ave.");
 229  2 addr.setCity("Sunnyvale");
 230  2 addr.setZip(94087);
 231   
 232  2 Address addr1 = new Address();
 233  2 addr1.setStreet("123 Albert Ave.");
 234  2 addr1.setCity("San Jose");
 235  2 addr1.setZip(94087);
 236   
 237    // They share the sub-object: address
 238  2 log.info("testMultipleReference(): set Joe address");
 239  2 joe.setAddress(addr);
 240  2 log.info("testMultipleReference(): set Ben address");
 241  2 ben.setAddress(addr);
 242  2 log.info("testMultipleReference(): set John address");
 243  2 john.setAddress(addr);
 244   
 245  2 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 246  2 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 247  2 assertEquals(add1.getCity(), add2.getCity());
 248  2 addr.setCity("Santa Clara");
 249  2 assertEquals(add1.getCity(), add2.getCity());
 250   
 251    // Remove pojo joe will relocate the address field to ben's
 252  2 joe.setAddress(addr1);
 253  2 add2 = ((Person) cache_.find("/person/joe")).getAddress();
 254  2 assertEquals("City ", "San Jose", add2.getCity());
 255  2 add2 = ((Person) cache_.find("/person/ben")).getAddress();
 256  2 assertEquals("City ", "Santa Clara", add2.getCity());
 257  2 add2 = ((Person) cache_.find("/person/john")).getAddress();
 258  2 assertEquals("City ", "Santa Clara", add2.getCity());
 259    }
 260   
 261  0 public void XtestObjectIdentity() throws Exception
 262    {
 263    }
 264   
 265  2 public static Test suite() throws Exception
 266    {
 267  2 return new TestSuite(ObjectGraphTest.class);
 268    }
 269   
 270  0 public static void main(String[] args) throws Exception
 271    {
 272  0 junit.textui.TestRunner.run(suite());
 273    }
 274   
 275    }
 276