diff options
Diffstat (limited to 'tests/DumpRenderTree2/src')
10 files changed, 224 insertions, 216 deletions
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java index 4ab76e3..9bbf64a 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FileFilter.java @@ -56,12 +56,7 @@ public class FileFilter { private final Set<String> mFailList = new HashSet<String>(); private final Set<String> mSlowList = new HashSet<String>(); - private final String mRootDirPath; - - public FileFilter(String rootDirPath) { - /** It may or may not contain a trailing slash */ - this.mRootDirPath = rootDirPath; - + public FileFilter() { loadTestExpectations(); } @@ -287,37 +282,6 @@ public class FileFilter { } /** - * Return the path to the file relative to the tests root dir - * - * @param filePath - * @return - * the path relative to the tests root dir - */ - public String getRelativePath(String filePath) { - File rootDir = new File(mRootDirPath); - return filePath.replaceFirst(rootDir.getPath() + File.separator, ""); - } - - /** - * Return the path to the file relative to the tests root dir - * - * @param filePath - * @return - * the path relative to the tests root dir - */ - public String getRelativePath(File file) { - return getRelativePath(file.getAbsolutePath()); - } - - public File getAbsoluteFile(String relativePath) { - return new File(mRootDirPath, relativePath); - } - - public String getAboslutePath(String relativePath) { - return getAbsoluteFile(relativePath).getAbsolutePath(); - } - - /** * If the path contains extension (e.g .foo at the end of the file) then it changes * this (.foo) into newEnding (so it has to contain the dot if we want to preserve it). * @@ -336,4 +300,4 @@ public class FileFilter { return relativePath.substring(0, dotPos) + newEnding; } -}
\ No newline at end of file +} diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java index 4202668..4438811 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/FsUtils.java @@ -20,19 +20,35 @@ import android.util.Log; import com.android.dumprendertree2.forwarder.ForwarderManager; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.HttpClient; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.PlainSocketFactory; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.util.EntityUtils; + import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.MalformedURLException; +import java.net.SocketTimeoutException; import java.net.URL; -import java.net.URLConnection; import java.util.LinkedList; import java.util.List; @@ -45,6 +61,29 @@ public class FsUtils { private static final String SCRIPT_URL = ForwarderManager.getHostSchemePort(false) + "WebKitTools/DumpRenderTree/android/get_layout_tests_dir_contents.php"; + private static final int HTTP_TIMEOUT_MS = 5000; + + private static HttpClient sHttpClient; + + private static HttpClient getHttpClient() { + if (sHttpClient == null) { + HttpParams params = new BasicHttpParams(); + + SchemeRegistry schemeRegistry = new SchemeRegistry(); + schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), + ForwarderManager.HTTP_PORT)); + schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), + ForwarderManager.HTTPS_PORT)); + + ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(params, + schemeRegistry); + sHttpClient = new DefaultHttpClient(connectionManager, params); + HttpConnectionParams.setSoTimeout(sHttpClient.getParams(), HTTP_TIMEOUT_MS); + HttpConnectionParams.setConnectionTimeout(sHttpClient.getParams(), HTTP_TIMEOUT_MS); + } + return sHttpClient; + } + public static void writeDataToStorage(File file, byte[] bytes, boolean append) { Log.d(LOG_TAG, "writeDataToStorage(): " + file.getAbsolutePath()); try { @@ -98,32 +137,34 @@ public class FsUtils { return null; } - byte[] bytes = null; - try { - InputStream inputStream = null; - ByteArrayOutputStream outputStream = null; - try { - URLConnection urlConnection = url.openConnection(); - inputStream = urlConnection.getInputStream(); - outputStream = new ByteArrayOutputStream(); - - byte[] buffer = new byte[4096]; - int length; - while ((length = inputStream.read(buffer)) > 0) { - outputStream.write(buffer, 0, length); + HttpGet httpRequest = new HttpGet(url.toString()); + ResponseHandler<byte[]> handler = new ResponseHandler<byte[]>() { + @Override + public byte[] handleResponse(HttpResponse response) throws IOException { + if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + return null; } + HttpEntity entity = response.getEntity(); + return (entity == null ? null : EntityUtils.toByteArray(entity)); + } + }; - bytes = outputStream.toByteArray(); - } finally { - if (inputStream != null) { - inputStream.close(); - } - if (outputStream != null) { - outputStream.close(); + byte[] bytes = null; + try { + /** + * TODO: Not exactly sure why some requests hang indefinitely, but adding this + * timeout (in static getter for http client) in loop helps. + */ + boolean timedOut; + do { + timedOut = false; + try { + bytes = getHttpClient().execute(httpRequest, handler); + } catch (SocketTimeoutException e) { + timedOut = true; + Log.w(LOG_TAG, "Expected SocketTimeoutException: " + url, e); } - } - } catch (FileNotFoundException e) { - Log.w(LOG_TAG, "readDataFromUrl(): File not found: " + e.getMessage()); + } while (timedOut); } catch (IOException e) { Log.e(LOG_TAG, "url=" + url, e); } @@ -135,8 +176,6 @@ public class FsUtils { boolean mode) { String modeString = (mode ? "folders" : "files"); - List<String> results = new LinkedList<String>(); - URL url = null; try { url = new URL(SCRIPT_URL + @@ -146,34 +185,67 @@ public class FsUtils { } catch (MalformedURLException e) { Log.e(LOG_TAG, "path=" + dirRelativePath + " recurse=" + recurse + " mode=" + modeString, e); - return results; + return new LinkedList<String>(); } - try { - InputStream inputStream = null; - BufferedReader bufferedReader = null; - try { - URLConnection urlConnection = url.openConnection(); - inputStream = urlConnection.getInputStream(); - bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + HttpGet httpRequest = new HttpGet(url.toString()); + ResponseHandler<LinkedList<String>> handler = new ResponseHandler<LinkedList<String>>() { + @Override + public LinkedList<String> handleResponse(HttpResponse response) + throws IOException { + LinkedList<String> lines = new LinkedList<String>(); - String relativePath; - while ((relativePath = bufferedReader.readLine()) != null) { - results.add(relativePath); + if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + return lines; } - } finally { - if (inputStream != null) { - inputStream.close(); + HttpEntity entity = response.getEntity(); + if (entity == null) { + return lines; } - if (bufferedReader != null) { - bufferedReader.close(); + + BufferedReader reader = + new BufferedReader(new InputStreamReader(entity.getContent())); + String line; + try { + while ((line = reader.readLine()) != null) { + lines.add(line); + } + } finally { + if (reader != null) { + reader.close(); + } } + + return lines; } + }; + + try { + return getHttpClient().execute(httpRequest, handler); } catch (IOException e) { - Log.e(LOG_TAG, "path=" + dirRelativePath + " recurse=" + recurse + " mode=" + - modeString, e); + Log.e(LOG_TAG, "url=" + url, e); } - return results; + return new LinkedList<String>(); + } + + public static void closeInputStream(InputStream inputStream) { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Couldn't close stream!", e); + } + } + + public static void closeOutputStream(OutputStream outputStream) { + try { + if (outputStream != null) { + outputStream.close(); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Couldn't close stream!", e); + } } }
\ No newline at end of file diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java index 0bd2302..93bb6a0 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java @@ -73,12 +73,6 @@ public class LayoutTestsExecutor extends Activity { } } - /** TODO: make it a setting */ - static final String TESTS_ROOT_DIR_PATH = - Environment.getExternalStorageDirectory() + - File.separator + "android" + - File.separator + "LayoutTests"; - private static final String LOG_TAG = "LayoutTestExecutor"; public static final String EXTRA_TESTS_LIST = "TestsList"; diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java index d9da672..9caabdb 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java @@ -43,16 +43,8 @@ public class ManagerService extends Service { private static final int CRASH_TIMEOUT_MS = 20 * 1000; /** TODO: make it a setting */ - static final String TESTS_ROOT_DIR_PATH = - Environment.getExternalStorageDirectory() + - File.separator + "android" + - File.separator + "LayoutTests"; - - /** TODO: make it a setting */ static final String RESULTS_ROOT_DIR_PATH = - Environment.getExternalStorageDirectory() + - File.separator + "android" + - File.separator + "LayoutTests-results"; + Environment.getExternalStorageDirectory() + File.separator + "layout-test-results"; /** TODO: Make it a setting */ private static final List<String> EXPECTED_RESULT_LOCATION_RELATIVE_DIR_PREFIXES = @@ -141,7 +133,7 @@ public class ManagerService extends Service { public void onCreate() { super.onCreate(); - mFileFilter = new FileFilter(TESTS_ROOT_DIR_PATH); + mFileFilter = new FileFilter(); mSummarizer = new Summarizer(mFileFilter, RESULTS_ROOT_DIR_PATH); } @@ -283,4 +275,4 @@ public class ManagerService extends Service { return mLastExpectedResultPathFetched; } -}
\ No newline at end of file +} diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java index 0efb78e..3763bf2 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java @@ -201,9 +201,7 @@ public class Summarizer { private FileFilter mFileFilter; private String mResultsRootDirPath; - private String mTestsRelativePath; - private Date mDate; public Summarizer(FileFilter fileFilter, String resultsRootDirPath) { @@ -243,8 +241,9 @@ public class Summarizer { } public void summarize() { - createHtmlDetails(); - createTxtSummary(); + String webKitRevision = getWebKitRevision(); + createHtmlDetails(webKitRevision); + createTxtSummary(webKitRevision); } public void reset() { @@ -255,7 +254,7 @@ public class Summarizer { mDate = new Date(); } - private void createTxtSummary() { + private void createTxtSummary(String webKitRevision) { StringBuilder txt = new StringBuilder(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); @@ -263,23 +262,20 @@ public class Summarizer { txt.append("Date: " + dateFormat.format(mDate) + "\n"); txt.append("Build fingerprint: " + Build.FINGERPRINT + "\n"); txt.append("WebKit version: " + getWebKitVersionFromUserAgentString() + "\n"); - txt.append("WebKit revision: " + getWebKitRevision() + "\n"); + txt.append("WebKit revision: " + webKitRevision + "\n"); - txt.append("TOTAL: " + getTotalTestCount() + "\n"); - if (mCrashedTestsCount > 0) { - txt.append("CRASHED (total among all tests): " + mCrashedTestsCount + "\n"); - txt.append("-------------"); - } - txt.append("UNEXPECTED FAILURES: " + mUnexpectedFailures.size() + "\n"); - txt.append("UNEXPECTED PASSES: " + mUnexpectedPasses.size() + "\n"); - txt.append("EXPECTED FAILURES: " + mExpectedFailures.size() + "\n"); - txt.append("EXPECTED PASSES: " + mExpectedPasses.size() + "\n"); + txt.append("TOTAL: " + getTotalTestCount() + "\n"); + txt.append("CRASHED (among all tests): " + mCrashedTestsCount + "\n"); + txt.append("UNEXPECTED FAILURES: " + mUnexpectedFailures.size() + "\n"); + txt.append("UNEXPECTED PASSES: " + mUnexpectedPasses.size() + "\n"); + txt.append("EXPECTED FAILURES: " + mExpectedFailures.size() + "\n"); + txt.append("EXPECTED PASSES: " + mExpectedPasses.size() + "\n"); FsUtils.writeDataToStorage(new File(mResultsRootDirPath, TXT_SUMMARY_RELATIVE_PATH), txt.toString().getBytes(), false); } - private void createHtmlDetails() { + private void createHtmlDetails(String webKitRevision) { StringBuilder html = new StringBuilder(); html.append("<html><head>"); @@ -287,7 +283,7 @@ public class Summarizer { html.append(SCRIPT); html.append("</head><body>"); - createTopSummaryTable(html); + createTopSummaryTable(webKitRevision, html); createResultsListWithDiff(html, "Unexpected failures", mUnexpectedFailures); @@ -340,22 +336,21 @@ public class Summarizer { return "unknown"; } - private void createTopSummaryTable(StringBuilder html) { + private void createTopSummaryTable(String webKitRevision, StringBuilder html) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); html.append("<h1>" + mTestsRelativePath + "</h1>"); html.append("<h3>" + "Date: " + dateFormat.format(new Date()) + "</h3>"); html.append("<h3>" + "Build fingerprint: " + Build.FINGERPRINT + "</h3>"); html.append("<h3>" + "WebKit version: " + getWebKitVersionFromUserAgentString() + "</h3>"); - String webkitRevision = getWebKitRevision(); html.append("<h3>" + "WebKit revision: "); - html.append("<a href=\"http://trac.webkit.org/browser/trunk?rev=" + webkitRevision + - "\" target=\"_blank\"><span class=\"path\">" + webkitRevision + "</span></a>"); + html.append("<a href=\"http://trac.webkit.org/browser/trunk?rev=" + webKitRevision + + "\" target=\"_blank\"><span class=\"path\">" + webKitRevision + "</span></a>"); html.append("</h3>"); html.append("<table class=\"summary\">"); createSummaryTableRow(html, "TOTAL", getTotalTestCount()); - createSummaryTableRow(html, "CRASHED", mCrashedTestsCount); + createSummaryTableRow(html, "CRASHED (among all tests)", mCrashedTestsCount); createSummaryTableRow(html, "UNEXPECTED FAILURES", mUnexpectedFailures.size()); createSummaryTableRow(html, "UNEXPECTED PASSES", mUnexpectedPasses.size()); createSummaryTableRow(html, "EXPECTED FAILURES", mExpectedFailures.size()); diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java index c714ec4..e0f1450 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/TestsListPreloaderThread.java @@ -29,12 +29,6 @@ public class TestsListPreloaderThread extends Thread { private static final String LOG_TAG = "TestsListPreloaderThread"; - /** TODO: make it a setting */ - private static final String TESTS_ROOT_DIR_PATH = - Environment.getExternalStorageDirectory() + - File.separator + "android" + - File.separator + "LayoutTests"; - /** A list containing relative paths of tests to run */ private ArrayList<String> mTestsList = new ArrayList<String>(); @@ -55,7 +49,7 @@ public class TestsListPreloaderThread extends Thread { * @param doneMsg */ public TestsListPreloaderThread(String path, Message doneMsg) { - mFileFilter = new FileFilter(TESTS_ROOT_DIR_PATH); + mFileFilter = new FileFilter(); mRelativePath = path; mDoneMsg = doneMsg; } @@ -112,4 +106,4 @@ public class TestsListPreloaderThread extends Thread { } } } -}
\ No newline at end of file +} diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/AdbUtils.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/AdbUtils.java index d165a1a..086ff59 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/AdbUtils.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/AdbUtils.java @@ -36,52 +36,45 @@ public class AdbUtils { private static final int ADB_RESPONSE_SIZE = 4; /** - * Send an ADB command using existing socket connection + * Creates a new socket that can be configured to serve as a transparent proxy to a + * remote machine. This can be achieved by calling configureSocket() * - * The streams provided must be from a socket connected to adb already + * @return a socket that can be configured to link to remote machine + */ + public static Socket createSocket() { + Socket socket = null; + try { + socket = new Socket(ADB_HOST, ADB_PORT); + } catch (IOException e) { + Log.e(LOG_TAG, "Creation failed.", e); + } + return socket; + } + + /** + * Configures the connection to serve as a transparent proxy to a remote machine. + * The given streams must belong to a socket created by createSocket(). * - * @param is input stream of the socket connection - * @param os output stream of the socket - * @param cmd the adb command to send - * @return if adb gave a success response + * @param inputStream inputStream of the socket we want to configure + * @param outputStream outputStream of the socket we want to configure + * @param remoteAddress address of the remote machine (as you would type in a browser + * in a machine that the device is connected to via adb) + * @param remotePort port on which to connect + * @return if the configuration suceeded * @throws IOException */ - private static boolean sendAdbCmd(InputStream is, OutputStream os, String cmd) - throws IOException { - byte[] buf = new byte[ADB_RESPONSE_SIZE]; - + public static boolean configureConnection(InputStream inputStream, OutputStream outputStream, + String remoteAddress, int remotePort) throws IOException { + String cmd = "tcp:" + remotePort + ":" + remoteAddress; cmd = String.format("%04X", cmd.length()) + cmd; - os.write(cmd.getBytes()); - int read = is.read(buf); + + byte[] buf = new byte[ADB_RESPONSE_SIZE]; + outputStream.write(cmd.getBytes()); + int read = inputStream.read(buf); if (read != ADB_RESPONSE_SIZE || !ADB_OK.equals(new String(buf))) { Log.w(LOG_TAG, "adb cmd faild."); return false; } return true; } - - /** - * Get a tcp socket connection to specified IP address and port proxied by adb - * - * The proxying is transparent, e.g. if a socket is returned, then it can be written to and - * read from as if it is directly connected to the target - * - * @param remoteAddress IP address of the host to connect to - * @param remotePort port of the host to connect to - * @return a valid Socket instance if successful, null otherwise - */ - public static Socket getSocketToRemoteMachine(String remoteAddress, int remotePort) { - try { - Socket socket = new Socket(ADB_HOST, ADB_PORT); - String cmd = "tcp:" + remotePort + ":" + remoteAddress; - if (!sendAdbCmd(socket.getInputStream(), socket.getOutputStream(), cmd)) { - socket.close(); - return null; - } - return socket; - } catch (IOException ioe) { - Log.w(LOG_TAG, "error creating adb socket", ioe); - return null; - } - } }
\ No newline at end of file diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ConnectionHandler.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ConnectionHandler.java index 5e9f24e..4f01dae 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ConnectionHandler.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ConnectionHandler.java @@ -18,6 +18,8 @@ package com.android.dumprendertree2.forwarder; import android.util.Log; +import com.android.dumprendertree2.FsUtils; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -38,36 +40,25 @@ public class ConnectionHandler { private class SocketPipeThread extends Thread { - private Socket mInSocket, mOutSocket; + private InputStream mInputStream; + private OutputStream mOutputStream; - public SocketPipeThread(Socket inSocket, Socket outSocket) { - mInSocket = inSocket; - mOutSocket = outSocket; + public SocketPipeThread(InputStream inputStream, OutputStream outputStream) { + mInputStream = inputStream; + mOutputStream = outputStream; + setName("SocketPipeThread: " + getName()); } @Override public void run() { - InputStream is; - OutputStream os; - try { - synchronized (this) { - is = mInSocket.getInputStream(); - os = mOutSocket.getOutputStream(); - } - } catch (IOException e) { - Log.w(LOG_TAG, this.toString(), e); - finish(); - return; - } - byte[] buffer = new byte[4096]; int length; while (true) { try { - if ((length = is.read(buffer)) <= 0) { + if ((length = mInputStream.read(buffer)) < 0) { break; } - os.write(buffer, 0, length); + mOutputStream.write(buffer, 0, length); } catch (IOException e) { /** This exception means one of the streams is closed */ Log.v(LOG_TAG, this.toString(), e); @@ -75,10 +66,6 @@ public class ConnectionHandler { } } - finish(); - } - - private void finish() { synchronized (mThreadsRunning) { mThreadsRunning--; if (mThreadsRunning == 0) { @@ -90,7 +77,7 @@ public class ConnectionHandler { @Override public String toString() { - return "SocketPipeThread:\n" + mInSocket + "\n=>\n" + mOutSocket; + return getName(); } } @@ -98,20 +85,51 @@ public class ConnectionHandler { private Socket mFromSocket, mToSocket; private SocketPipeThread mFromToPipe, mToFromPipe; + private InputStream mFromSocketInputStream, mToSocketInputStream; + private OutputStream mFromSocketOutputStream, mToSocketOutputStream; + + private int mPort; + private String mRemoteMachineIpAddress; private OnFinishedCallback mOnFinishedCallback; - public ConnectionHandler(Socket fromSocket, Socket toSocket) { + public ConnectionHandler(String remoteMachineIp, int port, Socket fromSocket, Socket toSocket) { + mRemoteMachineIpAddress = remoteMachineIp; + mPort = port; + mFromSocket = fromSocket; mToSocket = toSocket; - mFromToPipe = new SocketPipeThread(mFromSocket, mToSocket); - mToFromPipe = new SocketPipeThread(mToSocket, mFromSocket); + + try { + mFromSocketInputStream = mFromSocket.getInputStream(); + mToSocketInputStream = mToSocket.getInputStream(); + mFromSocketOutputStream = mFromSocket.getOutputStream(); + mToSocketOutputStream = mToSocket.getOutputStream(); + if (!AdbUtils.configureConnection(mToSocketInputStream, mToSocketOutputStream, + mRemoteMachineIpAddress, mPort)) { + throw new IOException("Configuring socket failed!"); + } + } catch (IOException e) { + Log.e(LOG_TAG, "Unable to start ConnectionHandler", e); + closeStreams(); + return; + } + + mFromToPipe = new SocketPipeThread(mFromSocketInputStream, mToSocketOutputStream); + mToFromPipe = new SocketPipeThread(mToSocketInputStream, mFromSocketOutputStream); } public void registerOnConnectionHandlerFinishedCallback(OnFinishedCallback callback) { mOnFinishedCallback = callback; } + private void closeStreams() { + FsUtils.closeInputStream(mFromSocketInputStream); + FsUtils.closeInputStream(mToSocketInputStream); + FsUtils.closeOutputStream(mFromSocketOutputStream); + FsUtils.closeOutputStream(mToSocketOutputStream); + } + public void start() { /** We have 2 threads running, one for each pipe, that we start here. */ mThreadsRunning = 2; diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/Forwarder.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/Forwarder.java index 31cd8ea..b361a89 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/Forwarder.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/Forwarder.java @@ -60,19 +60,18 @@ public class Forwarder extends Thread { @Override public void run() { while (true) { - /** These sockets will be closed when Forwarder.stop() is called */ Socket localSocket; Socket remoteSocket; try { localSocket = mServerSocket.accept(); - remoteSocket = AdbUtils.getSocketToRemoteMachine(mRemoteMachineIpAddress, - mPort); } catch (IOException e) { /** This most likely means that mServerSocket is already closed */ Log.w(LOG_TAG, "mPort=" + mPort, e); break; } + remoteSocket = AdbUtils.createSocket(); + if (remoteSocket == null) { try { localSocket.close(); @@ -86,7 +85,8 @@ public class Forwarder extends Thread { } final ConnectionHandler connectionHandler = - new ConnectionHandler(localSocket, remoteSocket); + new ConnectionHandler(mRemoteMachineIpAddress, mPort, localSocket, + remoteSocket); /** * We have to close the sockets after the ConnectionHandler finishes, so we @@ -98,9 +98,7 @@ public class Forwarder extends Thread { @Override public void onFinished() { synchronized (this) { - if (mConnectionHandlers.remove(connectionHandler)) { - Log.d(LOG_TAG, "removeConnectionHandler(): removed"); - } else { + if (!mConnectionHandlers.remove(connectionHandler)) { assert false : "removeConnectionHandler(): not in the collection"; } } diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java index b1862ef..35de88a 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/ui/DirListActivity.java @@ -56,10 +56,6 @@ import java.util.List; public class DirListActivity extends ListActivity { private static final String LOG_TAG = "DirListActivity"; - private static final String ROOT_DIR_PATH = - Environment.getExternalStorageDirectory() + - File.separator + "android" + - File.separator + "LayoutTests"; /** TODO: This is just a guess - think of a better way to achieve it */ private static final int MEAN_TITLE_CHAR_SIZE = 13; @@ -82,13 +78,6 @@ public class DirListActivity extends ListActivity { private String mCurrentDirPath; /** - * TODO: This should not be a constant, but rather be configurable from somewhere. - */ - private String mRootDirPath = ROOT_DIR_PATH; - - private FileFilter mFileFilter; - - /** * A thread responsible for loading the contents of the directory from sd card * and sending them via Message to main thread that then loads them into * ListView @@ -196,7 +185,6 @@ public class DirListActivity extends ListActivity { ForwarderManager.getForwarderManager().start(); - mFileFilter = new FileFilter(ROOT_DIR_PATH); mListView = getListView(); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -420,4 +408,4 @@ public class DirListActivity extends ListActivity { return subDirs.toArray(new ListItem[subDirs.size()]); } -}
\ No newline at end of file +} |
