Clover coverage report -
Coverage timestamp: Thu Jul 5 2007 20:02:32 EDT
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  6 public ObjectGraphTest(String name)
 23    {
 24  6 super(name);
 25    }
 26   
 27  6 protected void setUp() throws Exception
 28    {
 29  6 super.setUp();
 30  6 log.info("setUp() ....");
 31  6 String configFile = "META-INF/local-service.xml";
 32  6 boolean toStart = false;
 33  6 cache_ = PojoCacheFactory.createCache(configFile, toStart);
 34  6 cache_.start();
 35    }
 36   
 37  6 protected void tearDown() throws Exception
 38    {
 39  6 super.tearDown();
 40  6 cache_.stop();
 41    }
 42   
 43    // public void testDummy() {}
 44   
 45  13 protected Person createPerson(String name, int age)
 46    {
 47  13 Person p = new Person();
 48  13 p.setName(name);
 49  13 p.setAge(age);
 50  13 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  1 public void testMultipleReference() throws Exception
 58    {
 59  1 log.info("testMultipleReference() ...");
 60  1 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 61  1 Person joe = (Person) cache_.find("/person/joe");
 62  1 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 63  1 Person ben = (Person) cache_.find("/person/ben");
 64   
 65  1 Address addr = new Address();
 66  1 addr.setStreet("123 Albert Ave.");
 67  1 addr.setCity("Sunnyvale");
 68  1 addr.setZip(94087);
 69   
 70    // They share the sub-object: address
 71  1 log.info("testMultipleReference(): set Joe address");
 72  1 joe.setAddress(addr);
 73  1 log.info("testMultipleReference(): set Ben address");
 74  1 ben.setAddress(addr);
 75   
 76  1 log.info("testMultipleReference(): verify");
 77  1 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 78  1 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 79  1 assertEquals(add1.getCity(), add2.getCity());
 80  1 addr.setCity("Santa Clara");
 81  1 assertEquals(add1.getCity(), add2.getCity());
 82    }
 83   
 84  1 public void testReAttach() throws Exception
 85    {
 86  1 log.info("testMultipleReference() ...");
 87  1 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 88  1 Person joe = (Person) cache_.find("/person/joe");
 89  1 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 90  1 Person ben = (Person) cache_.find("/person/ben");
 91   
 92  1 Address addr = new Address();
 93  1 addr.setStreet("123 Albert Ave.");
 94  1 addr.setCity("Sunnyvale");
 95  1 addr.setZip(94087);
 96   
 97    // They share the sub-object: address
 98  1 log.info("testMultipleReference(): set Joe address");
 99  1 joe.setAddress(addr);
 100  1 log.info("testMultipleReference(): set Ben address");
 101  1 ben.setAddress(addr);
 102   
 103  1 log.info("testMultipleReference(): verify");
 104  1 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 105  1 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 106  1 assertEquals(add1.getCity(), add2.getCity());
 107  1 addr.setCity("Santa Clara");
 108  1 assertEquals(add1.getCity(), add2.getCity());
 109   
 110  1 cache_.detach("/person/joe");
 111   
 112  1 cache_.attach("/person/joe", joe);
 113    }
 114   
 115    /**
 116    * Reattach in reverse order
 117    *
 118    * @throws Exception
 119    */
 120  1 public void testReAttach1() throws Exception
 121    {
 122  1 log.info("testMultipleReference() ...");
 123  1 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 124  1 Person joe = (Person) cache_.find("/person/joe");
 125  1 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 126  1 Person ben = (Person) cache_.find("/person/ben");
 127   
 128  1 Address addr = new Address();
 129  1 addr.setStreet("123 Albert Ave.");
 130  1 addr.setCity("Sunnyvale");
 131  1 addr.setZip(94087);
 132   
 133    // They share the sub-object: address
 134  1 log.info("testMultipleReference(): set Joe address");
 135  1 joe.setAddress(addr);
 136  1 log.info("testMultipleReference(): set Ben address");
 137  1 ben.setAddress(addr);
 138   
 139  1 log.info("testMultipleReference(): verify");
 140  1 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 141  1 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 142  1 assertEquals(add1.getCity(), add2.getCity());
 143  1 addr.setCity("Santa Clara");
 144  1 assertEquals(add1.getCity(), add2.getCity());
 145   
 146  1 cache_.detach("/person/ben");
 147  1 cache_.detach("/person/joe");
 148   
 149  1 cache_.attach("/person/ben", ben);
 150  1 cache_.attach("/person/joe", joe);
 151    }
 152   
 153  1 public void testRefCount() throws Exception
 154    {
 155  1 log.info("testRefCount() ...");
 156  1 Person joe = createPerson("Joe Black", 31);
 157  1 Person ben = createPerson("Ben Hogan", 51);
 158  1 cache_.attach("/person/joe", joe);
 159  1 cache_.attach("/person/ben", ben);
 160   
 161  1 Address addr = new Address();
 162  1 addr.setStreet("123 Albert Ave.");
 163  1 addr.setCity("Sunnyvale");
 164  1 addr.setZip(94087);
 165   
 166  1 joe.setAddress(addr);
 167  1 ben.setAddress(addr);
 168    // They share the sub-object: address
 169  1 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 170  1 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 171  1 assertEquals("Joe's address should still be valid ", "Sunnyvale", add1.getCity());
 172  1 assertEquals("Ben's address should still be valid ", "Sunnyvale", add2.getCity());
 173  1 assertEquals(add1.getCity(), add2.getCity());
 174  1 addr.setCity("Santa Clara");
 175  1 assertEquals(add1.getCity(), add2.getCity());
 176   
 177  1 cache_.detach("/person/joe");
 178  1 ben = (Person) cache_.find("/person/ben");
 179  1 addr = ben.getAddress();
 180  1 addr.setCity("Santa Clara");
 181  1 assertEquals("Ben's address should be changed ", "Santa Clara", addr.getCity());
 182   
 183  1 cache_.detach("/person/ben");
 184    }
 185   
 186  1 public void testRemoveObject1() throws Exception
 187    {
 188  1 log.info("testRemoveObject1() ...");
 189  1 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 190  1 Person joe = (Person) cache_.find("/person/joe");
 191  1 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 192  1 Person ben = (Person) cache_.find("/person/ben");
 193   
 194  1 Address addr = new Address();
 195  1 addr.setStreet("123 Albert Ave.");
 196  1 addr.setCity("Sunnyvale");
 197  1 addr.setZip(94087);
 198   
 199    // They share the sub-object: address
 200  1 log.info("testMultipleReference(): set Joe address");
 201  1 joe.setAddress(addr);
 202  1 log.info("testMultipleReference(): set Ben address");
 203  1 ben.setAddress(addr);
 204   
 205  1 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 206  1 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 207  1 assertEquals(add1.getCity(), add2.getCity());
 208  1 addr.setCity("Santa Clara");
 209  1 assertEquals(add1.getCity(), add2.getCity());
 210   
 211    // Remove pojo joe will relocate the address field to ben's
 212  1 cache_.detach("/person/joe");
 213  1 add2 = ((Person) cache_.find("/person/ben")).getAddress();
 214  1 assertEquals("City ", "Santa Clara", add2.getCity());
 215    }
 216   
 217  1 public void testRemoveObject2() throws Exception
 218    {
 219  1 log.info("testRemoveObject2() ...");
 220  1 cache_.attach("/person/joe", createPerson("Joe Black", 31));
 221  1 Person joe = (Person) cache_.find("/person/joe");
 222  1 cache_.attach("/person/ben", createPerson("Ben Hogan", 51));
 223  1 Person ben = (Person) cache_.find("/person/ben");
 224  1 cache_.attach("/person/john", createPerson("John Daly", 41));
 225  1 Person john = (Person) cache_.find("/person/john");
 226   
 227  1 Address addr = new Address();
 228  1 addr.setStreet("123 Albert Ave.");
 229  1 addr.setCity("Sunnyvale");
 230  1 addr.setZip(94087);
 231   
 232  1 Address addr1 = new Address();
 233  1 addr1.setStreet("123 Albert Ave.");
 234  1 addr1.setCity("San Jose");
 235  1 addr1.setZip(94087);
 236   
 237    // They share the sub-object: address
 238  1 log.info("testMultipleReference(): set Joe address");
 239  1 joe.setAddress(addr);
 240  1 log.info("testMultipleReference(): set Ben address");
 241  1 ben.setAddress(addr);
 242  1 log.info("testMultipleReference(): set John address");
 243  1 john.setAddress(addr);
 244   
 245  1 Address add1 = ((Person) cache_.find("/person/joe")).getAddress();
 246  1 Address add2 = ((Person) cache_.find("/person/ben")).getAddress();
 247  1 assertEquals(add1.getCity(), add2.getCity());
 248  1 addr.setCity("Santa Clara");
 249  1 assertEquals(add1.getCity(), add2.getCity());
 250   
 251    // Remove pojo joe will relocate the address field to ben's
 252  1 joe.setAddress(addr1);
 253  1 add2 = ((Person) cache_.find("/person/joe")).getAddress();
 254  1 assertEquals("City ", "San Jose", add2.getCity());
 255  1 add2 = ((Person) cache_.find("/person/ben")).getAddress();
 256  1 assertEquals("City ", "Santa Clara", add2.getCity());
 257  1 add2 = ((Person) cache_.find("/person/john")).getAddress();
 258  1 assertEquals("City ", "Santa Clara", add2.getCity());
 259    }
 260   
 261  0 public void XtestObjectIdentity() throws Exception
 262    {
 263    }
 264   
 265  1 public static Test suite() throws Exception
 266    {
 267  1 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