19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.core; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Assert; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.InetAddress; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.InetSocketAddress; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.ServerSocket; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.Socket; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.SocketException; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.SocketTimeoutException; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.nio.channels.SocketChannel; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.concurrent.Semaphore; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Regression tests for various socket related problems. And a few general 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * socket tests. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SocketTest extends TestCase { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String NON_EXISTING_ADDRESS = "123.123.123.123"; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String KNOW_GOOD_ADDRESS = "209.85.129.147"; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String PACKAGE_DROPPING_ADDRESS = "191.167.0.1"; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test for basic bind/connect/accept behavior. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSocketSimple() throws Exception { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket ss; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket s, s1; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int port; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IOException lastEx = null; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ss = new ServerSocket(); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (port = 9900; port < 9999; port++) { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ss.bind(new InetSocketAddress("127.0.0.1", port)); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lastEx = null; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException ex) { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lastEx = ex; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lastEx != null) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw lastEx; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s = new Socket("127.0.0.1", port); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s1 = ss.accept(); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s.getOutputStream().write(0xa5); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(0xa5, s1.getInputStream().read()); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s1.getOutputStream().write(0x5a); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(0x5a, s.getInputStream().read()); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Regression test for #820068: Wildcard address 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testWildcardAddress() throws Exception { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket s2 = new Socket(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s2.bind(new InetSocketAddress((InetAddress) null, 12345)); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] addr = s2.getLocalAddress().getAddress(); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 4; i++) { 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Not the wildcard address", 0, addr[i]); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Regression test for #865753: server sockets not closing properly 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testServerSocketClose() throws Exception { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket s3 = new ServerSocket(23456); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s3.close(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket s4 = new ServerSocket(23456); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s4.close(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Regression test for #876985: SO_REUSEADDR not working properly 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Exception serverError = null; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSetReuseAddress() throws IOException { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InetSocketAddress addr = new InetSocketAddress(8383); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ServerSocket serverSock = new ServerSocket(); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverSock.setReuseAddress(true); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverSock.bind(addr); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Semaphore semThreadEnd = new Semaphore(0); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Thread() { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket sock = serverSock.accept(); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sock.getInputStream().read(); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sock.close(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException e) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverError = e; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project semThreadEnd.release(); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }.start(); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Give the server a bit of time for startup 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(2000); 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (InterruptedException ex) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Ignored. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket client = new Socket("localhost", 8383); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project client.getOutputStream().write(1); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Just leave this connection open from the client side. It will be 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // closed from the server side so the server stays in the TIME_WAIT 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // state for a while. setReuseAddress() should be able to handle this. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project semThreadEnd.acquire(); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (InterruptedException e) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverSock.close(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket serverSock2 = new ServerSocket(); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverSock2.setReuseAddress(true); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverSock2.bind(addr); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project serverSock2.close(); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serverError != null) { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("Server must complete without error", serverError); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Regression for 916701, a wrong exception was thrown after timeout of 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // a ServerSocket. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testTimeoutException() throws IOException { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket s = new ServerSocket(9800); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s.setSoTimeout(2000); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s.accept(); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SocketTimeoutException e) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this is ok. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Regression for issue 1001980, openening a SocketChannel threw an Exception 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testNativeSocketChannelOpen() throws IOException { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SocketChannel.open(); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18125f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// Regression test for issue 1018016, connecting ignored a set timeout. 18225f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// 18325f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// Disabled because test behaves differently depending on networking 18425f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// environment. It works fine in the emulator and one the device with 18525f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// WLAN, but when 3G comes into play, the possible existence of a 18625f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// proxy makes it fail. 18725f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// 18825f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// @LargeTest 18925f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// public void testSocketSetSOTimeout() throws IOException { 19025f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// Socket sock = new Socket(); 19125f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// int timeout = 5000; 19225f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// long start = System.currentTimeMillis(); 19325f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// try { 19425f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// sock.connect(new InetSocketAddress(NON_EXISTING_ADDRESS, 80), timeout); 19525f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } catch (SocketTimeoutException e) { 19625f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// // expected 19725f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// long delay = System.currentTimeMillis() - start; 19825f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// if (Math.abs(delay - timeout) > 1000) { 19925f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// fail("timeout was not accurate. expected: " + timeout 20025f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// + " actual: " + delay + " miliseconds."); 20125f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } 20225f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } finally { 20325f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// try { 20425f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// sock.close(); 20525f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } catch (IOException ioe) { 20625f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// // ignore 20725f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } 20825f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } 20925f963753ea762c12c74c0dcb861b023ac92177aJorg Pleumann// } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Regression test for 1062928: Dotted IP addresses (e.g., 192.168.100.1) 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * appear to be broken in the M5 SDK. 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tests that a connection given a ip-addressv4 such as 192.168.100.100 does 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not fail - sdk m5 seems only to accept dns names instead of ip numbers. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ip 209.85.129.147 (one address of www.google.com) on port 80 (http) is 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * used to test the connection. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Commenting out this test since it is flaky, even at the best of times. See 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// #1191317 for Info. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Suppress 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disable_testConnectWithIP4IPAddr() { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // call a Google Web server 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InetSocketAddress scktAddrss = new InetSocketAddress(KNOW_GOOD_ADDRESS, 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 80); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket clntSckt = new Socket(); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clntSckt.connect(scktAddrss, 5000); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Throwable e) { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("connection problem:" + e.getClass().getName() + ": " 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + e.getMessage()); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clntSckt.close(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Regression test for #1058962: Socket.close() does not cause 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // socket.connect() to return immediately. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Socket client; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Exception error; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean connected; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This test isn't working now, but really should work. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// TODO Enable this test again. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Suppress 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disable_testSocketConnectClose() { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project client = new Socket(); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Thread() { 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project client.connect(new InetSocketAddress(PACKAGE_DROPPING_ADDRESS, 1357)); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception ex) { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = ex; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project connected = true; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }.start(); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(1000); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull("Connect must not fail immediately. Maybe try different address.", error); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse("Connect must not succeed. Maybe try different address.", connected); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project client.close(); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(1000); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (error == null) { 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("Socket connect still ongoing"); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (!(error instanceof SocketException)) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("Socket connect interrupted with wrong error: " + error.toString()); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception ex) { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException(ex); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 295