1 22 package org.jboss.test.jca.test; 23 24 import javax.management.ObjectName ; 25 26 import junit.framework.Test; 27 28 import org.jboss.test.JBossTestCase; 29 import org.jboss.test.jca.mbean.MTOperation; 30 31 38 public class MultiThreadedTxDsUnitTestCase extends JBossTestCase 39 { 40 static String [] SIG = new String [] { String .class.getName(), new MTOperation[0][0].getClass().getName() }; 41 42 ObjectName mtMBean; 43 44 public MultiThreadedTxDsUnitTestCase(String name) 45 { 46 super(name); 47 48 try 49 { 50 mtMBean = new ObjectName ("jboss.test:test=MultiThreadedTxUnitTestCase"); 53 } 54 catch (Exception e) 55 { 56 throw new RuntimeException (e.toString()); 57 } 58 } 59 60 public void runTest(MTOperation[][] ops) throws Exception 61 { 62 getServer().invoke(mtMBean, "testMTOperations", new Object [] { getName(), ops }, SIG); 63 } 64 65 public static Test suite() throws Exception 66 { 67 Test t1 = getDeploySetup(MultiThreadedTxDsUnitTestCase.class, "mtjcatest.sar"); 68 Test t2 = getDeploySetup(t1, "testdriver-ds.xml"); 69 return getDeploySetup(t2, "jbosstestdriver.jar"); 70 } 71 72 76 public void testTwoThreadsEnlistConnsInSameTx() throws Exception 77 { 78 runTest(new MTOperation[][] 79 { 80 { 81 new MTOperation(MTOperation.DS_DEFAULT_LOOKUP), 83 new MTOperation(MTOperation.TM_BEGIN, 10), 84 new MTOperation(MTOperation.DS_GET_CONN, 1), 85 new MTOperation(MTOperation.DS_GET_CONN, 2), 86 new MTOperation(MTOperation.DS_GET_CONN, 3), 87 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 88 new MTOperation(MTOperation.DS_CLOSE_CONN, 3), 89 new MTOperation(MTOperation.DS_CLOSE_CONN, 2), 90 new MTOperation(MTOperation.DS_CLOSE_CONN, 1), 91 new MTOperation(MTOperation.XX_WAIT_FOR_SIGNAL, 999), 92 new MTOperation(MTOperation.TM_COMMIT) 93 } 94 , 95 { 96 new MTOperation(MTOperation.DS_DEFAULT_LOOKUP), 98 new MTOperation(MTOperation.XX_WAIT_FOR_TX, 10), 99 new MTOperation(MTOperation.TM_RESUME, 10), 100 new MTOperation(MTOperation.DS_GET_CONN, 4), 101 new MTOperation(MTOperation.DS_GET_CONN, 5), 102 new MTOperation(MTOperation.DS_GET_CONN, 6), 103 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 104 new MTOperation(MTOperation.DS_CLOSE_CONN, 6), 105 new MTOperation(MTOperation.DS_CLOSE_CONN, 5), 106 new MTOperation(MTOperation.DS_CLOSE_CONN, 4), 107 new MTOperation(MTOperation.TM_SUSPEND, 10), 108 new MTOperation(MTOperation.XX_POST_SIGNAL, 999) 109 } 110 }); 111 } 112 113 117 public void testCloseConnTwiceInDifferentTx() throws Exception 118 { 119 runTest(new MTOperation[][] 120 { 121 { 122 new MTOperation(MTOperation.DS_DEFAULT_LOOKUP), 124 new MTOperation(MTOperation.TM_BEGIN, 10), 125 new MTOperation(MTOperation.DS_GET_CONN, 1), 126 new MTOperation(MTOperation.XX_WAIT_FOR_SIGNAL, 999), 127 new MTOperation(MTOperation.DS_CLOSE_CONN, 1), 128 new MTOperation(MTOperation.TM_COMMIT) 129 } 130 , 131 { 132 new MTOperation(MTOperation.DS_DEFAULT_LOOKUP), 134 new MTOperation(MTOperation.TM_BEGIN, 20), 135 new MTOperation(MTOperation.XX_WAIT_FOR_CONN, 1), 136 new MTOperation(MTOperation.DS_CLOSE_CONN, 1), 137 new MTOperation(MTOperation.TM_COMMIT), 138 new MTOperation(MTOperation.XX_POST_SIGNAL, 999) 139 } 140 }); 141 } 142 143 149 public void testStressConnsMultipleThreadsInSameTx() throws Exception 150 { 151 final int numThreads = 60; 152 153 MTOperation[][] stressTest = new MTOperation[numThreads + 1][]; 154 155 MTOperation[] thread0 = new MTOperation[5 + numThreads]; 157 thread0[0] = new MTOperation(MTOperation.DS_DEFAULT_LOOKUP); 158 thread0[1] = new MTOperation(MTOperation.TM_BEGIN, 10); 159 thread0[2] = new MTOperation(MTOperation.DS_GET_CONN, 0); 160 for (int i = 0; i < numThreads; i++) 161 { 162 thread0[3+i] = new MTOperation(MTOperation.XX_WAIT_FOR_SIGNAL, i+1); 163 } 164 thread0[3 + numThreads] = new MTOperation(MTOperation.DS_CLOSE_CONN, 0); 165 thread0[4 + numThreads] = new MTOperation(MTOperation.TM_COMMIT); 166 167 stressTest[0] = thread0; 168 169 for (int i = 1; i <= numThreads; i++) 171 { 172 stressTest[i] = new MTOperation[] { 173 new MTOperation(MTOperation.DS_DEFAULT_LOOKUP), 174 new MTOperation(MTOperation.XX_WAIT_FOR_TX, 10), 175 new MTOperation(MTOperation.TM_RESUME, 10), 176 new MTOperation(MTOperation.DS_GET_CONN, 1000+i), 177 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 178 new MTOperation(MTOperation.DS_GET_CONN, 2000+i), 179 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 180 new MTOperation(MTOperation.DS_GET_CONN, 3000+i), 181 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 182 new MTOperation(MTOperation.DS_CLOSE_CONN, 3000+i), 183 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 184 new MTOperation(MTOperation.DS_CLOSE_CONN, 2000+i), 185 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 186 new MTOperation(MTOperation.DS_CLOSE_CONN, 1000+i), 187 new MTOperation(MTOperation.TM_SUSPEND, 10), 188 new MTOperation(MTOperation.XX_POST_SIGNAL, i) 189 }; 190 } 191 runTest(stressTest); 192 } 193 194 198 public void testStressMultipleThreadsDifferentTx() throws Exception 199 { 200 final int numThreads = 60; 201 202 MTOperation[][] stressTest = new MTOperation[numThreads][]; 203 204 for (int i = 0; i < numThreads; i++) 206 { 207 stressTest[i] = new MTOperation[] { 208 new MTOperation(MTOperation.DS_DEFAULT_LOOKUP), 209 new MTOperation(MTOperation.TM_BEGIN, 500+i), 210 new MTOperation(MTOperation.DS_GET_CONN, 1000+i), 211 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 212 new MTOperation(MTOperation.DS_GET_CONN, 2000+i), 213 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 214 new MTOperation(MTOperation.DS_GET_CONN, 3000+i), 215 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 216 new MTOperation(MTOperation.DS_GET_CONN, 4000+i), 217 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 218 new MTOperation(MTOperation.DS_GET_CONN, 5000+i), 219 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 220 new MTOperation(MTOperation.DS_CLOSE_CONN, 5000+i), 221 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 222 new MTOperation(MTOperation.DS_CLOSE_CONN, 4000+i), 223 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 224 new MTOperation(MTOperation.DS_CLOSE_CONN, 3000+i), 225 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 226 new MTOperation(MTOperation.DS_CLOSE_CONN, 2000+i), 227 new MTOperation(MTOperation.XX_SLEEP_RANDOM), 228 new MTOperation(MTOperation.DS_CLOSE_CONN, 1000+i), 229 new MTOperation(MTOperation.TM_COMMIT) 230 }; 231 } 232 runTest(stressTest); 233 } 234 } 235 | Popular Tags |