RFR: 8244133: Refactor nsk/jdi tests to reduce code duplication in settingBreakpoint communication

Leonid Mesnik leonid.mesnik at oracle.com
Fri May 1 22:42:22 UTC 2020


Hi

> On May 1, 2020, at 1:12 PM, Chris Plummer <chris.plummer at oracle.com> wrote:
> 
> Hi Leonid,
> 
> Overall looks good.
> 
> How did you verify that all settingBreakpoint() implementations were the same? How did you find that some of the breakpointForCommunication() implementations were different?


Unfortunately I didn't find a good way to check that all these method are exactly the same. I just go through diff without lines common for all methods and verify that nothing unexpected was removed.
Using this I found the different  breakpointForCommunication() and settingBreakpoint() implementation. I found 2  variants of   settingBreakpoint(). The one which set breakpointLocation (or location) and one which don't set. 


Additionally I grepped new files to check that lines like ' static final int PASSED' and other known patterns are removed.
> 
> A few minor things in JDIBase:
> 
>  108             throws JDITestRuntimeException {
> 
> I think it would look better with the { on a new line.
> 
>   80     // used by tests with breakpoint communication
>   81     public EventRequestManager eventRManager;
>   82     public EventQueue eventQueue;
>   83     public EventSet eventSet;
>   84     public EventIterator eventIterator;
>   85 
>   86     // additional fields initialized during breakpoint communication
>   87     public Location breakpLocation = null;
>   88     public BreakpointEvent bpEvent;
> 
> Do these fields need to be public and not just protected? Public fields in java are not the norm.
> 
>   91     /*
>   92      * private BreakpointRequest settingBreakpoint(ThreadReference, ReferenceType,
>   93      *                                             String, String, String)
>   94      *
>   95      * It sets up a breakpoint at given line number within a given method in a given class
>   96      * for a given thread.
>   97      *
>   98      * Return value: BreakpointRequest object  in case of success
>   99      *
>  100      * JDITestRuntimeException  in case of an Exception thrown within the method
>  101      */
>  123             int n =
>  124                     ((IntegerValue) testedClass.getValue(testedClass.fieldByName(bpLine))).value();
> 
> I'm not sure why the comment includes the prototype, but in any case it is out of date. I suggest just removing it.
> 
> Also, there are double-spaces in lines 98 and 100.
> 
I could make fields protected and remove comments. But I want to review base class and  might be make more refactoring.  Also there are a couple of tests with strange formatting, so I am going to add them separately.
I just don't want to put all this in single change. So diff contains mostly removal of same lines and it is easier to check it.

Leonid
> thanks,
> 
> Chris
> 
> On 4/29/20 4:45 PM, Leonid Mesnik wrote:
>> Hi
>> 
>> Could you please review following fix which remove code duplication by moving methods BreakpointRequest settingBreakpoint, getEventSet, breakpointForCommunication and log1,2,3 in base class.
>> 
>> The fix is huge but pretty straight forward, I tried to keep changes as small as possible so most tests just changed to extends JDIBase and corresponding methods and fields were deleted. 
>> 
>> Some tests used slightly different 'breakpointForCommunication()' implementation so they override it now. 
>> 
>> Some tests contain change like this:
>> -                     eventRequest1 = eventRManager.createBreakpointRequest(location);
>> +                     eventRequest1 = eventRManager.createBreakpointRequest(breakpLocation);
>> it is because they had 'location' and not 'breakpLocation' which is set by settingBreakpoint(...). So just merged location and breakpLocation.
>> 
>> All tests passed, so the main goal is to ensure that changes don't introduce false positive results ignoring exit codes and statuses.
>> 
>> I quickly verified that updated files don't contain declarations of variable like PASSED, testExitCode and other.
>> 
>> The JDIBase and all tests could be improved, also there are still a lot of tests which could use it as a base as well as other base classes for idi debuggers. However I  want to keep this fix as simple as possible.
>> 
>> werbev: http://cr.openjdk.java.net/~lmesnik/8244133/webrev.00/ <http://cr.openjdk.java.net/~lmesnik/8244133/webrev.00/>
>> bug: https://bugs.openjdk.java.net/browse/JDK-8244133 <https://bugs.openjdk.java.net/browse/JDK-8244133>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20200501/697f3db8/attachment-0001.htm>


More information about the serviceability-dev mailing list