You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Regis <xu...@gmail.com> on 2009/01/23 12:44:27 UTC

[classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

did anyone notice the failures on linux? or it just happen on my local env?
junit.framework.AssertionFailedError: Unexpected exception when 
setReuseAddress is the default case and we 
bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The address 
is not available
at junit.framework.Assert.fail(Assert.java:47)
at 
org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
at java.lang.reflect.Method.invoke(Method.java:317)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at 
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

I found the default value of ServerSocket.getReuseAddress() on Linux 
should be true, but on Harmony is false, following simple test show this:

ServerSocket serverSocket = new ServerSocket();
System.out.println(serverSocket.getReuseAddress());

and I found it's introduced by commit r723103, and the code set default 
value is removed intended, so I think there must be a reason. From spec, 
it's undefined:
When a ServerSocket is created the initial setting of SO_REUSEADDR is 
not defined

So both Harmony and RI are reasonable.

Should we follow RI or mark it as non-bug difference and correct the 
test case?

-- 
Best Regards,
Regis.

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Regis <xu...@gmail.com>.
Tony Wu wrote:
> Hi Regis
> 
> +        // only comparing ASCII, so assume english locale
> +        osName = (osName == null ? null : osName.toLowerCase(Locale.ENGLISH));
> I believe we have Util.toASCIILowerCase(), it's simpler and faster.
> 
> On Fri, Feb 13, 2009 at 3:06 PM, Regis <xu...@gmail.com> wrote:
>> Jim Yu wrote:
>>> 2009/2/12 Regis <xu...@gmail.com>
>>>
>>>> Jim Yu wrote:
>>>>
>>>>> Hi Regis,
>>>>> I reproduced this failure on my Linux platform. Since the specs
>>>>> says SO_REUSEADDR  "is used only
>>>>> for MulticastSockets in java, and it is set by default for
>>>>> MulticastSockets." So as you said, the default value
>>>>>
>>>> I can't find this statement in specs. And at:
>>>
>>> You can find the statement in the spec from the description for
>>> SO_REUSEADDR
>>> field of SocketOptions. .
>>>
>>>>
>>>> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
>>>>
>>>> it says "Enabling SO_REUSEADDR prior to binding the socket using
>>>> bind(SocketAddress) allows the socket to be bound even though a previous
>>>> connection is in a timeout state. " and it really affect behaviors of
>>>> bind.
>>>
>>>>  for SO_REUSEADDR in ServerSocket which is not defined is reasonable.
>>>> IMO,
>>>>> it
>>>>> is a non-bug difference between
>>>>> Harmony and RI.
>>>>>
>>>> I incline to follow RI. Because there are already lots of code depends on
>>>> RI's behaviors: create a new ServerSocket which reuse address default, no
>>>> need to set it explicit.
>>>>
>>>> If Harmony set the default value to false, many applications may not be
>>>> able to bind address correctly.
>>>
>>> The spec says "the initial setting of SO_REUSEADDR is not defined."
>>> However, it sounds reasonable to follow RI.
>>>
>>>>> 2009/1/23 Regis <xu...@gmail.com>
>>>>>
>>>>>  did anyone notice the failures on linux? or it just happen on my local
>>>>>> env?
>>>>>> junit.framework.AssertionFailedError: Unexpected exception when
>>>>>> setReuseAddress is the default case and we
>>>>>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The
>>>>>> address
>>>>>> is not available
>>>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
>>>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>>>> at java.lang.reflect.Method.invoke(Method.java:317)
>>>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>>>>>> at
>>>>>>
>>>>>>
>>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>>>>>
>>>>>> I found the default value of ServerSocket.getReuseAddress() on Linux
>>>>>> should
>>>>>> be true, but on Harmony is false, following simple test show this:
>>>>>>
>>>>>> ServerSocket serverSocket = new ServerSocket();
>>>>>> System.out.println(serverSocket.getReuseAddress());
>>>>>>
>>>>>> and I found it's introduced by commit r723103, and the code set default
>>>>>> value is removed intended, so I think there must be a reason. From
>>>>>> spec,
>>>>>> it's undefined:
>>>>>> When a ServerSocket is created the initial setting of SO_REUSEADDR is
>>>>>> not
>>>>>> defined
>>>>>>
>>>>>> So both Harmony and RI are reasonable.
>>>>>>
>>>>>> Should we follow RI or mark it as non-bug difference and correct the
>>>>>> test
>>>>>> case?
>>>>>>
>>>>>> --
>>>>>> Best Regards,
>>>>>> Regis.
>>>>>>
>>>>>>
>>>>>
>>>> --
>>>> Best Regards,
>>>> Regis.
>>>>
>>>
>>>
>> I attach a patch for this issue. It test the platform and set SO_REUSEADDR
>> after ServerSocket created if on Linux.
>>
>> I don't like this way, because it contains platform depended code in java
>> code, and I think it's better to do this in native. But ServerSocket and
>> Socket use the same native method to create socket fd, we can't know the
>> caller is ServerSocket or Socket.
>>
>> Do anyone has better ideas?
> 
> A natural idea came to my mind, just make another method for
> ServerSocket which set the extra options and then call the original
> method to create a fd.

It is what old way(before netwok code refactor) did, which use different 
implementations, PlainServerSocketImpl for ServerSocket and 
PlainSocketImpl for Socket, now they all use PlainSocketImpl. But maybe 
I could hack PlainSocketImpl, and add createServerStreamSocket in 
INetworkSystem again, just like before refactor.

>> --
>> Best Regards,
>> Regis.
>>
> 
> 
> 


-- 
Best Regards,
Regis.

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Tony Wu <wu...@gmail.com>.
Hi Regis

+        // only comparing ASCII, so assume english locale
+        osName = (osName == null ? null : osName.toLowerCase(Locale.ENGLISH));
I believe we have Util.toASCIILowerCase(), it's simpler and faster.

On Fri, Feb 13, 2009 at 3:06 PM, Regis <xu...@gmail.com> wrote:
> Jim Yu wrote:
>>
>> 2009/2/12 Regis <xu...@gmail.com>
>>
>>> Jim Yu wrote:
>>>
>>>> Hi Regis,
>>>> I reproduced this failure on my Linux platform. Since the specs
>>>> says SO_REUSEADDR  "is used only
>>>> for MulticastSockets in java, and it is set by default for
>>>> MulticastSockets." So as you said, the default value
>>>>
>>> I can't find this statement in specs. And at:
>>
>>
>> You can find the statement in the spec from the description for
>> SO_REUSEADDR
>> field of SocketOptions. .
>>
>>>
>>>
>>> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
>>>
>>> it says "Enabling SO_REUSEADDR prior to binding the socket using
>>> bind(SocketAddress) allows the socket to be bound even though a previous
>>> connection is in a timeout state. " and it really affect behaviors of
>>> bind.
>>
>>
>>>  for SO_REUSEADDR in ServerSocket which is not defined is reasonable.
>>> IMO,
>>>>
>>>> it
>>>> is a non-bug difference between
>>>> Harmony and RI.
>>>>
>>> I incline to follow RI. Because there are already lots of code depends on
>>> RI's behaviors: create a new ServerSocket which reuse address default, no
>>> need to set it explicit.
>>>
>>> If Harmony set the default value to false, many applications may not be
>>> able to bind address correctly.
>>
>>
>> The spec says "the initial setting of SO_REUSEADDR is not defined."
>> However, it sounds reasonable to follow RI.
>>
>>>
>>>> 2009/1/23 Regis <xu...@gmail.com>
>>>>
>>>>  did anyone notice the failures on linux? or it just happen on my local
>>>>>
>>>>> env?
>>>>> junit.framework.AssertionFailedError: Unexpected exception when
>>>>> setReuseAddress is the default case and we
>>>>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The
>>>>> address
>>>>> is not available
>>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>>> at
>>>>>
>>>>>
>>>>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
>>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>>> at java.lang.reflect.Method.invoke(Method.java:317)
>>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>>> at
>>>>>
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>>>>> at
>>>>>
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>>> at
>>>>>
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>>>>> at
>>>>>
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>>>>> at
>>>>>
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>>>>> at
>>>>>
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>>>>
>>>>> I found the default value of ServerSocket.getReuseAddress() on Linux
>>>>> should
>>>>> be true, but on Harmony is false, following simple test show this:
>>>>>
>>>>> ServerSocket serverSocket = new ServerSocket();
>>>>> System.out.println(serverSocket.getReuseAddress());
>>>>>
>>>>> and I found it's introduced by commit r723103, and the code set default
>>>>> value is removed intended, so I think there must be a reason. From
>>>>> spec,
>>>>> it's undefined:
>>>>> When a ServerSocket is created the initial setting of SO_REUSEADDR is
>>>>> not
>>>>> defined
>>>>>
>>>>> So both Harmony and RI are reasonable.
>>>>>
>>>>> Should we follow RI or mark it as non-bug difference and correct the
>>>>> test
>>>>> case?
>>>>>
>>>>> --
>>>>> Best Regards,
>>>>> Regis.
>>>>>
>>>>>
>>>>
>>>>
>>> --
>>> Best Regards,
>>> Regis.
>>>
>>
>>
>>
> I attach a patch for this issue. It test the platform and set SO_REUSEADDR
> after ServerSocket created if on Linux.
>
> I don't like this way, because it contains platform depended code in java
> code, and I think it's better to do this in native. But ServerSocket and
> Socket use the same native method to create socket fd, we can't know the
> caller is ServerSocket or Socket.
>
> Do anyone has better ideas?

A natural idea came to my mind, just make another method for
ServerSocket which set the extra options and then call the original
method to create a fd.
>
> --
> Best Regards,
> Regis.
>



-- 
Tony Wu
China Software Development Lab, IBM

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Regis <xu...@gmail.com>.
Jim Yu wrote:
> 2009/2/12 Regis <xu...@gmail.com>
> 
>> Jim Yu wrote:
>>
>>> Hi Regis,
>>> I reproduced this failure on my Linux platform. Since the specs
>>> says SO_REUSEADDR  "is used only
>>> for MulticastSockets in java, and it is set by default for
>>> MulticastSockets." So as you said, the default value
>>>
>> I can't find this statement in specs. And at:
> 
> 
> You can find the statement in the spec from the description for SO_REUSEADDR
> field of SocketOptions. .
> 
>>
>> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
>>
>> it says "Enabling SO_REUSEADDR prior to binding the socket using
>> bind(SocketAddress) allows the socket to be bound even though a previous
>> connection is in a timeout state. " and it really affect behaviors of bind.
> 
> 
>>  for SO_REUSEADDR in ServerSocket which is not defined is reasonable. IMO,
>>> it
>>> is a non-bug difference between
>>> Harmony and RI.
>>>
>> I incline to follow RI. Because there are already lots of code depends on
>> RI's behaviors: create a new ServerSocket which reuse address default, no
>> need to set it explicit.
>>
>> If Harmony set the default value to false, many applications may not be
>> able to bind address correctly.
> 
> 
> The spec says "the initial setting of SO_REUSEADDR is not defined."
> However, it sounds reasonable to follow RI.
> 
>>
>>> 2009/1/23 Regis <xu...@gmail.com>
>>>
>>>  did anyone notice the failures on linux? or it just happen on my local
>>>> env?
>>>> junit.framework.AssertionFailedError: Unexpected exception when
>>>> setReuseAddress is the default case and we
>>>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The address
>>>> is not available
>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>> at
>>>>
>>>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>> at java.lang.reflect.Method.invoke(Method.java:317)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>>>
>>>> I found the default value of ServerSocket.getReuseAddress() on Linux
>>>> should
>>>> be true, but on Harmony is false, following simple test show this:
>>>>
>>>> ServerSocket serverSocket = new ServerSocket();
>>>> System.out.println(serverSocket.getReuseAddress());
>>>>
>>>> and I found it's introduced by commit r723103, and the code set default
>>>> value is removed intended, so I think there must be a reason. From spec,
>>>> it's undefined:
>>>> When a ServerSocket is created the initial setting of SO_REUSEADDR is not
>>>> defined
>>>>
>>>> So both Harmony and RI are reasonable.
>>>>
>>>> Should we follow RI or mark it as non-bug difference and correct the test
>>>> case?
>>>>
>>>> --
>>>> Best Regards,
>>>> Regis.
>>>>
>>>>
>>>
>>>
>> --
>> Best Regards,
>> Regis.
>>
> 
> 
> 
I attach a patch for this issue. It test the platform and set 
SO_REUSEADDR after ServerSocket created if on Linux.

I don't like this way, because it contains platform depended code in 
java code, and I think it's better to do this in native. But 
ServerSocket and Socket use the same native method to create socket fd, 
we can't know the caller is ServerSocket or Socket.

Do anyone has better ideas?

-- 
Best Regards,
Regis.

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Regis <xu...@gmail.com>.
Regis wrote:
> Jim Yu wrote:
>> 2009/2/12 Regis <xu...@gmail.com>
>>
>>> Jim Yu wrote:
>>>
>>>> Hi Regis,
>>>> I reproduced this failure on my Linux platform. Since the specs
>>>> says SO_REUSEADDR  "is used only
>>>> for MulticastSockets in java, and it is set by default for
>>>> MulticastSockets." So as you said, the default value
>>>>
>>> I can't find this statement in specs. And at:
>>
>>
>> You can find the statement in the spec from the description for 
>> SO_REUSEADDR
>> field of SocketOptions. .
> Thanks. That really confuse me :( Maybe spec's bug?
>>
>>>
>>> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean) 
>>>
>>>
>>> it says "Enabling SO_REUSEADDR prior to binding the socket using
>>> bind(SocketAddress) allows the socket to be bound even though a previous
>>> connection is in a timeout state. " and it really affect behaviors of 
>>> bind.
>>
>>
>>>  for SO_REUSEADDR in ServerSocket which is not defined is reasonable. 
>>> IMO,
>>>> it
>>>> is a non-bug difference between
>>>> Harmony and RI.
>>>>
>>> I incline to follow RI. Because there are already lots of code 
>>> depends on
>>> RI's behaviors: create a new ServerSocket which reuse address 
>>> default, no
>>> need to set it explicit.
>>>
>>> If Harmony set the default value to false, many applications may not be
>>> able to bind address correctly.
>>
>>
>> The spec says "the initial setting of SO_REUSEADDR is not defined."
>> However, it sounds reasonable to follow RI.
>>
> I will raise JIRA to trace this.

The JIRA is at:
https://issues.apache.org/jira/browse/HARMONY-6090

>>>
>>>> 2009/1/23 Regis <xu...@gmail.com>
>>>>
>>>>  did anyone notice the failures on linux? or it just happen on my local
>>>>> env?
>>>>> junit.framework.AssertionFailedError: Unexpected exception when
>>>>> setReuseAddress is the default case and we
>>>>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The 
>>>>> address
>>>>> is not available
>>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>>> at
>>>>>
>>>>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760) 
>>>>>
>>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>>> at java.lang.reflect.Method.invoke(Method.java:317)
>>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>>> at
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128) 
>>>>>
>>>>> at
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
>>>>>
>>>>> at
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
>>>>>
>>>>> at
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 
>>>>>
>>>>> at
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 
>>>>>
>>>>> at
>>>>>
>>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 
>>>>>
>>>>>
>>>>> I found the default value of ServerSocket.getReuseAddress() on Linux
>>>>> should
>>>>> be true, but on Harmony is false, following simple test show this:
>>>>>
>>>>> ServerSocket serverSocket = new ServerSocket();
>>>>> System.out.println(serverSocket.getReuseAddress());
>>>>>
>>>>> and I found it's introduced by commit r723103, and the code set 
>>>>> default
>>>>> value is removed intended, so I think there must be a reason. From 
>>>>> spec,
>>>>> it's undefined:
>>>>> When a ServerSocket is created the initial setting of SO_REUSEADDR 
>>>>> is not
>>>>> defined
>>>>>
>>>>> So both Harmony and RI are reasonable.
>>>>>
>>>>> Should we follow RI or mark it as non-bug difference and correct 
>>>>> the test
>>>>> case?
>>>>>
>>>>> -- 
>>>>> Best Regards,
>>>>> Regis.
>>>>>
>>>>>
>>>>
>>>>
>>> -- 
>>> Best Regards,
>>> Regis.
>>>
>>
>>
>>
> 
> 


