[jbossts-issues] [JBoss JIRA] (JBTM-1147) Refactor ParticipantCompletion recovery tests to remove duplicate rules

Ondřej Chaloupka (JIRA) jira-events at lists.jboss.org
Mon Jun 3 11:25:54 EDT 2013


    [ https://issues.jboss.org/browse/JBTM-1147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12778908#comment-12778908 ] 

Ondřej Chaloupka commented on JBTM-1147:
----------------------------------------

I went through the rules I didn't find any other good adept for refactoring/reducing except of the rule mentioned in the description. I've found to have problem with usage of INTERFACE in the rule so I've changed it for using upper class. There is my change here:
https://github.com/ochaloup/narayana/commit/c81c125a0f44c0edf79b7d4d8c42ad67936956d8

Then there are two rules "RULE open trace file" and "RULE reset periodic recovery wait time" staying in all the files. Those could be extracted to some common file used by all tests. But I think that it would degrade readability.

I checked just the syntax of the rules. I supposed that all of them have some purpose in the set. I haven't tried to deeply investigate whether some of them are not useful for the logic of the tests anymore.

We agreed with Paul that this would be more difficult than what I understand to be the object of the issue. There would be probably needed some input from Andrew Dinn.
Currently this issue is not critical and will be defered till the time that there will be need to work with the scripts.
                
> 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.M4
>
>   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: http://www.atlassian.com/software/jira



More information about the jbossts-issues mailing list