Hi Sharath,

Your changes look fine to me. One nit:

http://cr.openjdk.java.net/~sballal/8190198/webrev.03/test/hotspot/jtreg/serviceability/sa/ClhsdbLauncher.java.html

* You should be able to remove the following line:

26 import java.util.HashMap;

Thanks,
Jini (Not a (R)eviewer).


On 11/14/2017 11:02 AM, Sharath Ballal wrote:
My changes with using the outputAnalyzer were creating timeouts.  This was seen 
with testcases creating more output.  As per the documentation of Process class 
this is expected as I was creating the outputAnalyzer after doing 
Process.waitFor().

" Because some native platforms only provide limited buffer size for standard input 
and output streams, failure to promptly write the input stream or read the output stream 
of the process may cause the process to block, or even deadlock."

Hence I made changes to create the outputAnalyzer before Process.waitFor().  
outputAnalyzer takes care of creating threads and reading the process output 
and error and hence we should not have the same problem.  The tests are passing 
on Mach5.

Here is the latest webrev: 
http://cr.openjdk.java.net/~sballal/8190198/webrev.03/

Thanks,
Sharath


-----Original Message-----
From: Sharath Ballal
Sent: Tuesday, November 07, 2017 12:09 PM
To: David Holmes; [email protected]
Subject: RE: RFR: JDK-8190198 - SA: Framework for writing 'jhsdb clhsdb' 
commands tests and testcases for some of the commands

I have made changes to use the outputAnalyzer (thanks Jini).
Latest webrev is : http://cr.openjdk.java.net/~sballal/8190198/webrev.02/

Thanks,
Sharath


-----Original Message-----
From: Sharath Ballal
Sent: Sunday, November 05, 2017 10:04 PM
To: David Holmes; [email protected]
Subject: RE: RFR: JDK-8190198 - SA: Framework for writing 'jhsdb clhsdb' 
commands tests and testcases for some of the commands

Thanks David for the comments.  Reply inline.
The new webrev is at http://cr.openjdk.java.net/~sballal/8190198/webrev.01/


Thanks,
Sharath


-----Original Message-----
From: David Holmes
Sent: Monday, October 30, 2017 11:15 AM
To: Sharath Ballal; [email protected]
Subject: Re: RFR: JDK-8190198 - SA: Framework for writing 'jhsdb clhsdb' 
commands tests and testcases for some of the commands

Hi Sharath,

I think you and Jini need to coordinate your current proposed changes. :) 
[Sharath Ballal] Jini is aware of these changes.  She will modify the testcases 
later to use the new Launcher.

I have a few comments.

On 30/10/2017 2:29 PM, Sharath Ballal wrote:
Hello,

This webrev has changes for a framework for running the 'jhsdb clhsdb'
commands and verifying the output.  It also has sanity tests for 8 of

I can't help but think the launcher should be able to utilize OutputAnalyzer. ??
[Sharath Ballal] clhsdb is an interactive command line tool.  After launching 
clhsdb, we get a prompt.  Further commands are typed on the prompt, finally we 
quit the tool.  Example:
=> sudo 
/home/sharath/java/src/java10/hs_8189061/build/linux-x86_64-normal-server-fastdebug/images/jdk/bin/jhsdb
 clhsdb --pid 8306 Attaching to process 8306, please wait...
hsdb>
hsdb>
hsdb> flags
....
......
ZombieALotInterval = 5 0
hashCode = 5 0
hsdb>
hsdb>

My understanding is that  OutputAnalyzer does not work with such cases (an 
earlier clhsdb testcase also does not use outputAnalyzer, 
open/test/jdk/sun/tools/jhsdb/BasicLauncherTest.java).  I tried creating 
OutputAnalyzer after running the commands as shown below but the testcase times 
out.
         OutputAnalyzer outputAnalyzer = new OutputAnalyzer(toolProcess);
         toolProcess.waitFor();
         output = outputAnalyzer.getOutput();

Do you require the input commands to include the "quit"? Is there a reason the 
launcher couldn't handle that itself?
[Sharath Ballal]  Launcher can do it.  I have made the changes.

Can the launcher internalize the management of the LingeredApp?
[Sharath Ballal] LingeredApp can be derived and the subclass can add more 
specific things as per the testcase.  For examples pls see 
DeadlockDetectionTest.java and LingeredAppWithDeadlock.java and other similar 
classes in the same directory.
Hence I have left it up to the user to create an instance of LingeredApp and 
pass the pid as an argument.

Can the launcher also handle the shouldSAAttach check?
[Sharath Ballal] Yes. I have made that change.

I can imagine the test logic reducing to a very simple:

println(Starting test of ...
List<String> cmds = List.of( ...);
List<String> expected = List.of(...);
List<String> unexpected = Listd.of(...); ClhsdbLauncher.run(cmds, expected, unexpected); 
// static method println("test PASSED");

I don't see why the test classes should be subclasses of the Clhsdblauncher 
class - the tests are not launchers themselves. The launcher class is just a 
utility class that should have public rather than protected methods.
[Sharath Ballal] I have done this change.

I'm not sure the approach of sending a set of commands, and having a set of 
expected outputs is the right/best way to test this. I would expect to see a 
check of the expected outcome for each command ie send a command, check the 
result, send the next command, etc. Or if you can put/detect delimiters in the 
output you could still send all the commands and then bulk process the output. 
But the present approach allows for the commands to actually do the wrong 
things, as long as the expected output appears somewhere.
[Sharath Ballal] OK. I have done these changes.

It also unclear what output corresponds to what command and why. Eg in the 
longConstant test it is not obvious why you expect to see 
markOopDesc::epoch_mask_in_place, [Sharath Ballal] 
markOopDesc::epoch_mask_in_place is one of the longConstants that is printed by 
longConstant command.

or the difference in expected output
between:

57                     "longConstant jtreg::test 6\n",
58                     "longConstant jtreg::test\n",

I'm guessing the first silently declares and sets a variable, while the second 
reads it back - is that right?
[Sharath Ballal] Yes.
I have provided a way to specify the expected/unexpected output per command and 
check it separately.

Thanks,
David

the clhsdb commands.

Pls review the changes.

Bug ID: https://bugs.openjdk.java.net/browse/JDK-8190198

Webrev: http://cr.openjdk.java.net/~sballal/8190198/webrev.00/

Thanks,

Sharath

Reply via email to