-- 
Best Regards,
Regis.

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Regis <xu...@gmail.com>.
Jim Yu wrote:
> 2009/2/12 Regis <xu...@gmail.com>
> 
>> Jim Yu wrote:
>>
>>> Hi Regis,
>>> I reproduced this failure on my Linux platform. Since the specs
>>> says SO_REUSEADDR  "is used only
>>> for MulticastSockets in java, and it is set by default for
>>> MulticastSockets." So as you said, the default value
>>>
>> I can't find this statement in specs. And at:
> 
> 
> You can find the statement in the spec from the description for SO_REUSEADDR
> field of SocketOptions. .
Thanks. That really confuse me :( Maybe spec's bug?
> 
>>
>> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
>>
>> it says "Enabling SO_REUSEADDR prior to binding the socket using
>> bind(SocketAddress) allows the socket to be bound even though a previous
>> connection is in a timeout state. " and it really affect behaviors of bind.
> 
> 
>>  for SO_REUSEADDR in ServerSocket which is not defined is reasonable. IMO,
>>> it
>>> is a non-bug difference between
>>> Harmony and RI.
>>>
>> I incline to follow RI. Because there are already lots of code depends on
>> RI's behaviors: create a new ServerSocket which reuse address default, no
>> need to set it explicit.
>>
>> If Harmony set the default value to false, many applications may not be
>> able to bind address correctly.
> 
> 
> The spec says "the initial setting of SO_REUSEADDR is not defined."
> However, it sounds reasonable to follow RI.
> 
I will raise JIRA to trace this.
>>
>>> 2009/1/23 Regis <xu...@gmail.com>
>>>
>>>  did anyone notice the failures on linux? or it just happen on my local
>>>> env?
>>>> junit.framework.AssertionFailedError: Unexpected exception when
>>>> setReuseAddress is the default case and we
>>>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The address
>>>> is not available
>>>> at junit.framework.Assert.fail(Assert.java:47)
>>>> at
>>>>
>>>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
>>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>>> at java.lang.reflect.Method.invoke(Method.java:317)
>>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>> at junit.framework.TestResult.run(TestResult.java:109)
>>>> at junit.framework.TestCase.run(TestCase.java:118)
>>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>>>> at
>>>>
>>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>>>
>>>> I found the default value of ServerSocket.getReuseAddress() on Linux
>>>> should
>>>> be true, but on Harmony is false, following simple test show this:
>>>>
>>>> ServerSocket serverSocket = new ServerSocket();
>>>> System.out.println(serverSocket.getReuseAddress());
>>>>
>>>> and I found it's introduced by commit r723103, and the code set default
>>>> value is removed intended, so I think there must be a reason. From spec,
>>>> it's undefined:
>>>> When a ServerSocket is created the initial setting of SO_REUSEADDR is not
>>>> defined
>>>>
>>>> So both Harmony and RI are reasonable.
>>>>
>>>> Should we follow RI or mark it as non-bug difference and correct the test
>>>> case?
>>>>
>>>> --
>>>> Best Regards,
>>>> Regis.
>>>>
>>>>
>>>
>>>
>> --
>> Best Regards,
>> Regis.
>>
> 
> 
> 


-- 
Best Regards,
Regis.

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Jim Yu <ju...@gmail.com>.
2009/2/12 Regis <xu...@gmail.com>

> Jim Yu wrote:
>
>> Hi Regis,
>> I reproduced this failure on my Linux platform. Since the specs
>> says SO_REUSEADDR  "is used only
>> for MulticastSockets in java, and it is set by default for
>> MulticastSockets." So as you said, the default value
>>
> I can't find this statement in specs. And at:


You can find the statement in the spec from the description for SO_REUSEADDR
field of SocketOptions. .

>
>
> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
>
> it says "Enabling SO_REUSEADDR prior to binding the socket using
> bind(SocketAddress) allows the socket to be bound even though a previous
> connection is in a timeout state. " and it really affect behaviors of bind.


>
>  for SO_REUSEADDR in ServerSocket which is not defined is reasonable. IMO,
>> it
>> is a non-bug difference between
>> Harmony and RI.
>>
> I incline to follow RI. Because there are already lots of code depends on
> RI's behaviors: create a new ServerSocket which reuse address default, no
> need to set it explicit.
>
> If Harmony set the default value to false, many applications may not be
> able to bind address correctly.


The spec says "the initial setting of SO_REUSEADDR is not defined."
However, it sounds reasonable to follow RI.

>
>
>> 2009/1/23 Regis <xu...@gmail.com>
>>
>>  did anyone notice the failures on linux? or it just happen on my local
>>> env?
>>> junit.framework.AssertionFailedError: Unexpected exception when
>>> setReuseAddress is the default case and we
>>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The address
>>> is not available
>>> at junit.framework.Assert.fail(Assert.java:47)
>>> at
>>>
>>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
>>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>>> at java.lang.reflect.Method.invoke(Method.java:317)
>>> at junit.framework.TestCase.runTest(TestCase.java:154)
>>> at junit.framework.TestCase.runBare(TestCase.java:127)
>>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>>> at junit.framework.TestResult.run(TestResult.java:109)
>>> at junit.framework.TestCase.run(TestCase.java:118)
>>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>> at junit.framework.TestSuite.run(TestSuite.java:203)
>>> at
>>>
>>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>>> at
>>>
>>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>> at
>>>
>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>>> at
>>>
>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>>> at
>>>
>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>>> at
>>>
>>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>>
>>> I found the default value of ServerSocket.getReuseAddress() on Linux
>>> should
>>> be true, but on Harmony is false, following simple test show this:
>>>
>>> ServerSocket serverSocket = new ServerSocket();
>>> System.out.println(serverSocket.getReuseAddress());
>>>
>>> and I found it's introduced by commit r723103, and the code set default
>>> value is removed intended, so I think there must be a reason. From spec,
>>> it's undefined:
>>> When a ServerSocket is created the initial setting of SO_REUSEADDR is not
>>> defined
>>>
>>> So both Harmony and RI are reasonable.
>>>
>>> Should we follow RI or mark it as non-bug difference and correct the test
>>> case?
>>>
>>> --
>>> Best Regards,
>>> Regis.
>>>
>>>
>>
>>
>>
>
> --
> Best Regards,
> Regis.
>



-- 
Best Regards,
Jim, Jun Jie Yu

China Software Development Lab, IBM

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Regis <xu...@gmail.com>.
Jim Yu wrote:
> Hi Regis,
> I reproduced this failure on my Linux platform. Since the specs
> says SO_REUSEADDR  "is used only
> for MulticastSockets in java, and it is set by default for
> MulticastSockets." So as you said, the default value
I can't find this statement in specs. And at:
http://java.sun.com/j2se/1.5.0/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)

it says "Enabling SO_REUSEADDR prior to binding the socket using 
bind(SocketAddress) allows the socket to be bound even though a previous 
connection is in a timeout state. " and it really affect behaviors of bind.

> for SO_REUSEADDR in ServerSocket which is not defined is reasonable. IMO, it
> is a non-bug difference between
> Harmony and RI.
I incline to follow RI. Because there are already lots of code depends 
on RI's behaviors: create a new ServerSocket which reuse address 
default, no need to set it explicit.

If Harmony set the default value to false, many applications may not be 
able to bind address correctly.
> 
> 2009/1/23 Regis <xu...@gmail.com>
> 
>> did anyone notice the failures on linux? or it just happen on my local env?
>> junit.framework.AssertionFailedError: Unexpected exception when
>> setReuseAddress is the default case and we
>> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The address
>> is not available
>> at junit.framework.Assert.fail(Assert.java:47)
>> at
>> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
>> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
>> at java.lang.reflect.Method.invoke(Method.java:317)
>> at junit.framework.TestCase.runTest(TestCase.java:154)
>> at junit.framework.TestCase.runBare(TestCase.java:127)
>> at junit.framework.TestResult$1.protect(TestResult.java:106)
>> at junit.framework.TestResult.runProtected(TestResult.java:124)
>> at junit.framework.TestResult.run(TestResult.java:109)
>> at junit.framework.TestCase.run(TestCase.java:118)
>> at junit.framework.TestSuite.runTest(TestSuite.java:208)
>> at junit.framework.TestSuite.run(TestSuite.java:203)
>> at
>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>> at
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>> at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>> at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>> at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>> at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>>
>> I found the default value of ServerSocket.getReuseAddress() on Linux should
>> be true, but on Harmony is false, following simple test show this:
>>
>> ServerSocket serverSocket = new ServerSocket();
>> System.out.println(serverSocket.getReuseAddress());
>>
>> and I found it's introduced by commit r723103, and the code set default
>> value is removed intended, so I think there must be a reason. From spec,
>> it's undefined:
>> When a ServerSocket is created the initial setting of SO_REUSEADDR is not
>> defined
>>
>> So both Harmony and RI are reasonable.
>>
>> Should we follow RI or mark it as non-bug difference and correct the test
>> case?
>>
>> --
>> Best Regards,
>> Regis.
>>
> 
> 
> 


-- 
Best Regards,
Regis.

Re: [classlib][luni] ServerSocketTest.test_setReuseAddressZ() faild on Linux

Posted by Jim Yu <ju...@gmail.com>.
Hi Regis,
I reproduced this failure on my Linux platform. Since the specs
says SO_REUSEADDR  "is used only
for MulticastSockets in java, and it is set by default for
MulticastSockets." So as you said, the default value
for SO_REUSEADDR in ServerSocket which is not defined is reasonable. IMO, it
is a non-bug difference between
Harmony and RI.

2009/1/23 Regis <xu...@gmail.com>

> did anyone notice the failures on linux? or it just happen on my local env?
> junit.framework.AssertionFailedError: Unexpected exception when
> setReuseAddress is the default case and we
> bind:Harmony-L3NEK37/127.0.0.1:55891:java.net.BindException: The address
> is not available
> at junit.framework.Assert.fail(Assert.java:47)
> at
> org.apache.harmony.luni.tests.java.net.ServerSocketTest.test_setReuseAddressZ(ServerSocketTest.java:760)
> at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)
> at java.lang.reflect.Method.invoke(Method.java:317)
> at junit.framework.TestCase.runTest(TestCase.java:154)
> at junit.framework.TestCase.runBare(TestCase.java:127)
> at junit.framework.TestResult$1.protect(TestResult.java:106)
> at junit.framework.TestResult.runProtected(TestResult.java:124)
> at junit.framework.TestResult.run(TestResult.java:109)
> at junit.framework.TestCase.run(TestCase.java:118)
> at junit.framework.TestSuite.runTest(TestSuite.java:208)
> at junit.framework.TestSuite.run(TestSuite.java:203)
> at
> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
> at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
>
> I found the default value of ServerSocket.getReuseAddress() on Linux should
> be true, but on Harmony is false, following simple test show this:
>
> ServerSocket serverSocket = new ServerSocket();
> System.out.println(serverSocket.getReuseAddress());
>
> and I found it's introduced by commit r723103, and the code set default
> value is removed intended, so I think there must be a reason. From spec,
> it's undefined:
> When a ServerSocket is created the initial setting of SO_REUSEADDR is not
> defined
>
> So both Harmony and RI are reasonable.
>
> Should we follow RI or mark it as non-bug difference and correct the test
> case?
>
> --
> Best Regards,
> Regis.
>



-- 
Best Regards,
Jim, Jun Jie Yu

China Software Development Lab, IBM