summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-06-01 11:39:01 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-06-01 11:39:01 -0700
commit8c07afd3d8c4cbb8e35a74ce3dd70427a43da58d (patch)
tree965e0949450e15587ebe7744a6bb083659aec1f7 /tests
parentb0d031ad132dac585d1f21d46ebebcc4d13f40c7 (diff)
parent50566b3554f440d6b84a696875147d8d21682b10 (diff)
downloadframeworks_base-8c07afd3d8c4cbb8e35a74ce3dd70427a43da58d.zip
frameworks_base-8c07afd3d8c4cbb8e35a74ce3dd70427a43da58d.tar.gz
frameworks_base-8c07afd3d8c4cbb8e35a74ce3dd70427a43da58d.tar.bz2
am 50566b35: Merge change 2816 into donut
Merge commit '50566b3554f440d6b84a696875147d8d21682b10' * commit '50566b3554f440d6b84a696875147d8d21682b10': Update reliability test code. Use a separate activity with simpler calback mechanism.
Diffstat (limited to 'tests')
-rw-r--r--tests/DumpRenderTree/AndroidManifest.xml6
-rwxr-xr-xtests/DumpRenderTree/assets/run_reliability_tests.py76
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java170
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java257
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java209
5 files changed, 449 insertions, 269 deletions
diff --git a/tests/DumpRenderTree/AndroidManifest.xml b/tests/DumpRenderTree/AndroidManifest.xml
index 24d1687..8960dd2 100644
--- a/tests/DumpRenderTree/AndroidManifest.xml
+++ b/tests/DumpRenderTree/AndroidManifest.xml
@@ -23,8 +23,8 @@
<category android:name="android.intent.category.TEST" />
</intent-filter>
</activity>
- <activity android:name="TestShellActivity" android:launchMode="singleTop">
- </activity>
+ <activity android:name="TestShellActivity" android:launchMode="singleTop" />
+ <activity android:name="ReliabilityTestActivity" />
</application>
<instrumentation android:name=".LayoutTestsAutoRunner"
@@ -32,5 +32,5 @@
android:label="Layout test automation runner"
/>
<uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.WRITE_SDCARD" />
</manifest>
diff --git a/tests/DumpRenderTree/assets/run_reliability_tests.py b/tests/DumpRenderTree/assets/run_reliability_tests.py
index a242293..c12c783 100755
--- a/tests/DumpRenderTree/assets/run_reliability_tests.py
+++ b/tests/DumpRenderTree/assets/run_reliability_tests.py
@@ -10,10 +10,8 @@
import logging
import optparse
-import random
import subprocess
import sys
-import time
TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt"
TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt"
@@ -41,40 +39,16 @@ def DumpRenderTreeFinished(adb_cmd):
return adb_output.strip() == "#DONE"
-def RandomPick(file_name, approx_size, num_needed):
- """Randomly pick lines from the text file specifed.
-
- Args:
- file_name: the text file where lines should be picked from
- approx_size: an approximate size of the text file
- num_needed: how many lines are needed from the file
-
- Returns:
- an array of string
- """
- p = float(num_needed) / approx_size
- num_picked = 0
- lines = []
- random.seed()
-
- while num_picked < num_needed:
- file_handle = open(file_name, "r")
- for line in file_handle:
- line = line.strip()
- if float(random.randint(0, approx_size)) / approx_size < p:
- lines.append(line)
- num_picked += 1
- if num_picked == num_needed:
- break
- file_handle.close()
- return lines
+def RemoveDeviceFile(adb_cmd, file_name):
+ shell_cmd_str = adb_cmd + " shell rm " + file_name
+ subprocess.Popen(shell_cmd_str,
+ shell=True, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE).communicate()
def main(options, args):
"""Send the url list to device and start testing, restart if crashed."""
- generate_url = False
-
# Set up logging format.
log_level = logging.INFO
if options.verbose:
@@ -84,34 +58,23 @@ def main(options, args):
# Include all tests if none are specified.
if not args:
- path = "/tmp/url_list_%d.txt" % time.time()
- generate_url = True
- logging.info("A URL list is not provided, will be automatically generated.")
+ print "Missing URL list file"
+ sys.exit(1)
else:
path = args[0]
if not options.crash_file:
- print "missing crash file name, use --crash-file to specify"
+ print "Missing crash file name, use --crash-file to specify"
sys.exit(1)
else:
crashed_file = options.crash_file
if not options.timeout_file:
- print "missing timeout file, use --timeout-file to specify"
+ print "Missing timeout file, use --timeout-file to specify"
sys.exit(1)
else:
timedout_file = options.timeout_file
- http = RandomPick(HTTP_URL_FILE, 500000, NUM_URLS)
- https = RandomPick(HTTPS_URL_FILE, 45000, NUM_URLS)
-
- if generate_url:
- file_handle = open(path, "w")
- for i in range(0, NUM_URLS):
- file_handle.write(http[i] + "\n")
- file_handle.write(https[i] + "\n")
- file_handle.close()
-
adb_cmd = "adb "
if options.adb_options:
adb_cmd += options.adb_options + " "
@@ -128,6 +91,10 @@ def main(options, args):
logging.error(adb_error)
sys.exit(1)
+ # clean up previous results
+ RemoveDeviceFile(adb_cmd, TEST_STATUS_FILE)
+ RemoveDeviceFile(adb_cmd, TEST_TIMEOUT_FILE)
+
logging.info("Running the test ...")
# Count crashed tests.
@@ -142,11 +109,10 @@ def main(options, args):
# Call ReliabilityTestsAutoTest#startReliabilityTests
test_cmd = (test_cmd_prefix + " -e class "
- "com.android.dumprendertree.ReliabilityTestsAutoTest#"
- "startReliabilityTests -e timeout " + timeout_ms
- + test_cmd_postfix)
+ "com.android.dumprendertree.ReliabilityTest#"
+ "runTest -e timeout %d %s" %
+ (timeout_ms, test_cmd_postfix))
- time_start = time.time()
adb_output = subprocess.Popen(test_cmd, shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()[0]
@@ -160,16 +126,12 @@ def main(options, args):
logging.info("Resuming reliability test runner...")
test_cmd = (test_cmd_prefix + " -e class "
- "com.android.dumprendertree.ReliabilityTestsAutoTest#"
- "resumeReliabilityTests -e timeout " + timeout_ms
- + test_cmd_postfix)
+ "com.android.dumprendertree.ReliabilityTest#"
+ "runTest -e timeout %d %s" %
+ (timeout_ms, test_cmd_postfix))
adb_output = subprocess.Popen(test_cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()[0]
- time_end = time.time()
- fp = open("time_stat", "a")
- fp.writelines("%.2f\n" % ((time_end - time_start) / NUM_URLS / 2))
- fp.close()
if (adb_output.find("INSTRUMENTATION_FAILED") != -1 or
adb_output.find("Process crashed.") != -1):
logging.error("Error happened : " + adb_output)
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java
new file mode 100644
index 0000000..8f0ca9f
--- /dev/null
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java
@@ -0,0 +1,170 @@
+package com.android.dumprendertree;
+
+import android.os.Handler;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class ReliabilityTest extends ActivityInstrumentationTestCase2<ReliabilityTestActivity> {
+
+ private static final String LOGTAG = "ReliabilityTest";
+ private static final String PKG_NAME = "com.android.dumprendertree";
+ private static final String TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt";
+ private static final String TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt";
+ private static final String TEST_TIMEOUT_FILE = "/sdcard/android/reliability_timeout_test.txt";
+ private static final String TEST_DONE = "#DONE";
+ static final String RELIABILITY_TEST_RUNNER_FILES[] = {
+ "run_reliability_tests.py"
+ };
+
+ public ReliabilityTest() {
+ super(PKG_NAME, ReliabilityTestActivity.class);
+ }
+
+ @Override
+ protected void runTest() throws Throwable {
+ ReliabilityTestActivity activity = getActivity();
+ LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner)getInstrumentation();
+
+ File testListFile = new File(TEST_LIST_FILE);
+ if(!testListFile.exists())
+ throw new FileNotFoundException("test list file not found.");
+
+ BufferedReader listReader = new BufferedReader(
+ new FileReader(testListFile));
+
+ //always try to resume first, hence cleaning up status will be the
+ //responsibility of driver scripts
+ String lastUrl = readTestStatus();
+ if(lastUrl != null && !TEST_DONE.equals(lastUrl))
+ fastForward(listReader, lastUrl);
+
+ String url = null;
+ Handler handler = null;
+ boolean timeoutFlag = false;
+ long start, elapsed;
+ //read from BufferedReader instead of populating a list in advance,
+ //this will avoid excessive memory usage in case of a large list
+ while((url = listReader.readLine()) != null) {
+ start = System.currentTimeMillis();
+ Log.v(LOGTAG, "Testing URL: " + url);
+ updateTestStatus(url);
+ activity.reset();
+ //use message to send new URL to avoid interacting with
+ //WebView in non-UI thread
+ handler = activity.getHandler();
+ handler.sendMessage(handler.obtainMessage(
+ ReliabilityTestActivity.MSG_NAVIGATE,
+ runner.mTimeoutInMillis, 0, url));
+ timeoutFlag = activity.waitUntilDone();
+ elapsed = System.currentTimeMillis() - start;
+ if(elapsed < 1000) {
+ Log.w(LOGTAG, "Page load finished in " + elapsed
+ + "ms, too soon?");
+ } else {
+ Log.v(LOGTAG, "Page load finished in " + elapsed + "ms");
+ }
+ if(timeoutFlag) {
+ writeTimeoutFile(url);
+ }
+ System.runFinalization();
+ System.gc();
+ System.gc();
+ }
+ activity.finish();
+ listReader.close();
+ }
+
+ public void copyRunnerAssetsToCache() {
+ try {
+ String out_dir = getActivity().getApplicationContext()
+ .getCacheDir().getPath() + "/";
+
+ for( int i=0; i< RELIABILITY_TEST_RUNNER_FILES.length; i++) {
+ InputStream in = getActivity().getAssets().open(
+ RELIABILITY_TEST_RUNNER_FILES[i]);
+ OutputStream out = new FileOutputStream(
+ out_dir + RELIABILITY_TEST_RUNNER_FILES[i]);
+
+ byte[] buf = new byte[2048];
+ int len;
+
+ while ((len = in.read(buf)) >= 0 ) {
+ out.write(buf, 0, len);
+ }
+ out.close();
+ in.close();
+ }
+ }catch (IOException e) {
+ Log.e(LOGTAG, "Cannot extract scripts for testing.", e);
+ }
+ }
+
+ private void updateTestStatus(String s) {
+ // write last tested url into status file
+ try {
+ BufferedOutputStream bos = new BufferedOutputStream(
+ new FileOutputStream(TEST_STATUS_FILE));
+ bos.write(s.getBytes());
+ bos.close();
+ } catch (IOException e) {
+ Log.e(LOGTAG, "Cannot update file " + TEST_STATUS_FILE, e);
+ }
+ }
+
+ private String readTestStatus() {
+ // read out the test name it stopped last time.
+ String status = null;
+ File testStatusFile = new File(TEST_STATUS_FILE);
+ if(testStatusFile.exists()) {
+ try {
+ BufferedReader inReader = new BufferedReader(
+ new FileReader(testStatusFile));
+ status = inReader.readLine();
+ inReader.close();
+ } catch (IOException e) {
+ Log.e(LOGTAG, "Error reading test status.", e);
+ }
+ }
+ return status;
+ }
+
+ private void fastForward(BufferedReader testListReader, String lastUrl) {
+ //fastforward the BufferedReader to the position right after last url
+ if(lastUrl == null)
+ return;
+
+ String line = null;
+ try {
+ while((line = testListReader.readLine()) != null) {
+ if(lastUrl.equals(line))
+ return;
+ }
+ } catch (IOException ioe) {
+ Log.e(LOGTAG, "Error while reading test list.", ioe);
+ return;
+ }
+ }
+
+ private void writeTimeoutFile(String s) {
+ //append to the file containing the list of timeout urls
+ try {
+ BufferedOutputStream bos = new BufferedOutputStream(
+ new FileOutputStream(TEST_TIMEOUT_FILE, true));
+ bos.write(s.getBytes());
+ bos.write('\n');
+ bos.close();
+ } catch (Exception e) {
+ Log.e(LOGTAG, "Cannot update file " + TEST_TIMEOUT_FILE, e);
+ }
+ }
+}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java
new file mode 100644
index 0000000..fdd9b00
--- /dev/null
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java
@@ -0,0 +1,257 @@
+package com.android.dumprendertree;
+
+import android.app.Activity;
+import android.app.ActivityThread;
+import android.graphics.Bitmap;
+import android.net.http.SslError;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.ViewGroup;
+import android.webkit.HttpAuthHandler;
+import android.webkit.JsPromptResult;
+import android.webkit.JsResult;
+import android.webkit.SslErrorHandler;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.webkit.WebSettings.LayoutAlgorithm;
+import android.widget.LinearLayout;
+import android.widget.LinearLayout.LayoutParams;
+
+public class ReliabilityTestActivity extends Activity {
+
+ public static final String TEST_URL_ACTION = "com.andrdoid.dumprendertree.TestUrlAction";
+ public static final String PARAM_URL = "URL";
+ public static final String PARAM_TIMEOUT = "Timeout";
+ public static final int RESULT_TIMEOUT = 0xDEAD;
+ public static final int MSG_TIMEOUT = 0xC001;
+ public static final int MSG_NAVIGATE = 0xC002;
+
+ private static final String LOGTAG = "ReliabilityTestActivity";
+
+ private WebView webView;
+ private SimpleWebViewClient webViewClient;
+ private SimpleChromeClient chromeClient;
+ private Handler handler;
+ private boolean timeoutFlag;
+ private boolean pageDone;
+ private Object pageDoneLock;
+ private int pageStartCount;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Log.v(LOGTAG, "onCreate, inst=" + Integer.toHexString(hashCode()));
+
+ LinearLayout contentView = new LinearLayout(this);
+ contentView.setOrientation(LinearLayout.VERTICAL);
+ setContentView(contentView);
+ setTitle("Idle");
+
+ webView = new WebView(this);
+ webView.getSettings().setJavaScriptEnabled(true);
+ webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
+ webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
+
+ webViewClient = new SimpleWebViewClient();
+ chromeClient = new SimpleChromeClient();
+ webView.setWebViewClient(webViewClient);
+ webView.setWebChromeClient(chromeClient);
+
+ contentView.addView(webView, new LayoutParams(
+ ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.FILL_PARENT, 0.0f));
+
+ handler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_TIMEOUT:
+ handleTimeout();
+ return;
+ case MSG_NAVIGATE:
+ navigate((String)msg.obj, msg.arg1);
+ return;
+ }
+ }
+ };
+
+ pageDoneLock = new Object();
+ }
+
+ public void reset() {
+ synchronized (pageDoneLock) {
+ pageDone = false;
+ }
+ timeoutFlag = false;
+ pageStartCount = 0;
+ chromeClient.resetJsTimeout();
+ }
+
+ private void navigate(String url, int timeout) {
+ if(url == null) {
+ Log.v(LOGTAG, "URL is null, cancelling...");
+ finish();
+ }
+ webView.stopLoading();
+ Log.v(LOGTAG, "Navigating to URL: " + url);
+ webView.loadUrl(url);
+
+ if(timeout != 0) {
+ //set a timer with specified timeout (in ms)
+ handler.sendMessageDelayed(handler.obtainMessage(MSG_TIMEOUT),
+ timeout);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ Log.v(LOGTAG, "onDestroy, inst=" + Integer.toHexString(hashCode()));
+ super.onDestroy();
+ }
+
+ private boolean isPageDone() {
+ synchronized (pageDoneLock) {
+ return pageDone;
+ }
+ }
+
+ private void setPageDone(boolean pageDone) {
+ synchronized (pageDoneLock) {
+ this.pageDone = pageDone;
+ pageDoneLock.notifyAll();
+ }
+ }
+
+ private void handleTimeout() {
+ int progress = webView.getProgress();
+ webView.stopLoading();
+ Log.v(LOGTAG, "Page timeout triggered, progress = " + progress);
+ timeoutFlag = true;
+ }
+
+ public boolean waitUntilDone() {
+ validateNotAppThread();
+ synchronized (pageDoneLock) {
+ while(!isPageDone()) {
+ try {
+ pageDoneLock.wait();
+ } catch (InterruptedException ie) {
+ //no-op
+ }
+ }
+ }
+ return timeoutFlag;
+ }
+
+ public Handler getHandler() {
+ return handler;
+ }
+
+ private final void validateNotAppThread() {
+ if (ActivityThread.currentActivityThread() != null) {
+ throw new RuntimeException(
+ "This method can not be called from the main application thread");
+ }
+ }
+
+ class SimpleWebViewClient extends WebViewClient {
+
+ @Override
+ public void onReceivedError(WebView view, int errorCode, String description,
+ String failingUrl) {
+ Log.v(LOGTAG, "Received WebCore error: code=" + errorCode
+ + ", description=" + description
+ + ", url=" + failingUrl);
+ }
+
+ @Override
+ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+ //ignore certificate error
+ Log.v(LOGTAG, "Received SSL error: " + error.toString());
+ handler.proceed();
+ }
+
+ @Override
+ public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,
+ String realm) {
+ //cancel http auth request
+ handler.cancel();
+ }
+
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ pageStartCount++;
+ Log.v(LOGTAG, "onPageStarted: " + url);
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ Log.v(LOGTAG, "onPageFinished: " + url);
+ handler.postDelayed(new WebViewStatusChecker(), 500);
+ }
+ }
+
+ class SimpleChromeClient extends WebChromeClient {
+
+ private int timeoutCounter = 0;
+
+ @Override
+ public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
+ result.confirm();
+ return true;
+ }
+
+ @Override
+ public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
+ result.confirm();
+ return true;
+ }
+
+ @Override
+ public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,
+ JsPromptResult result) {
+ result.confirm();
+ return true;
+ }
+
+ @Override
+ public boolean onJsTimeout() {
+ timeoutCounter++;
+ Log.v(LOGTAG, "JavaScript timeout, count=" + timeoutCounter);
+ return timeoutCounter > 2;
+ }
+
+ public void resetJsTimeout() {
+ timeoutCounter = 0;
+ }
+
+ @Override
+ public void onReceivedTitle(WebView view, String title) {
+ ReliabilityTestActivity.this.setTitle(title);
+ }
+ }
+
+ class WebViewStatusChecker implements Runnable {
+
+ private int initialStartCount;
+
+ public WebViewStatusChecker() {
+ initialStartCount = pageStartCount;
+ }
+
+ @Override
+ public void run() {
+ if (initialStartCount == pageStartCount) {
+ //perform cleanup
+ webView.stopLoading();
+ Log.v(LOGTAG, "Finishing URL: " + webView.getUrl());
+ handler.removeMessages(MSG_TIMEOUT);
+ setPageDone(true);
+ }
+ }
+ }
+}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java
deleted file mode 100644
index 347efde..0000000
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package com.android.dumprendertree;
-
-import com.android.dumprendertree.TestShellActivity.DumpDataType;
-
-import android.content.Intent;
-import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
-
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Vector;
-
-public class ReliabilityTestsAutoTest extends ActivityInstrumentationTestCase2<TestShellActivity> {
-
- private static final String LOGTAG = "ReliabilityTests";
- private static final String TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt";
- private static final String TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt";
- private static final String TEST_TIMEOUT_FILE = "/sdcard/android/reliability_timeout_test.txt";
- static final String RELIABILITY_TEST_RUNNER_FILES[] = {
- "run_reliability_tests.py"
- };
-
- private boolean finished;
- private List<String> testList;
-
- public ReliabilityTestsAutoTest() {
- super("com.android.dumprendertree", TestShellActivity.class);
- }
-
- private void getTestList() {
- // Read test list.
- testList = new Vector<String>();
- try {
- BufferedReader inReader = new BufferedReader(new FileReader(TEST_LIST_FILE));
- String line;
- while ((line = inReader.readLine()) != null) {
- testList.add(line);
- }
- inReader.close();
- Log.v(LOGTAG, "Test list has " + testList.size() + " test(s).");
- } catch (Exception e) {
- Log.e(LOGTAG, "Error while reading test list : " + e.getMessage());
- }
- }
-
- private void resumeTestList() {
- // read out the test name it stopped last time.
- try {
- BufferedReader inReader = new BufferedReader(new FileReader(TEST_STATUS_FILE));
- String line = inReader.readLine();
- for (int i = 0; i < testList.size(); i++) {
- if (testList.get(i).equals(line)) {
- testList = new Vector<String>(testList.subList(i+1, testList.size()));
- break;
- }
- }
- inReader.close();
- } catch (Exception e) {
- Log.e(LOGTAG, "Error reading " + TEST_STATUS_FILE);
- }
- }
-
- private void clearTestStatus() {
- // Delete TEST_STATUS_FILE
- try {
- File f = new File(TEST_STATUS_FILE);
- if (f.delete())
- Log.v(LOGTAG, "Deleted " + TEST_STATUS_FILE);
- else
- Log.e(LOGTAG, "Fail to delete " + TEST_STATUS_FILE);
- } catch (Exception e) {
- Log.e(LOGTAG, "Fail to delete " + TEST_STATUS_FILE + " : " + e.getMessage());
- }
- }
-
- private void clearTestTimeout() {
- // Delete TEST_TIMEOUT_FILE
- try {
- File f = new File(TEST_TIMEOUT_FILE);
- if (f.delete())
- Log.v(LOGTAG, "Deleted " + TEST_TIMEOUT_FILE);
- else
- Log.e(LOGTAG, "Fail to delete " + TEST_TIMEOUT_FILE);
- } catch (Exception e) {
- Log.e(LOGTAG, "Fail to delete " + TEST_TIMEOUT_FILE + " : " + e.getMessage());
- }
- }
-
- private void updateTestStatus(String s) {
- // Write TEST_STATUS_FILE
- try {
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(TEST_STATUS_FILE));
- bos.write(s.getBytes());
- bos.close();
- } catch (Exception e) {
- Log.e(LOGTAG, "Cannot update file " + TEST_STATUS_FILE);
- }
- }
-
- private void writeTimeoutFile(String s) {
- // Write TEST_TIMEOUT_FILE
- try {
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(TEST_TIMEOUT_FILE, true));
- bos.write(s.getBytes());
- bos.write('\n');
- bos.close();
- } catch (Exception e) {
- Log.e(LOGTAG, "Cannot update file " + TEST_TIMEOUT_FILE);
- }
- }
-
- private void runReliabilityTest(boolean resume) {
- LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation();
-
- getTestList();
- if(!resume)
- clearTestStatus();
- else
- resumeTestList();
-
- TestShellActivity activity = getActivity();
- activity.setDefaultDumpDataType(DumpDataType.NO_OP);
- // Run tests.
- for (int i = 0; i < testList.size(); i++) {
- String s = testList.get(i);
- updateTestStatus(s);
- // Run tests
- runTestAndWaitUntilDone(activity, s, runner.mTimeoutInMillis);
- }
-
- updateTestStatus("#DONE");
-
- activity.finish();
- }
-
- private void runTestAndWaitUntilDone(TestShellActivity activity, String url, int timeout) {
- activity.setCallback(new TestShellCallback() {
- public void finished() {
- synchronized (ReliabilityTestsAutoTest.this) {
- finished = true;
- ReliabilityTestsAutoTest.this.notifyAll();
- }
- }
-
- public void timedOut(String url) {
- writeTimeoutFile(url);
- }
- });
-
- finished = false;
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setClass(activity, TestShellActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
- intent.putExtra(TestShellActivity.TEST_URL, url);
- intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout);
- activity.startActivity(intent);
-
- // Wait until done.
- synchronized (this) {
- while(!finished){
- try {
- this.wait();
- } catch (InterruptedException e) { }
- }
- }
- }
-
- public void startReliabilityTests() {
- clearTestTimeout();
- runReliabilityTest(false);
- }
-
- public void resumeReliabilityTests() {
- runReliabilityTest(true);
- }
-
- public void copyRunnerAssetsToCache() {
- try {
- String out_dir = getActivity().getApplicationContext()
- .getCacheDir().getPath() + "/";
-
- for( int i=0; i< RELIABILITY_TEST_RUNNER_FILES.length; i++) {
- InputStream in = getActivity().getAssets().open(
- RELIABILITY_TEST_RUNNER_FILES[i]);
- OutputStream out = new FileOutputStream(
- out_dir + RELIABILITY_TEST_RUNNER_FILES[i]);
-
- byte[] buf = new byte[2048];
- int len;
-
- while ((len = in.read(buf)) >= 0 ) {
- out.write(buf, 0, len);
- }
- out.close();
- in.close();
- }
- }catch (IOException e) {
- e.printStackTrace();
- }
-
- }
-}