1 7 package org.jboss.test.cache.test.standAloneAop; 8 9 import junit.framework.Test; 10 import junit.framework.TestCase; 11 import junit.framework.TestSuite; 12 import org.jboss.cache.transaction.DummyTransactionManager; 13 import org.jboss.logging.Logger; 14 15 import javax.naming.Context ; 16 import javax.naming.InitialContext ; 17 import javax.naming.NamingException ; 18 import javax.transaction.*; 19 import java.util.Properties ; 20 21 23 24 30 31 public class ReplicatedTxAopTest extends TestCase 32 { 33 Logger log = Logger.getLogger(ReplicatedTxAopTest.class); 35 TreeCacheAopTester tester, tester1; 36 final String FACTORY = "org.jboss.cache.transaction.DummyContextFactory"; 37 DummyTransactionManager tx_mgr; 38 Throwable t1_ex, t2_ex; 39 long start=0; 40 41 42 public ReplicatedTxAopTest(String name) 43 { 44 super(name); 45 } 46 47 protected void setUp() throws Exception 48 { 49 super.setUp(); 50 log.info("setUp() ...."); 51 String configFile = "META-INF/replSync-service.xml"; 52 tester = new TreeCacheAopTester(configFile); 53 tester1 = new TreeCacheAopTester(configFile); 54 55 System.setProperty(Context.INITIAL_CONTEXT_FACTORY, FACTORY); 56 57 tx_mgr = DummyTransactionManager.getInstance(); 58 t1_ex = t2_ex = null; 59 } 60 61 protected void tearDown() throws Exception 62 { 63 super.tearDown(); 64 tester.stop(); 65 tester1.stop(); 66 tester = null; 67 tester1 = null; 68 69 DummyTransactionManager.destroy(); 70 } 71 72 74 public void testSetup() 75 { 76 log.info("testSetup() ...."); 77 try { 78 tester.testSetup(); 79 tester1.testSetup(); 80 } catch (Exception ex) { 81 ex.printStackTrace(); 82 fail("testSetup(): fails. " + ex.toString()); 83 } 84 } 85 86 UserTransaction getTransaction() throws SystemException, NotSupportedException, NamingException 87 { 88 Properties prop = new Properties (); 89 prop.put(Context.INITIAL_CONTEXT_FACTORY, 90 "org.jboss.cache.transaction.DummyContextFactory"); 91 return (UserTransaction)new InitialContext (prop).lookup("UserTransaction"); 92 } 93 94 public void testSimple() throws Exception 95 { 96 log.info("testSimple() ...."); 97 UserTransaction tx = getTransaction(); 98 tx.begin(); 99 tester.createPerson("/person/test1", "Harald Gliebe", 32); 100 tx.commit(); 101 tx.begin(); 102 tester.setName("/person/test1", "Benoit"); 103 tx.commit(); 104 assertEquals((Object ) "Benoit", (Object ) tester.getName("/person/test1")); 105 assertEquals((Object ) "Benoit", (Object ) tester1.getName("/person/test1")); 106 tx.begin(); 107 tester.setAge("/person/test1", 61); 108 tx.commit(); 109 assertEquals(61, tester.getAge("/person/test1")); 110 assertEquals(61, tester1.getAge("/person/test1")); 111 } 112 113 public void testModification() throws Exception 114 { 115 UserTransaction tx = getTransaction(); 116 tx.begin(); 117 tester.createPerson("/person/test2", "Harald", 32); 118 tester.setName("/person/test2", "Harald Gliebe"); 119 tx.commit(); 120 tx.begin(); 121 tester1.setName("/person/test2", "Benoit"); 122 tx.commit(); 123 assertEquals((Object ) tester.getName("/person/test2"), (Object ) "Benoit"); 124 assertEquals((Object ) tester1.getName("/person/test2"), (Object ) "Benoit"); 125 tx.begin(); 126 tester1.setName("/person/test2", "Harald"); 127 tx.rollback(); 128 assertEquals((Object ) tester.getName("/person/test2"), (Object ) "Benoit"); 129 assertEquals((Object ) tester1.getName("/person/test2"), (Object ) "Benoit"); 130 tester.removePerson("/person/test2"); 131 } 132 133 134 135 public void testConcurrentPuts() throws Exception 136 { 137 tester.setSyncCommitPhase(true); 138 139 Thread t1 = new Thread () 140 { 141 Transaction tx; 142 143 public void run() 144 { 145 try { 146 tester.createPerson("/person/test6", "p6", 50); 147 UserTransaction tx = getTransaction(); 148 tx.begin(); 149 tester.addLanguage("/person/test6", "German"); 150 _pause(4000); 151 tx.commit(); 152 } 153 catch(RollbackException rollback) { 154 ; 155 } 156 catch (Exception ex) { 157 t1_ex = ex; 158 } 159 } 160 }; 161 162 Thread t2 = new Thread () 163 { 164 Transaction tx; 165 166 public void run() 167 { 168 try { 169 _pause(1000); UserTransaction tx = getTransaction(); 171 tx.begin(); 172 tester.addLanguage("/person/test6", "English"); 173 tx.commit(); 174 } 175 catch(RollbackException rollback) { 176 ; 177 } 178 catch (Exception ex) { 179 t2_ex = ex; 180 } 181 } 182 }; 183 184 t1.start(); 185 t2.start(); 186 187 t1.join(); 188 t2.join(); 189 190 if(t2_ex != null) 192 fail("Thread1 failed: " + t2_ex); 193 if(t1_ex != null) 194 fail("Thread2 failed: " + t1_ex); 195 196 int size = tester.getLanguagesSize("/person/test6"); 197 assertEquals("number of languages should be 2, but is " + size + " (" + 198 tester.getLanguages("/person/test6") + ")", 199 2, size); 200 System.out.println("tester: " + tester.getLanguages("/person/test6")); 201 size = tester1.getLanguagesSize("/person/test6"); 202 assertEquals("number of languages should be 2, but is " + size + " (" + 203 tester.getLanguages("/person/test6") + ")", 204 2, size); 205 System.out.println("tester1: " + tester1.getLanguages("/person/test6")); 206 } 207 208 static void _pause(long millis) 209 { 210 try { 211 Thread.sleep(millis); 212 } catch (Exception ex) { 213 } 214 } 215 216 void log(String s) { 217 long now; 218 if(start == 0) 219 start=System.currentTimeMillis(); 220 now=System.currentTimeMillis(); 221 222 System.out.println("[" + Thread.currentThread().getName() + "] [" + (now - start) + "] " + s); 223 } 224 225 226 public static Test suite() throws Exception 227 { 228 return new TestSuite(ReplicatedTxAopTest.class); 229 } 230 231 232 public static void main(String [] args) throws Exception 233 { 234 junit.textui.TestRunner.run(suite()); 235 } 236 237 } 238 239 | Popular Tags |