diff options
Diffstat (limited to 'tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java')
-rw-r--r-- | tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java new file mode 100644 index 0000000..347efde --- /dev/null +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java @@ -0,0 +1,209 @@ +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(); + } + + } +} |