Refactor ParticipantCompletion recovery tests to remove duplicate
rules
-----------------------------------------------------------------------
Key: JBTM-1147
URL:
https://issues.jboss.org/browse/JBTM-1147
Project: JBoss Transaction Manager
Issue Type: Task
Security Level: Public(Everyone can see)
Components: XTS
Affects Versions: 4.16.4, 5.0.0.M1
Reporter: Paul Robinson
Assignee: Ondřej Chaloupka
Priority: Minor
Fix For: 5.0.0.M3
Original Estimate: 3 days
Remaining Estimate: 3 days
The Byteman rules for the participant completion XTS recovery tests have many rules that
are almost duplicates of each other. For example:
The following rules in BACrashDuringCommit could be refactored into a single rule
{code}
#####################################################################
# Setup counter MultiParticipantParticipantCompletionParticipantCloseTest
#
RULE setup counter MultiParticipantParticipantCompletionParticipantCloseTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseTest
METHOD run()
AT ENTRY
IF TRUE
DO debug("creating counter and rendezvous"),
createCounter("closes", 3),
createRendezvous("closes-complete", 2)
ENDRULE
#####################################################################
# Setup counter MultiParticipantCoordinatorCompletionParticipantCloseTest
#
RULE setup counter MultiParticipantCoordinatorCompletionParticipantCloseTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseAndExitTest
METHOD run()
AT ENTRY
IF TRUE
DO debug("creating counter and rendezvous"),
createCounter("closes", 3),
createRendezvous("closes-complete", 2)
ENDRULE
#####################################################################
# Setup counter MultiServiceParticipantCompletionParticipantCloseTest
#
RULE setup counter MultiServiceParticipantCompletionParticipantCloseTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseTest
METHOD run()
AT ENTRY
IF TRUE
DO debug("creating counter and rendezvous"),
createCounter("closes", 3),
createRendezvous("closes-complete", 2)
ENDRULE
#####################################################################
# Setup counter MultiServiceParticipantCompletionParticipantCloseAndExitTest
#
RULE setup counter MultiServiceParticipantCompletionParticipantCloseAndExitTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseAndExitTest
METHOD run()
AT ENTRY
IF TRUE
DO debug("creating counter and rendezvous"),
createCounter("closes", 3),
createRendezvous("closes-complete", 2)
ENDRULE
{code}
These can be re-factored in to a rule like this:
{code}
RULE setup counter
INTERFACE org.jboss.jbossts.xts.servicetests.test.XTSServiceTest
METHOD run()
AT ENTRY
IF $0.getClass().getName().contains("ParticipantCompletionParticipant")
DO debug("creating counter and rendezvous"),
createCounter("closes", 3),
createRendezvous("closes-complete", 2)
ENDRULE
{code}
This assumes that we have the same numbers for each use of:
{code}
createCounter("closes", 3),
createRendezvous("closes-complete", 2)
{code}
Which is *usually* the case:
{code}
grep -r createCounter\(\"closes\" .
./src/test/resources/scripts/BACrashDuringCommit.txt: createCounter("closes",
3),
./src/test/resources/scripts/BACrashDuringCommit.txt: createCounter("closes",
3),
./src/test/resources/scripts/BACrashDuringCommit.txt: createCounter("closes",
3),
./src/test/resources/scripts/BACrashDuringCommit.txt: createCounter("closes",
3),
./src/test/resources/scripts/BACrashDuringOnePhaseCommit.txt:
createCounter("closes", 1),
./src/test/resources/scripts/BASubordinateCrashDuringCommit.txt:
createCounter("closes", 3),
./src/test/resources/scripts/BASubordinateCrashDuringComplete.txt:
createCounter("closes", 3),
./target/test-classes/scripts/BACrashDuringCommit.txt:
createCounter("closes", 3),
./target/test-classes/scripts/BACrashDuringCommit.txt:
createCounter("closes", 3),
./target/test-classes/scripts/BACrashDuringCommit.txt:
createCounter("closes", 3),
./target/test-classes/scripts/BACrashDuringCommit.txt:
createCounter("closes", 3),
./target/test-classes/scripts/BACrashDuringOnePhaseCommit.txt:
createCounter("closes", 1),
./target/test-classes/scripts/BASubordinateCrashDuringCommit.txt:
createCounter("closes", 3),
./target/test-classes/scripts/BASubordinateCrashDuringComplete.txt:
createCounter("closes", 3),
{code}
Maybe we just override the rule for the one exception. Ideas for what to do here are to
be investigated.
Also, the following similar rules are also present in this file:
{code}
#####################################################################
# Wait on Rendezvous before calling uba.close() on
MultiServiceParticipantCompletionParticipantCloseTest
#
RULE wait for closes MultiParticipantParticipantCompletionParticipantCloseTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseTest
METHOD run()
AT CALL UserBusinessActivity.close()
IF TRUE
DO debug("waiting to call close"),
rendezvous("closes-complete"),
debug("rendezvous complete, calling close")
ENDRULE
#####################################################################
# Wait on Rendezvous before calling uba.close() on
MultiParticipantParticipantCompletionParticipantCloseAndExitTest
#
RULE wait for closes MultiParticipantParticipantCompletionParticipantCloseAndExitTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseAndExitTest
METHOD run()
AT CALL UserBusinessActivity.close()
IF TRUE
DO debug("waiting to call close"),
rendezvous("closes-complete"),
debug("rendezvous complete, calling close")
ENDRULE
#####################################################################
# Wait on Rendezvous before calling uba.close() on
MultiServiceParticipantCompletionParticipantCloseTest
#
RULE wait for closes MultiServiceParticipantCompletionParticipantCloseTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseTest
METHOD run()
AT CALL UserBusinessActivity.close()
IF TRUE
DO debug("waiting to call close"),
rendezvous("closes-complete"),
debug("rendezvous complete, calling close")
ENDRULE
#####################################################################
# Wait on Rendezvous before calling uba.close() on
MultiServiceParticipantCompletionParticipantCloseAndExitTest
#
RULE wait for closes MultiServiceParticipantCompletionParticipantCloseAndExitTest
CLASS
org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseAndExitTest
METHOD run()
AT CALL UserBusinessActivity.close()
IF TRUE
DO debug("waiting to call close"),
rendezvous("closes-complete"),
debug("rendezvous complete, calling close")
ENDRULE
{code}
Which could be replaced with something like this:
{code}
RULE wait for closes
INTERFACE org.jboss.jbossts.xts.servicetests.test.XTSServiceTest
METHOD run()
AT CALL UserBusinessActivity.close()
IF $0.getClass().getName().contains("ParticipantCompletionParticipant")
DO debug("waiting to call close"),
rendezvous("closes-complete"),
debug("rendezvous complete, calling close")
ENDRULE
{code}
We could also re-factor these two rules out into a separate Byteman script and add it to
all tests that need it.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: