Hi Chris,

the changeset looks reasonable, reviewed.

Thanks,
-- Igor

> On Mar 21, 2018, at 3:26 PM, David Holmes <david.hol...@oracle.com> wrote:
> 
> Sorry Chris I just don't have time to try and figure this one out. If it 
> works uses it.
> 
> David
> 
> On 22/03/2018 4:24 AM, Chris Plummer wrote:
>> Yeah, this was all new to me. Before this I didn't know anything about jtreg 
>> IO other than the use of OutputAnalyzer for capture and verification.
>> Thanks for reviewing.
>> Chris
>> On 3/21/18 11:08 AM, serguei.spit...@oracle.com wrote:
>>> Hi Chris,
>>> 
>>> It looks good to me.
>>> It is a little bit more complicated than one would expect but reasonable.
>>> 
>>> Thanks,
>>> Serguei
>>> 
>>> 
>>> On 3/21/18 09:31, Chris Plummer wrote:
>>>> Ping. I still need a couple of reviews for this.
>>>> 
>>>> thanks,
>>>> 
>>>> Chris
>>>> 
>>>> On 3/19/18 3:50 PM, Chris Plummer wrote:
>>>>> I looked into modifying OutputAnalyzer (actually ended up being 
>>>>> ProcessTools that needed all the changes) to be more flexible so it could 
>>>>> support LingeredApp. The problem I ran into is that ProcessTools is all 
>>>>> static, but I needed to create and return a context. It ended up being 
>>>>> too much disruption, so I instead have the ProcessTools.getOutput() code 
>>>>> as part of LingeredApp.
>>>>> 
>>>>> Another thing I discovered is that you can use OutputAnalyzer with 
>>>>> already generated output, so this option is still available to users of 
>>>>> LingeredApp. You just need to do something like:
>>>>> 
>>>>>     OutputAnalyzer out = new 
>>>>> OutputAnalyzer(lingeredApp.getOutput().getStdout(), 
>>>>> lingeredApp.getOutput().getStderr());
>>>>> 
>>>>> I didn't change any test to take advantage of this, but it's there if 
>>>>> someone wants it.
>>>>> 
>>>>> I've included another webrev below (completely different from the 
>>>>> original). In the end, all LingeredApp stdout and stderr is dumped after 
>>>>> the app exits. The old way of storing away the stdout using an 
>>>>> InputGobbler is gone. Since getAppOutput() depended on this, and the new 
>>>>> way of saving stdout saves it as one big string rather than a List of 
>>>>> lines, getAppOutput() needed some changes to convert to the List form.
>>>>> 
>>>>> http://cr.openjdk.java.net/~cjplummer/8198655/webrev.03
>>>>> 
>>>>> thanks,
>>>>> 
>>>>> Chris
>>>>> 
>>>>> On 3/19/18 9:39 AM, Chris Plummer wrote:
>>>>>> Hi David,
>>>>>> 
>>>>>> Just to clarify one point, most of the tests that use OutputAnalyzer do 
>>>>>> not display process output unless there is an error. So part of the 
>>>>>> decision here with LingeredApp is when to display the output. Currently 
>>>>>> the stdout is captured, but not displayed, unless the tests does the 
>>>>>> work to display it, which none do. Currently stderr goes to the console. 
>>>>>> Note that some negative tests actually cause some expected stderr 
>>>>>> output, although the tests don't check for it.
>>>>>> 
>>>>>> One thought I just had is to create an async option for OutputAnalyzer 
>>>>>> so it doesn't block until the process exits. Basically that means 
>>>>>> splitting ProcessTools.getOutput() so it doesn't block. What I currently 
>>>>>> have is essentially doing that. It copies ProcessTools.getOutput(), 
>>>>>> splitting it into two parts. But all this logic is in LingeredApp, and 
>>>>>> of course doesn't have any of the output error checking support that 
>>>>>> OutputAnalyzer, which might be useful for LingeredApp. For example, the 
>>>>>> negative tests only test that launching the app failed. They could be 
>>>>>> improved by checking for specific error output.
>>>>>> 
>>>>>> Chris
>>>>>> 
>>>>>> On 3/17/18 12:11 AM, David Holmes wrote:
>>>>>>> I'm afraid I'm losing track of this change.
>>>>>>> 
>>>>>>> The key thing is that we should not have a test that launches any other 
>>>>>>> process for which we can not see the output of that process.
>>>>>>> 
>>>>>>> David
>>>>>>> 
>>>>>>> On 17/03/2018 7:48 AM, Chris Plummer wrote:
>>>>>>>> On 3/16/18 1:25 PM, serguei.spit...@oracle.com wrote:
>>>>>>>>> Hi Chris,
>>>>>>>>> 
>>>>>>>>> Thank you for taking care about this issue!
>>>>>>>>> 
>>>>>>>>> On 3/16/18 11:20, Chris Plummer wrote:
>>>>>>>>>> Hi,
>>>>>>>>>> 
>>>>>>>>>> I've resolved the issues I had before with not seeing all the stderr 
>>>>>>>>>> output when I tried to capture it. What I'd like to do now is have 
>>>>>>>>>> us decide how the output should be handled from the perspective a 
>>>>>>>>>> LingeredApp user (driver app). Currently all LingeredApp stdout is 
>>>>>>>>>> captured and gets be returned the the driver app by calling 
>>>>>>>>>> app.getAppOutput(). It does not appear in the .jtr file, but the 
>>>>>>>>>> test would have the option of dumping it there it it cared to. Only 
>>>>>>>>>> one test uses app.getAppOutput(). Currently all the LingeredApp 
>>>>>>>>>> stderr is redirected to the console, so it does not appear in the 
>>>>>>>>>> .jtr file.
>>>>>>>>> 
>>>>>>>>> Just a general comment to make sure I understand it and ensure we are 
>>>>>>>>> in sync.
>>>>>>>>> It seems much more safe to always have both stdout and stderr outputs 
>>>>>>>>> present in the .jtr automatically file independently of of what the 
>>>>>>>>> test does.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> So how do we want this changed? Some possibilities are:
>>>>>>>>>> 
>>>>>>>>>> (1) capture stderr just like stdout currently is, and leave is up 
>>>>>>>>>> the the driver app to decide if it wants to display it (after the 
>>>>>>>>>> app terminates).
>>>>>>>>> 
>>>>>>>>> It does not look good to me (see above) but maybe I'm missing 
>>>>>>>>> something important here.
>>>>>>>>> 
>>>>>>>>>> (2) capture stderr just like stdout currently is, but have 
>>>>>>>>>> LingeredApp automatically send captured output to driver app's 
>>>>>>>>>> stdout and stderr (after the app terminates).
>>>>>>>>> 
>>>>>>>>> The stdout and std err will be separated in this case, right?
>>>>>>>>> Do you have a webrev for this?
>>>>>>>> I currently have it working like this, although I need to fix 
>>>>>>>> LingeredApp.getAppOutput(). I had to make it return a single String 
>>>>>>>> instead of a List of Strings, so this breaks the one test that uses 
>>>>>>>> this API. It's easily fixed. Just haven't gotten around to it yet.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> (3) send the LingeredApp's stdout and stderr to the driver app's 
>>>>>>>>>> stdout as it is being captured (this was the original fix Igor 
>>>>>>>>>> suggested and the webrev supported). A minor alternative to this is 
>>>>>>>>>> to keep the two streams separated instead of sending both to stdout.
>>>>>>>>>> 
>>>>>>>>>> Let me know what you think. I'm inclined to go with 2, especially 
>>>>>>>>>> since normally there is little to no output from the LingeredApp.
>>>>>>>>> 
>>>>>>>>> The choice (2) looks good enough.
>>>>>>>>> Not sure it is that important to have output from stdout and stderr 
>>>>>>>>> sync'ed
>>>>>>>>> but is is important to have the stderr present in the .jtr 
>>>>>>>>> automatically.
>>>>>>>>> 
>>>>>>>>> The choice (3) looks even better if it is going to work well.
>>>>>>>> This is basically what the original webrev did. It sent LingeredApp's 
>>>>>>>> stderr and stdout to the the driver apps stdout. It's a 1 word change 
>>>>>>>> to make it send stderr to stderr. I think it has a bug though that did 
>>>>>>>> not manifest itself. It seems the new copy() code that is capturing 
>>>>>>>> stdout would be contending with the existing InputGlobbler code that 
>>>>>>>> is doing the same. I would need to fix this to make sure 
>>>>>>>> LingeredApp.getAppOutput() still returns all the apps stdout output.
>>>>>>>> 
>>>>>>>> Chris
>>>>>>>>> Not sure, it is really necessary.
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Serguei
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> BTW, here's the CR and original webrev for reference:
>>>>>>>>>> 
>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8198655
>>>>>>>>>> http://cr.openjdk.java.net/~cjplummer/8198655/webrev.00/webrev/
>>>>>>>>>> 
>>>>>>>>>> thanks,
>>>>>>>>>> 
>>>>>>>>>> Chris
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 

Reply via email to