+1
>-----Original Message----- >From: Denis Kishenko [mailto:[EMAIL PROTECTED] >Sent: Wednesday, November 22, 2006 5:40 PM >To: [email protected] >Subject: Re: [classlib][net] issue H-1879 HttpURLConnectionTest > >Alexei, > >Synchronization of accept() looks like test improvement, so I will >attach new patch to fix H-1879 and we will try to find solution for >accept synchronization. > >2006/11/22, Fedotov, Alexei A <[EMAIL PROTECTED]>: >> Ok, I see. Makes sense for me. I cannot imagine anything better at this >> moment, and if this works, that's great. >> >> There is still a problem with accept() call which is not synchronized, >> but I don't see how we can fix this correctly. accept() call is >> synchronized using related ServerSocket object, but this doesn't help us >> - this blocking doesn't release an object lock. >> >> With best regards, >> Alexei Fedotov, >> Intel Java & XML Engineering >> >> >-----Original Message----- >> >From: Denis Kishenko [mailto:[EMAIL PROTECTED] >> >Sent: Tuesday, November 21, 2006 8:06 PM >> >To: [email protected] >> >Subject: Re: [classlib][net] issue H-1879 HttpURLConnectionTest >> > >> >I can suggest add flag to avoid situation described above (see attached >> >fix). >> > >> >2006/11/21, Denis Kishenko <[EMAIL PROTECTED]>: >> >> Alexei, >> >> >> >> Yep, syncronization is necessary but not such way. >> >> >> >> As you said, test try to control server/proxy starting using >> >> bound.wait(5000). It looks like on linux server/proxy thread started >> >> eallier then on winxp. >> >> >> >> In other words, what we are waiting for >> >> 1. start server thread >> >> 2. bound.wait >> >> 3. bound.notify >> >> 4. start proxy thread >> >> 5. bound.wait >> >> 6. bound.notify >> >> 7. connect >> >> but we have on linux >> >> 1. start server thread >> >> 2. bound.notify >> >> 3. bound.wait >> >> ---- wait 5 seconds ----- >> >> 4. start proxy thread >> >> 5. bound.notify >> >> 6. bound.wait >> >> ---- wait 5 seconds ----- >> >> 7. connect >> >> >> >> So we try to connect when proxy closed. >> >> >> >> 2006/11/21, Alexei Fedotov <[EMAIL PROTECTED]>: >> >> > Denis, >> >> > Thank you for your fix! >> >> > >> >> > Here are few comments. I don't think we need to remove >> >> > synchronization. Contrary, I believe we need to fix it somehow. >> >> > >> >> > For example, when wait(5000) expires without notification, this >> means >> >> > that the test fail, and we better should report it right at the >> same >> >> > place. >> >> > >> >> > Digging further we can see that actual accept() calls are not >> >> > synchronized at all. There should be someting like conditional >> >> > variable to synchronize such events. I will write back when I get >> an >> >> > idea how to do it properly. >> >> > >> >> > A second option is to increase reading timeout set by setSoTimeout >> - >> >> > probably servers do not start fast enough. >> >> > >> >> > Thanks again, Alexei >> >> > >> >> > >> >> > On 11/21/06, Denis Kishenko <[EMAIL PROTECTED]> wrote: >> >> > > Alexei, >> >> > > >> >> > > I attached fix to issue, could you try it, please? >> >> > > >> >> > > 2006/11/21, Alexei Fedotov <[EMAIL PROTECTED]>: >> >> > > > Denis wrote, >> >> > > > > Yep, Harmony+DRLVM on SuSE >> >> > > > >> >> > > > A peculiar thing about this test is that it passes on SuSE 10, >> but >> >> > > > fails on SuSE 9 which is used for our regression test runs. >> >> > > > >> >> > > > -- >> >> > > > Thank you, >> >> > > > Alexei >> >> > > > >> >> > > > On 11/21/06, Denis Kishenko <[EMAIL PROTECTED]> wrote: >> >> > > > > 2006/11/21, Jimmy, Jing Lv <[EMAIL PROTECTED]>: >> >> > > > > > Denis Kishenko wrote: >> >> > > > > > > Hi all >> >> > > > > > > >> >> > > > > > > I'm investigating H-1879 and need some help or >> >recommendations from net >> >> > > > > > > guru. >> >> > > > > > > I have extracted failed test from >> >> > > > > > > >> >org.apache.harmony.tests.internal.net.www.protocol.http.HttpURLConnecti >> onTe >> >st, >> >> > > > > > > >> >> > > > > > > please see below. It failed with connection refused >> >exception. >> >> > > > > > > >> >> > > > > > > Java code works well, it looks like some problem with >> native >> >code. By >> >> > > > > > > the way telnet can't connect to created server too. >> >> > > > > > > >> >> > > > > > > If somebody can help with this issue it would be great. >> >> > > > > > > >> >> > > > > > > Thanks. >> >> > > > > > > >> >> > > > > > > =========== Test ============== >> >> > > > > > > >> >> > > > > > > package >> >org.apache.harmony.tests.internal.net.www.protocol.http; >> >> > > > > > > >> >> > > > > > > import java.io.IOException; >> >> > > > > > > import java.net.HttpURLConnection; >> >> > > > > > > import java.net.InetSocketAddress; >> >> > > > > > > import java.net.Proxy; >> >> > > > > > > import java.net.ServerSocket; >> >> > > > > > > import java.net.Socket; >> >> > > > > > > import java.net.SocketTimeoutException; >> >> > > > > > > import java.net.URL; >> >> > > > > > > >> >> > > > > > > import junit.framework.TestCase; >> >> > > > > > > >> >> > > > > > > public class SimpleTest extends TestCase { >> >> > > > > > > >> >> > > > > > > private final static Object bound = new Object(); >> >> > > > > > > >> >> > > > > > > static class MockServer extends Thread { >> >> > > > > > > ServerSocket serverSocket; >> >> > > > > > > boolean accepted = false; >> >> > > > > > > >> >> > > > > > > public MockServer(String name) throws IOException >> { >> >> > > > > > > super(name); >> >> > > > > > > >> >> > > > > > > serverSocket = new ServerSocket(0); >> >> > > > > > > serverSocket.setSoTimeout(1000); >> >> > > > > > > } >> >> > > > > > > >> >> > > > > > > public int port() { >> >> > > > > > > return serverSocket.getLocalPort(); >> >> > > > > > > } >> >> > > > > > > >> >> > > > > > > public void run() { >> >> > > > > > > try { >> >> > > > > > > synchronized (bound) { >> >> > > > > > > bound.notify(); >> >> > > > > > > } >> >> > > > > > > try { >> >> > > > > > > serverSocket.accept().close(); >> >> > > > > > > accepted = true; >> >> > > > > > > } catch (SocketTimeoutException ignore) { >> >> > > > > > > } >> >> > > > > > > serverSocket.close(); >> >> > > > > > > } catch (IOException e) { >> >> > > > > > > throw new RuntimeException(e); >> >> > > > > > > } >> >> > > > > > > } >> >> > > > > > > } >> >> > > > > > > >> >> > > > > > > public void testUsingProxy() throws Exception { >> >> > > > > > > MockServer server = new MockServer("server"); >> >> > > > > > > MockServer proxy = new MockServer("proxy"); >> >> > > > > > > >> >> > > > > > > URL url = new URL("http://localhost:" + >> >server.port()); >> >> > > > > > > >> >> > > > > > > HttpURLConnection connection = (HttpURLConnection) >> url >> >> > > > > > > .openConnection(new Proxy(Proxy.Type.HTTP, >> >> > > > > > > new InetSocketAddress("localhost", >> >> > > > > > > proxy.port()))); >> >> > > > > > > >> >> > > > > > > // HttpURLConnection connection = >> >> > > > > > > (HttpURLConnection)url.openConnection(); >> >> > > > > > > >> >> > > > > > > connection.setConnectTimeout(2000); >> >> > > > > > > connection.setReadTimeout(2000); >> >> > > > > > > >> >> > > > > > > server.start(); >> >> > > > > > > synchronized(bound) { >> >> > > > > > > bound.wait(5000); >> >> > > > > > > } >> >> > > > > > > proxy.start(); >> >> > > > > > > synchronized(bound) { >> >> > > > > > > bound.wait(5000); >> >> > > > > > > } >> >> > > > > > > >> >> > > > > > > connection.connect(); >> >> > > > > > > >> >> > > > > > > server.join(); >> >> > > > > > > proxy.join(); >> >> > > > > > > } >> >> > > > > > > >> >> > > > > > > } >> >> > > > > > > >> >> > > > > > > ========= Harmony+drlvm output ============ >> >> > > > > > > There was 1 error: >> >> > > > > > > 1) >> >> > > > > > > >> >testUsingProxy(org.apache.harmony.tests.internal.net.www.protocol.http. >> Simp >> >leTest)java.net.ConnectException: >> >> > > > > > > >> >> > > > > > > localhost/127.0.0.1:57896 - Connection refused >> >> > > > > > > at >> >> > > > > > > >> >org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.jav >> a:22 >> >4) >> >> > > > > > > >> >> > > > > > > at >> >> > > > > > > >> >org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.jav >> a:49 >> >6) >> >> > > > > > > >> >> > > > > > > at java.net.Socket.connect(Socket.java:980) >> >> > > > > > > at >> >> > > > > > > >> >org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectio >> n.ge >> >tHTTPConnection(HttpURLConnection.java:627) >> >> > > > > > > >> >> > > > > > > at >> >> > > > > > > >> >org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectio >> n.co >> >nnect(HttpURLConnection.java:608) >> >> > > > > > > >> >> > > > > > > at >> >> > > > > > > >> >org.apache.harmony.tests.internal.net.www.protocol.http.SimpleTest.test >> Usin >> >gProxy(SimpleTest.java:78) >> >> > > > > > > >> >> > > > > > > at >> java.lang.reflect.VMReflection.invokeMethod(Native >> >Method) >> >> > > > > > > >> >> > > > > > > FAILURES!!! >> >> > > > > > > Tests run: 1, Failures: 0, Errors: 1 >> >> > > > > > > >> >> > > > > > >> >> > > > > > The test passes on Harmony+IBMVME on WindowsXP on my >> desktop, >> >so you >> >> > > > > > mean Harmony+DRLVM here? >> >> > > > > Yep, Harmony+DRLVM on SuSE >> >> > > > > >> >> > > > > > >> >> > > > > > But IMHO the VM does not matter in network issues, the >> native >> >code call >> >> > > > > > directly to the system APIs(of course, through Port-Lib), >> so I >> >wonder if >> >> > > > > > there's something wrong in thread(handle by VM)? Just a >> >thought. >> >> > > > > > >> >> > > > > > And IMO, that telnet shall not connect to the server is due >> to >> >> > > > > > "serverSocket.setSoTimeout(1000);", which make >> >"serverSocket.accept()" >> >> > > > > > wait for only one second. >> >> > > > > Of course I had changed timeout to 10sec when used telnet :) >> >> > > > > >> >> > > > > > >> >> > > > > > I have to download Harmony+DRLVM to debug into, but the >> speed >> >of network >> >> > > > > > is poor here :) >> >> > > > > > >> >> > > > > > >> >> > > > > > -- >> >> > > > > > >> >> > > > > > Best Regards! >> >> > > > > > >> >> > > > > > Jimmy, Jing Lv >> >> > > > > > China Software Development Lab, IBM >> >> > > > > > >> >> > > > > >> >> > > > > >> >> > > > > -- >> >> > > > > Denis M. Kishenko >> >> > > > > Intel Middleware Products Division >> >> > > > > >> >> > > > >> >> > > >> >> > > >> >> > > -- >> >> > > Denis M. Kishenko >> >> > > Intel Middleware Products Division >> >> > > >> >> > >> >> > >> >> > -- >> >> > Thank you, >> >> > Alexei >> >> > >> >> >> >> >> >> -- >> >> Denis M. Kishenko >> >> Intel Middleware Products Division >> >> >> > >> > >> >-- >> >Denis M. Kishenko >> >Intel Middleware Products Division >> > > >-- >Denis M. Kishenko >Intel Middleware Products Division
