13c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski/* 23c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * Copyright (C) 2010 The Android Open Source Project 33c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * 43c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License"); 53c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * you may not use this file except in compliance with the License. 63c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * You may obtain a copy of the License at 73c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * 83c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * http://www.apache.org/licenses/LICENSE-2.0 93c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * 103c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * Unless required by applicable law or agreed to in writing, software 113c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS, 123c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * See the License for the specific language governing permissions and 143c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * limitations under the License. 153c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski */ 163c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 173c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskipackage com.android.dumprendertree2; 183c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 193c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskiimport android.util.Log; 203c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 21c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport com.android.dumprendertree2.forwarder.ForwarderManager; 22c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 23ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.HttpEntity; 24ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.HttpResponse; 25ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.HttpStatus; 26ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.client.HttpClient; 27ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.client.ResponseHandler; 28ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.client.methods.HttpGet; 29ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.conn.ClientConnectionManager; 30ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.conn.scheme.PlainSocketFactory; 31ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.conn.scheme.Scheme; 32ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.conn.scheme.SchemeRegistry; 33ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.conn.ssl.SSLSocketFactory; 34ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.impl.client.DefaultHttpClient; 35ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; 36ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.params.BasicHttpParams; 37ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.params.HttpConnectionParams; 38ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.params.HttpParams; 39ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport org.apache.http.util.EntityUtils; 40ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 41c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.io.BufferedReader; 422aafca6408835307779e7f7dadb28929b11f11d5Guang Zhuimport java.io.BufferedWriter; 433c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskiimport java.io.File; 444ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowskiimport java.io.FileInputStream; 453c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskiimport java.io.FileOutputStream; 462aafca6408835307779e7f7dadb28929b11f11d5Guang Zhuimport java.io.FileReader; 472aafca6408835307779e7f7dadb28929b11f11d5Guang Zhuimport java.io.FileWriter; 483c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskiimport java.io.IOException; 49c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.io.InputStream; 50c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.io.InputStreamReader; 513c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskiimport java.io.OutputStream; 52c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.net.MalformedURLException; 53ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowskiimport java.net.SocketTimeoutException; 54c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.net.URL; 552aafca6408835307779e7f7dadb28929b11f11d5Guang Zhuimport java.util.ArrayList; 56c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.util.LinkedList; 57c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.util.List; 583c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 593c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski/** 603c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * 613c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski */ 623c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskipublic class FsUtils { 633c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski public static final String LOG_TAG = "FsUtils"; 643c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 65c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski private static final String SCRIPT_URL = ForwarderManager.getHostSchemePort(false) + 66183c3c9ca20f55703f31e3610bca72682f6355dbSteve Block "Tools/DumpRenderTree/android/get_layout_tests_dir_contents.php"; 67c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 68ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski private static final int HTTP_TIMEOUT_MS = 5000; 69ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 70ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski private static HttpClient sHttpClient; 71ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 72ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski private static HttpClient getHttpClient() { 73ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski if (sHttpClient == null) { 74ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski HttpParams params = new BasicHttpParams(); 75ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 76ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski SchemeRegistry schemeRegistry = new SchemeRegistry(); 77ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 78ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski ForwarderManager.HTTP_PORT)); 79ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 80ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski ForwarderManager.HTTPS_PORT)); 81ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 82ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(params, 83ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski schemeRegistry); 84ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski sHttpClient = new DefaultHttpClient(connectionManager, params); 85ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski HttpConnectionParams.setSoTimeout(sHttpClient.getParams(), HTTP_TIMEOUT_MS); 86ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski HttpConnectionParams.setConnectionTimeout(sHttpClient.getParams(), HTTP_TIMEOUT_MS); 87ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski } 88ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski return sHttpClient; 89ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski } 90ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 913c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski public static void writeDataToStorage(File file, byte[] bytes, boolean append) { 922e5982a55ac031110ed39515a76f7a5ec9ff2c14Maksymilian Osowski Log.d(LOG_TAG, "writeDataToStorage(): " + file.getAbsolutePath()); 933c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski try { 943c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski OutputStream outputStream = null; 953c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski try { 963c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski file.getParentFile().mkdirs(); 973c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski file.createNewFile(); 98c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Log.d(LOG_TAG, "writeDataToStorage(): File created: " + file.getAbsolutePath()); 993c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski outputStream = new FileOutputStream(file, append); 1003c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski outputStream.write(bytes); 1013c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } finally { 1023c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski if (outputStream != null) { 1033c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski outputStream.close(); 1043c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } 1053c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } 1063c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } catch (IOException e) { 107c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Log.e(LOG_TAG, "file.getAbsolutePath=" + file.getAbsolutePath() + " append=" + append, 108c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski e); 1093c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } 1103c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } 1114ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski 1124ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski public static byte[] readDataFromStorage(File file) { 1134ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski if (!file.exists()) { 1142e5982a55ac031110ed39515a76f7a5ec9ff2c14Maksymilian Osowski Log.d(LOG_TAG, "readDataFromStorage(): File does not exist: " 1154ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski + file.getAbsolutePath()); 1164ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski return null; 1174ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } 1184ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski 1194ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski byte[] bytes = null; 1204ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski try { 1214ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski FileInputStream fis = null; 1224ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski try { 1234ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski fis = new FileInputStream(file); 124c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski bytes = new byte[(int)file.length()]; 1254ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski fis.read(bytes); 1264ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } finally { 1274ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski if (fis != null) { 1284ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski fis.close(); 1294ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } 1304ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } 1314ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } catch (IOException e) { 1322e5982a55ac031110ed39515a76f7a5ec9ff2c14Maksymilian Osowski Log.e(LOG_TAG, "file.getAbsolutePath=" + file.getAbsolutePath(), e); 1334ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } 1344ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski 1354ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski return bytes; 1364ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski } 137c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 138cda9448206494b67c0812b9591cc066ca070a7a6Steve Block static class UrlDataGetter extends Thread { 139cda9448206494b67c0812b9591cc066ca070a7a6Steve Block private URL mUrl; 140cda9448206494b67c0812b9591cc066ca070a7a6Steve Block private byte[] mBytes; 141cda9448206494b67c0812b9591cc066ca070a7a6Steve Block private boolean mGetComplete; 142cda9448206494b67c0812b9591cc066ca070a7a6Steve Block public UrlDataGetter(URL url) { 143cda9448206494b67c0812b9591cc066ca070a7a6Steve Block mUrl = url; 144c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 145cda9448206494b67c0812b9591cc066ca070a7a6Steve Block public byte[] get() { 146cda9448206494b67c0812b9591cc066ca070a7a6Steve Block start(); 147cda9448206494b67c0812b9591cc066ca070a7a6Steve Block synchronized(this) { 148cda9448206494b67c0812b9591cc066ca070a7a6Steve Block while (!mGetComplete) { 149cda9448206494b67c0812b9591cc066ca070a7a6Steve Block try{ 150cda9448206494b67c0812b9591cc066ca070a7a6Steve Block wait(); 151cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } catch(InterruptedException e) { 152cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 153c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 154ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski } 155cda9448206494b67c0812b9591cc066ca070a7a6Steve Block return mBytes; 156cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 157cda9448206494b67c0812b9591cc066ca070a7a6Steve Block public synchronized void run() { 158cda9448206494b67c0812b9591cc066ca070a7a6Steve Block mGetComplete = false; 159cda9448206494b67c0812b9591cc066ca070a7a6Steve Block HttpGet httpRequest = new HttpGet(mUrl.toString()); 160cda9448206494b67c0812b9591cc066ca070a7a6Steve Block ResponseHandler<byte[]> handler = new ResponseHandler<byte[]>() { 161cda9448206494b67c0812b9591cc066ca070a7a6Steve Block @Override 162cda9448206494b67c0812b9591cc066ca070a7a6Steve Block public byte[] handleResponse(HttpResponse response) throws IOException { 163cda9448206494b67c0812b9591cc066ca070a7a6Steve Block if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { 164cda9448206494b67c0812b9591cc066ca070a7a6Steve Block return null; 165cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 166cda9448206494b67c0812b9591cc066ca070a7a6Steve Block HttpEntity entity = response.getEntity(); 167cda9448206494b67c0812b9591cc066ca070a7a6Steve Block return (entity == null ? null : EntityUtils.toByteArray(entity)); 168c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 169cda9448206494b67c0812b9591cc066ca070a7a6Steve Block }; 170cda9448206494b67c0812b9591cc066ca070a7a6Steve Block 171cda9448206494b67c0812b9591cc066ca070a7a6Steve Block mBytes = null; 172cda9448206494b67c0812b9591cc066ca070a7a6Steve Block try { 173cda9448206494b67c0812b9591cc066ca070a7a6Steve Block /** 174cda9448206494b67c0812b9591cc066ca070a7a6Steve Block * TODO: Not exactly sure why some requests hang indefinitely, but adding this 175cda9448206494b67c0812b9591cc066ca070a7a6Steve Block * timeout (in static getter for http client) in loop helps. 176cda9448206494b67c0812b9591cc066ca070a7a6Steve Block */ 177cda9448206494b67c0812b9591cc066ca070a7a6Steve Block boolean timedOut; 178cda9448206494b67c0812b9591cc066ca070a7a6Steve Block do { 179cda9448206494b67c0812b9591cc066ca070a7a6Steve Block timedOut = false; 180cda9448206494b67c0812b9591cc066ca070a7a6Steve Block try { 181cda9448206494b67c0812b9591cc066ca070a7a6Steve Block mBytes = getHttpClient().execute(httpRequest, handler); 182cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } catch (SocketTimeoutException e) { 183cda9448206494b67c0812b9591cc066ca070a7a6Steve Block timedOut = true; 184cda9448206494b67c0812b9591cc066ca070a7a6Steve Block Log.w(LOG_TAG, "Expected SocketTimeoutException: " + mUrl, e); 185cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 186cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } while (timedOut); 187cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } catch (IOException e) { 188cda9448206494b67c0812b9591cc066ca070a7a6Steve Block Log.e(LOG_TAG, "url=" + mUrl, e); 189cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 190cda9448206494b67c0812b9591cc066ca070a7a6Steve Block 191cda9448206494b67c0812b9591cc066ca070a7a6Steve Block mGetComplete = true; 192cda9448206494b67c0812b9591cc066ca070a7a6Steve Block notify(); 193c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 194cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 195c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 196cda9448206494b67c0812b9591cc066ca070a7a6Steve Block public static byte[] readDataFromUrl(URL url) { 197cda9448206494b67c0812b9591cc066ca070a7a6Steve Block if (url == null) { 198cda9448206494b67c0812b9591cc066ca070a7a6Steve Block Log.w(LOG_TAG, "readDataFromUrl(): url is null!"); 199cda9448206494b67c0812b9591cc066ca070a7a6Steve Block return null; 200cda9448206494b67c0812b9591cc066ca070a7a6Steve Block } 201cda9448206494b67c0812b9591cc066ca070a7a6Steve Block 202cda9448206494b67c0812b9591cc066ca070a7a6Steve Block UrlDataGetter getter = new UrlDataGetter(url); 203cda9448206494b67c0812b9591cc066ca070a7a6Steve Block return getter.get(); 204c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 205c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 206c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski public static List<String> getLayoutTestsDirContents(String dirRelativePath, boolean recurse, 207c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski boolean mode) { 208c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski String modeString = (mode ? "folders" : "files"); 209c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 210c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski URL url = null; 211c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski try { 212c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski url = new URL(SCRIPT_URL + 213c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski "?path=" + dirRelativePath + 214c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski "&recurse=" + recurse + 215c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski "&mode=" + modeString); 216c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } catch (MalformedURLException e) { 217c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Log.e(LOG_TAG, "path=" + dirRelativePath + " recurse=" + recurse + " mode=" + 218c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski modeString, e); 219ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski return new LinkedList<String>(); 220c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 221c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 222ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski HttpGet httpRequest = new HttpGet(url.toString()); 223ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski ResponseHandler<LinkedList<String>> handler = new ResponseHandler<LinkedList<String>>() { 224ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski @Override 225ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski public LinkedList<String> handleResponse(HttpResponse response) 226ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski throws IOException { 227ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski LinkedList<String> lines = new LinkedList<String>(); 228c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 229ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { 230ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski return lines; 231c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 232ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski HttpEntity entity = response.getEntity(); 233ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski if (entity == null) { 234ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski return lines; 235c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 236ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 237ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski BufferedReader reader = 238ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski new BufferedReader(new InputStreamReader(entity.getContent())); 239ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski String line; 240ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski try { 241ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski while ((line = reader.readLine()) != null) { 242ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski lines.add(line); 243ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski } 244ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski } finally { 245ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski if (reader != null) { 246ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski reader.close(); 247ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski } 248c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 249ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 250ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski return lines; 251c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 252ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski }; 253ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski 254ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski try { 255ce2ef18c8f220df13c3fca031f440dfc98362242Maksymilian Osowski return getHttpClient().execute(httpRequest, handler); 256c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } catch (IOException e) { 257cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block Log.e(LOG_TAG, "getLayoutTestsDirContents(): HTTP GET failed for URL " + url); 258cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block return null; 259c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 260c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 2615af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski 2625af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski public static void closeInputStream(InputStream inputStream) { 2635af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski try { 2645af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski if (inputStream != null) { 2655af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski inputStream.close(); 2665af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } 2675af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } catch (IOException e) { 2685af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski Log.e(LOG_TAG, "Couldn't close stream!", e); 2695af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } 2705af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } 2715af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski 2725af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski public static void closeOutputStream(OutputStream outputStream) { 2735af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski try { 2745af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski if (outputStream != null) { 2755af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski outputStream.close(); 2765af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } 2775af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } catch (IOException e) { 2785af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski Log.e(LOG_TAG, "Couldn't close stream!", e); 2795af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } 2805af84db492a0c198377ba4dacc83c5a211e96ff6Maksymilian Osowski } 2812aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu 2822aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu public static List<String> loadTestListFromStorage(String path) { 2832aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu List<String> list = new ArrayList<String>(); 2842aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu if (path != null && !path.isEmpty()) { 2852aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu try { 2862aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu File file = new File(path); 2872aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu Log.d(LOG_TAG, "test list loaded from " + path); 2882aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu BufferedReader reader = new BufferedReader(new FileReader(file)); 2892aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu String line = null; 2902aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu while ((line = reader.readLine()) != null) { 2912aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu list.add(line); 2922aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 2932aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu reader.close(); 2942aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } catch (IOException ioe) { 2952aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu Log.e(LOG_TAG, "failed to load test list", ioe); 2962aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 2972aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 2982aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu return list; 2992aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 3002aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu 3012aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu public static void saveTestListToStorage(File file, int start, List<String> testList) { 3022aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu try { 3032aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu BufferedWriter writer = new BufferedWriter( 3042aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu new FileWriter(file)); 3052aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu for (String line : testList.subList(start, testList.size())) { 3062aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu writer.write(line + '\n'); 3072aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 3082aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu writer.flush(); 3092aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu writer.close(); 3102aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } catch (IOException e) { 3112aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu Log.e(LOG_TAG, "failed to write test list", e); 3122aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 3132aafca6408835307779e7f7dadb28929b11f11d5Guang Zhu } 314cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block} 315