1 22 package org.jboss.test.tm.test; 23 24 import javax.management.ObjectName ; 25 import javax.transaction.RollbackException ; 26 import javax.transaction.Status ; 27 import javax.transaction.xa.XAException ; 28 import javax.transaction.xa.XAResource ; 29 30 import junit.framework.Test; 31 32 import org.jboss.test.JBossTestCase; 33 import org.jboss.test.JBossTestSetup; 34 import org.jboss.test.tm.resource.Operation; 35 import org.jboss.test.tm.resource.Resource; 36 37 42 public class TransactionManagerUnitTestCase 43 extends JBossTestCase 44 { 45 static String [] SIG = new String [] { String .class.getName(), new Operation[0].getClass().getName() }; 46 47 ObjectName tmMBean; 48 49 public TransactionManagerUnitTestCase(String name) 50 { 51 super(name); 52 53 try 54 { 55 tmMBean = new ObjectName ("jboss.test:test=TransactionManagerUnitTestCase"); 56 } 57 catch (Exception e) 58 { 59 throw new RuntimeException (e.toString()); 60 } 61 } 62 63 public void runTest(Operation[] ops) throws Exception 64 { 65 getServer().invoke(tmMBean, "testOperations", new Object [] { getName(), ops }, SIG); 66 } 67 68 public static Test suite() throws Exception 69 { 70 return new JBossTestSetup(getDeploySetup(TransactionManagerUnitTestCase.class, "tmtest.sar")); 71 } 72 73 public void testNoResourcesCommit() throws Exception 74 { 75 runTest(new Operation[] 76 { 77 new Operation(Operation.BEGIN, 1), 78 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 79 new Operation(Operation.COMMIT, 1), 80 }); 81 } 82 83 public void testNoResourcesRollback() throws Exception 84 { 85 runTest(new Operation[] 86 { 87 new Operation(Operation.BEGIN, 1), 88 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 89 new Operation(Operation.ROLLBACK, 1), 90 }); 91 } 92 93 public void testNoResourcesSuspendResume() throws Exception 94 { 95 runTest(new Operation[] 96 { 97 new Operation(Operation.BEGIN, 1), 98 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 99 new Operation(Operation.SUSPEND, 1), 100 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 101 new Operation(Operation.RESUME, 1), 102 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 103 new Operation(Operation.COMMIT, 1), 104 }); 105 } 106 107 public void testOneResourceCommit() throws Exception 108 { 109 runTest(new Operation[] 110 { 111 new Operation(Operation.BEGIN, 1), 112 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 113 new Operation(Operation.CREATE, 1), 114 new Operation(Operation.ENLIST, 1), 115 new Operation(Operation.STATE, 1, Resource.ACTIVE), 116 new Operation(Operation.COMMIT, 1), 117 new Operation(Operation.STATE, 1, Resource.COMMITTED), 118 }); 119 } 120 121 public void testOneResourceRollback() throws Exception 122 { 123 runTest(new Operation[] 124 { 125 new Operation(Operation.BEGIN, 1), 126 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 127 new Operation(Operation.CREATE, 1), 128 new Operation(Operation.ENLIST, 1), 129 new Operation(Operation.STATE, 1, Resource.ACTIVE), 130 new Operation(Operation.ROLLBACK, 1), 131 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 132 }); 133 } 134 135 public void testOneResourceSetRollback() throws Exception 136 { 137 runTest(new Operation[] 138 { 139 new Operation(Operation.BEGIN, 1), 140 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 141 new Operation(Operation.CREATE, 1), 142 new Operation(Operation.ENLIST, 1), 143 new Operation(Operation.STATE, 1, Resource.ACTIVE), 144 new Operation(Operation.SETROLLBACK, 1), 145 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 146 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 147 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 148 }); 149 } 150 151 public void testLocalResourceCommit() throws Exception 152 { 153 runTest(new Operation[] 154 { 155 new Operation(Operation.BEGIN, 1), 156 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 157 new Operation(Operation.CREATE_LOCAL, 1), 158 new Operation(Operation.ENLIST, 1), 159 new Operation(Operation.STATE, 1, Resource.ACTIVE), 160 new Operation(Operation.COMMIT, 1), 161 new Operation(Operation.STATE, 1, Resource.COMMITTED), 162 }); 163 } 164 165 public void testLocalResourceRollback() throws Exception 166 { 167 runTest(new Operation[] 168 { 169 new Operation(Operation.BEGIN, 1), 170 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 171 new Operation(Operation.CREATE_LOCAL, 1), 172 new Operation(Operation.ENLIST, 1), 173 new Operation(Operation.STATE, 1, Resource.ACTIVE), 174 new Operation(Operation.ROLLBACK, 1), 175 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 176 }); 177 } 178 179 public void testLocalResourceSetRollback() throws Exception 180 { 181 runTest(new Operation[] 182 { 183 new Operation(Operation.BEGIN, 1), 184 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 185 new Operation(Operation.CREATE_LOCAL, 1), 186 new Operation(Operation.ENLIST, 1), 187 new Operation(Operation.STATE, 1, Resource.ACTIVE), 188 new Operation(Operation.SETROLLBACK, 1), 189 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 190 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 191 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 192 }); 193 } 194 195 public void testLocalResourceCommitFail() throws Exception 196 { 197 runTest(new Operation[] 198 { 199 new Operation(Operation.BEGIN, 1), 200 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 201 new Operation(Operation.CREATE_LOCAL, 1), 202 new Operation(Operation.ENLIST, 1), 203 new Operation(Operation.STATE, 1, Resource.ACTIVE), 204 new Operation(Operation.FAIL_LOCAL, 1), 205 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 206 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 207 }); 208 } 209 210 public void testTwoResourceSameRMCommit() throws Exception 211 { 212 runTest(new Operation[] 213 { 214 new Operation(Operation.BEGIN, 1), 215 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 216 new Operation(Operation.CREATE, 1), 217 new Operation(Operation.ENLIST, 1), 218 new Operation(Operation.STATE, 1, Resource.ACTIVE), 219 new Operation(Operation.CREATE, 2), 220 new Operation(Operation.ENLIST, 2), 221 new Operation(Operation.STATE, 2, Resource.ACTIVE), 222 new Operation(Operation.COMMIT, 1), 223 new Operation(Operation.STATE, 1, Resource.COMMITTED), 224 new Operation(Operation.STATE, 2, Resource.COMMITTED), 225 }); 226 } 227 228 public void testTwoResourceSameRMRollback() throws Exception 229 { 230 runTest(new Operation[] 231 { 232 new Operation(Operation.BEGIN, 1), 233 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 234 new Operation(Operation.CREATE, 1), 235 new Operation(Operation.ENLIST, 1), 236 new Operation(Operation.STATE, 1, Resource.ACTIVE), 237 new Operation(Operation.CREATE, 2), 238 new Operation(Operation.ENLIST, 2), 239 new Operation(Operation.STATE, 2, Resource.ACTIVE), 240 new Operation(Operation.ROLLBACK, 1), 241 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 242 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 243 }); 244 } 245 246 public void testTwoResourceSameRMSetRollback() throws Exception 247 { 248 runTest(new Operation[] 249 { 250 new Operation(Operation.BEGIN, 1), 251 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 252 new Operation(Operation.CREATE, 1), 253 new Operation(Operation.ENLIST, 1), 254 new Operation(Operation.STATE, 1, Resource.ACTIVE), 255 new Operation(Operation.CREATE, 2), 256 new Operation(Operation.ENLIST, 2), 257 new Operation(Operation.STATE, 2, Resource.ACTIVE), 258 new Operation(Operation.SETROLLBACK, 1), 259 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 260 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 261 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 262 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 263 }); 264 } 265 266 public void testTwoResourceDifferentRMCommitOneReadOnly() throws Exception 267 { 268 runTest(new Operation[] 269 { 270 new Operation(Operation.BEGIN, 1), 271 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 272 new Operation(Operation.CREATE, 1), 273 new Operation(Operation.ENLIST, 1), 274 new Operation(Operation.STATE, 1, Resource.ACTIVE), 275 new Operation(Operation.SETSTATUS, 1, XAResource.XA_RDONLY), 276 new Operation(Operation.CREATE, 2), 277 new Operation(Operation.ENLIST, 2), 278 new Operation(Operation.DIFFRM, 2), 279 new Operation(Operation.STATE, 2, Resource.ACTIVE), 280 new Operation(Operation.COMMIT, 1), 281 new Operation(Operation.STATE, 1, Resource.PREPARED), 282 new Operation(Operation.STATE, 2, Resource.COMMITTED), 283 }); 284 } 285 286 public void testTwoResourceDifferentRMRollbackOneReadOnly() throws Exception 287 { 288 runTest(new Operation[] 289 { 290 new Operation(Operation.BEGIN, 1), 291 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 292 new Operation(Operation.CREATE, 1), 293 new Operation(Operation.ENLIST, 1), 294 new Operation(Operation.STATE, 1, Resource.ACTIVE), 295 new Operation(Operation.SETSTATUS, 1, XAResource.XA_RDONLY), 296 new Operation(Operation.CREATE, 2), 297 new Operation(Operation.ENLIST, 2), 298 new Operation(Operation.DIFFRM, 2), 299 new Operation(Operation.STATE, 2, Resource.ACTIVE), 300 new Operation(Operation.ROLLBACK, 1), 301 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 302 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 303 }); 304 } 305 306 public void testTwoResourceDifferentRMSetRollbackOneReadOnly() throws Exception 307 { 308 runTest(new Operation[] 309 { 310 new Operation(Operation.BEGIN, 1), 311 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 312 new Operation(Operation.CREATE, 1), 313 new Operation(Operation.ENLIST, 1), 314 new Operation(Operation.STATE, 1, Resource.ACTIVE), 315 new Operation(Operation.SETSTATUS, 1, XAResource.XA_RDONLY), 316 new Operation(Operation.CREATE, 2), 317 new Operation(Operation.ENLIST, 2), 318 new Operation(Operation.DIFFRM, 2), 319 new Operation(Operation.STATE, 2, Resource.ACTIVE), 320 new Operation(Operation.SETROLLBACK, 1), 321 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 322 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 323 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 324 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 325 }); 326 } 327 328 public void testTwoResourceOneLocalCommitOneReadOnly() throws Exception 329 { 330 runTest(new Operation[] 331 { 332 new Operation(Operation.BEGIN, 1), 333 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 334 new Operation(Operation.CREATE_LOCAL, 1), 335 new Operation(Operation.ENLIST, 1), 336 new Operation(Operation.STATE, 1, Resource.ACTIVE), 337 new Operation(Operation.CREATE, 2), 338 new Operation(Operation.ENLIST, 2), 339 new Operation(Operation.STATE, 2, Resource.ACTIVE), 340 new Operation(Operation.SETSTATUS, 2, XAResource.XA_RDONLY), 341 new Operation(Operation.COMMIT, 1), 342 new Operation(Operation.STATE, 1, Resource.COMMITTED), 343 new Operation(Operation.STATE, 2, Resource.PREPARED), 344 }); 345 } 346 347 public void testTwoResourceOneLocalRollbackOneReadOnly() throws Exception 348 { 349 runTest(new Operation[] 350 { 351 new Operation(Operation.BEGIN, 1), 352 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 353 new Operation(Operation.CREATE_LOCAL, 1), 354 new Operation(Operation.ENLIST, 1), 355 new Operation(Operation.STATE, 1, Resource.ACTIVE), 356 new Operation(Operation.CREATE, 2), 357 new Operation(Operation.ENLIST, 2), 358 new Operation(Operation.STATE, 2, Resource.ACTIVE), 359 new Operation(Operation.SETSTATUS, 2, XAResource.XA_RDONLY), 360 new Operation(Operation.ROLLBACK, 1), 361 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 362 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 363 }); 364 } 365 366 public void testTwoResourceOneLocalSetRollbackOneReadOnly() throws Exception 367 { 368 runTest(new Operation[] 369 { 370 new Operation(Operation.BEGIN, 1), 371 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 372 new Operation(Operation.CREATE_LOCAL, 1), 373 new Operation(Operation.ENLIST, 1), 374 new Operation(Operation.STATE, 1, Resource.ACTIVE), 375 new Operation(Operation.CREATE, 2), 376 new Operation(Operation.ENLIST, 2), 377 new Operation(Operation.STATE, 2, Resource.ACTIVE), 378 new Operation(Operation.SETSTATUS, 2, XAResource.XA_RDONLY), 379 new Operation(Operation.SETROLLBACK, 1), 380 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 381 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 382 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 383 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 384 }); 385 } 386 387 public void testTwoResourceOneLocalCommitFailOneReadOnly() throws Exception 388 { 389 runTest(new Operation[] 390 { 391 new Operation(Operation.BEGIN, 1), 392 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 393 new Operation(Operation.CREATE_LOCAL, 1), 394 new Operation(Operation.ENLIST, 1), 395 new Operation(Operation.STATE, 1, Resource.ACTIVE), 396 new Operation(Operation.CREATE, 2), 397 new Operation(Operation.ENLIST, 2), 398 new Operation(Operation.STATE, 2, Resource.ACTIVE), 399 new Operation(Operation.SETSTATUS, 2, XAResource.XA_RDONLY), 400 new Operation(Operation.FAIL_LOCAL, 1), 401 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 402 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 403 new Operation(Operation.STATE, 2, Resource.PREPARED), 404 }); 405 } 406 407 public void testTwoResourceDifferentRMCommit() throws Exception 408 { 409 runTest(new Operation[] 410 { 411 new Operation(Operation.BEGIN, 1), 412 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 413 new Operation(Operation.CREATE, 1), 414 new Operation(Operation.ENLIST, 1), 415 new Operation(Operation.STATE, 1, Resource.ACTIVE), 416 new Operation(Operation.CREATE, 2), 417 new Operation(Operation.ENLIST, 2), 418 new Operation(Operation.DIFFRM, 2), 419 new Operation(Operation.STATE, 2, Resource.ACTIVE), 420 new Operation(Operation.COMMIT, 1), 421 new Operation(Operation.STATE, 1, Resource.COMMITTED), 422 new Operation(Operation.STATE, 2, Resource.COMMITTED), 423 }); 424 } 425 426 public void testTwoResourceDifferentRMRollback() throws Exception 427 { 428 runTest(new Operation[] 429 { 430 new Operation(Operation.BEGIN, 1), 431 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 432 new Operation(Operation.CREATE, 1), 433 new Operation(Operation.ENLIST, 1), 434 new Operation(Operation.STATE, 1, Resource.ACTIVE), 435 new Operation(Operation.CREATE, 2), 436 new Operation(Operation.ENLIST, 2), 437 new Operation(Operation.DIFFRM, 2), 438 new Operation(Operation.STATE, 2, Resource.ACTIVE), 439 new Operation(Operation.ROLLBACK, 1), 440 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 441 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 442 }); 443 } 444 445 public void testTwoResourceDifferentRMSetRollback() throws Exception 446 { 447 runTest(new Operation[] 448 { 449 new Operation(Operation.BEGIN, 1), 450 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 451 new Operation(Operation.CREATE, 1), 452 new Operation(Operation.ENLIST, 1), 453 new Operation(Operation.STATE, 1, Resource.ACTIVE), 454 new Operation(Operation.CREATE, 2), 455 new Operation(Operation.ENLIST, 2), 456 new Operation(Operation.DIFFRM, 2), 457 new Operation(Operation.STATE, 2, Resource.ACTIVE), 458 new Operation(Operation.SETROLLBACK, 1), 459 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 460 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 461 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 462 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 463 }); 464 } 465 466 public void testTwoResourceOneLocalCommit() throws Exception 467 { 468 runTest(new Operation[] 469 { 470 new Operation(Operation.BEGIN, 1), 471 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 472 new Operation(Operation.CREATE_LOCAL, 1), 473 new Operation(Operation.ENLIST, 1), 474 new Operation(Operation.STATE, 1, Resource.ACTIVE), 475 new Operation(Operation.CREATE, 2), 476 new Operation(Operation.ENLIST, 2), 477 new Operation(Operation.STATE, 2, Resource.ACTIVE), 478 new Operation(Operation.COMMIT, 1), 479 new Operation(Operation.STATE, 1, Resource.COMMITTED), 480 new Operation(Operation.STATE, 2, Resource.COMMITTED), 481 }); 482 } 483 484 public void testTwoResourceOneLocalRollback() throws Exception 485 { 486 runTest(new Operation[] 487 { 488 new Operation(Operation.BEGIN, 1), 489 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 490 new Operation(Operation.CREATE_LOCAL, 1), 491 new Operation(Operation.ENLIST, 1), 492 new Operation(Operation.STATE, 1, Resource.ACTIVE), 493 new Operation(Operation.CREATE, 2), 494 new Operation(Operation.ENLIST, 2), 495 new Operation(Operation.STATE, 2, Resource.ACTIVE), 496 new Operation(Operation.ROLLBACK, 1), 497 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 498 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 499 }); 500 } 501 502 public void testTwoResourceOneLocalSetRollback() throws Exception 503 { 504 runTest(new Operation[] 505 { 506 new Operation(Operation.BEGIN, 1), 507 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 508 new Operation(Operation.CREATE_LOCAL, 1), 509 new Operation(Operation.ENLIST, 1), 510 new Operation(Operation.STATE, 1, Resource.ACTIVE), 511 new Operation(Operation.CREATE, 2), 512 new Operation(Operation.ENLIST, 2), 513 new Operation(Operation.STATE, 2, Resource.ACTIVE), 514 new Operation(Operation.SETROLLBACK, 1), 515 new Operation(Operation.STATUS, 1, Status.STATUS_MARKED_ROLLBACK), 516 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 517 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 518 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 519 }); 520 } 521 522 public void testTwoResourceOneLocalCommitFail() throws Exception 523 { 524 runTest(new Operation[] 525 { 526 new Operation(Operation.BEGIN, 1), 527 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 528 new Operation(Operation.CREATE_LOCAL, 1), 529 new Operation(Operation.ENLIST, 1), 530 new Operation(Operation.STATE, 1, Resource.ACTIVE), 531 new Operation(Operation.CREATE, 2), 532 new Operation(Operation.ENLIST, 2), 533 new Operation(Operation.STATE, 2, Resource.ACTIVE), 534 new Operation(Operation.FAIL_LOCAL, 1), 535 new Operation(Operation.COMMIT, 1, 0, new RollbackException ()), 536 new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), 537 new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), 538 }); 539 } 540 541 public void testOneResourceCommitHeurRB() throws Exception 542 { 543 runTest(new Operation[] 544 { 545 new Operation(Operation.BEGIN, 1), 546 new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE), 547 new Operation(Operation.CREATE, 1), 548 new Operation(Operation.ENLIST, 1), 549 new Operation(Operation.STATE, 1, Resource.ACTIVE), 550 new Operation(Operation.SETSTATUS, 1, XAException.XA_HEURRB), 551 new Operation(Operation.COMMIT, 1, 0,new RollbackException ()), 552 new Operation(Operation.STATE, 1, Resource.FORGOT), 553 }); 554 } 555 } 556 | Popular Tags |