Code Review Request JDK-8161106 Improve SSLSocket test template

Xuelei Fan xuelei.fan at oracle.com
Mon Jul 25 03:38:40 UTC 2016


Hi Weijun,

Please review this update.  Per you suggestion, I updated to use
CountDownLatch for the synchronization between client and server.
CountDownLatch is more simple than ReentrantLock in the context.

    http://cr.openjdk.java.net/~xuelei/8161106/webrev.03/

Thanks,
Xuelei

On 7/14/2016 1:44 AM, Artem Smotrakov wrote:
> Hi Xuelei,
> 
> The webrev looks good to me. Please see inline.
> 
> On 07/12/2016 10:36 PM, Xuelei Fan wrote:
>> Thanks for the feedback, Artem.  Here is the updated webrev per your
>> suggestions:
>>
>>      http://cr.openjdk.java.net/~xuelei/8161106/webrev.02/
>>
>> On 7/13/2016 1:03 AM, Artem Smotrakov wrote:
>>> Hi Xuelei,
>>>
>>> I am not an official reviewer, but I have a couple of comments.
>>>
>>> 1. line 149: would it be better to check this condition in a loop?
>>>
>> clientCondition.await() will wait for 30 seconds.  Need no loop any
>> more.  If adding a loop, it may become a potential deadloop and cause
>> timeout issue.
> Right, I didn't get it when I read it first time.
>>> 2. Using try-with-resources blocks might simplify doServerSide() a
>>> little bit (no need to call close() on sockets, and a couple of "try"
>>> blocks might be probably removed)
>>>
>> I considered to use try-with-resources.  But as the lock is introduced.
>> and we want to support socket accept timeout, it more convenient to me
>> to use the traditional try-finally clauses.
> Agree. Using try-with resources would remove one try-finally block, but
> probably it would introduce nested "try" blocks.
>>> 3. Minor: it might be better to define timeout values as constants with
>>> meaningful names.
>>>
>> Maybe.  Normally, if a number is used only once, I may not define a
>> field for it.
> Sure.
>>
>>> 4. Minor: lines 268-273 seem to work, but I am wondering if it would be
>>> better to use File.separator instead of "/" (someone may run the test on
>>> Windows, but without Cygwin).
>>>
>> I think JDK file I/O would take care of this file separator
>> interoperability.  It's good to use File.separator, but as the path may
>> contains a few separator in test case following this template, for
>> example:
>>
>>      pathToStores = "../../../../../javax/net/ssl";
>>
>> Using File.separator would not make nice line.
> Okay. I am not an expert in Java I/O, so I am not sure. Agree,
> File.separator wouldn't make it nicer.
>>> 5. SSLSocketSample() constructor, startServer() and startClient()
>>> methods:
>>>
>>> Recently we've had a couple of test issue where no exception was printed
>>> on client/server sides. It happened because exceptions were caught and
>>> stored, but then tests waited infinitely for another thread to finish.
>>> Then, jtreg just killed the tests. As a result, no exception was printed
>>> out. It might be better to simplify this code to print out an exception
>>> right after it's caught, and then throw a runtime exception if
>>> serverException or clientException are not null. Probably there is a
>>> side effect that logs may be a little messy sometimes because of lack of
>>> synchronization, but maybe something like synchronized(System.out) may
>>> help.
>>>
>> This update should be able to avoid the infinitely waiting.  Updated to
>> print the exception message right after it is caught.
> Thanks. It might be better to print whole stack trace in
> srartServer/startClient
>>> 6. Minor: it might be better to make class constants uppercase
>>>
>>> http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367
>>>
>>>
>> Good to use uppercase.  I plan to modify this template to a overridable
>> one so that test case can extend this template.  By then, those fields
>> will not be declared as constants any more.  Let's use the current names
>> for a while.
> Sure.
> 
> Artem
>>
>> Thanks,
>> Xuelei
>>
>>> Artem
>>>
>>> On 07/10/2016 10:16 PM, Xuelei Fan wrote:
>>>> There is a nice catch of the timeout miss-match during the handling of
>>>> serverIsReady in doClientSide().   Here is the updated webrev:
>>>>
>>>>       http://cr.openjdk.java.net/~xuelei/8161106/webrev.01/
>>>>
>>>> Thanks,
>>>> Xuelei
>>>>
>>>> On 7/11/2016 11:44 AM, Xuelei Fan wrote:
>>>>> Hi,
>>>>>
>>>>> Please review this enhancement of SSLSocket test template:
>>>>>       http://cr.openjdk.java.net/~xuelei/8161106/webrev.00/
>>>>>
>>>>> There are some known issues with the current SSLSocket test template
>>>>> (test/javax/net/ssl/templates/SSLSocketTemplate.java) in the
>>>>> automation
>>>>> testing environment:
>>>>> 1. the client or server can be blocked if the peer run into
>>>>> problems, as
>>>>> may result in intermittent timeout failure.
>>>>> 2. the server accepted connection may be not linked to the expected
>>>>> client. For example, some other test case may try to use and
>>>>> connect to
>>>>> a free server socket port, unfortunately this port can be actually
>>>>> opened by the server of SSLSocketTemplate because there is no
>>>>> synchronization about the free socket port between test cases. 
>>>>> It's OK
>>>>> to run the test singly, but may result in weird intermittent
>>>>> failure in
>>>>> the automation testing environment.
>>>>>
>>>>> The new test template in this update considers the noises above.
>>>>>
>>>>> Thanks,
>>>>> Xuelei
>>>>>
> 




More information about the security-dev mailing list