am a5526468: Merge change 25250 into eclair

Merge commit 'a5526468a38289cc17b231c0d0eca918e34ede49' into eclair-plus-aosp

* commit 'a5526468a38289cc17b231c0d0eca918e34ede49':
  Refactor logic for starting forward servers and http test cases hacking, so that they can be shared between automated test mode and UI launch mode.
This commit is contained in:
Guang Zhu
2009-09-16 12:15:24 -07:00
committed by Android Git Automerger
9 changed files with 246 additions and 94 deletions

View File

@@ -1,5 +1,23 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree;
import com.android.dumprendertree.forwarder.ForwardService;
import android.util.Log;
import java.io.BufferedOutputStream;
@@ -12,6 +30,12 @@ import java.io.IOException;
public class FsUtils {
private static final String LOGTAG = "FsUtils";
static final String HTTP_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/";
static final String HTTPS_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/ssl/";
static final String HTTP_LOCAL_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/local/";
static final String HTTP_MEDIA_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/media/";
static final String HTTP_WML_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/wml/";
private FsUtils() {
//no creation of instances
}
@@ -77,4 +101,24 @@ public class FsUtils {
return status;
}
public static String getTestUrl(String path) {
String url = null;
if (!path.startsWith(HTTP_TESTS_PREFIX)) {
url = "file://" + path;
} else {
ForwardService.getForwardService().startForwardService();
if (path.startsWith(HTTPS_TESTS_PREFIX)) {
// still cut the URL after "http/tests/"
url = "https://127.0.0.1:8443/" + path.substring(HTTP_TESTS_PREFIX.length());
} else if (!path.startsWith(HTTP_LOCAL_TESTS_PREFIX)
&& !path.startsWith(HTTP_MEDIA_TESTS_PREFIX)
&& !path.startsWith(HTTP_WML_TESTS_PREFIX)) {
url = "http://127.0.0.1:8000/" + path.substring(HTTP_TESTS_PREFIX.length());
} else {
url = "file://" + path;
}
}
return url;
}
}

View File

@@ -19,6 +19,7 @@ package com.android.dumprendertree;
import com.android.dumprendertree.TestShellActivity.DumpDataType;
import com.android.dumprendertree.forwarder.AdbUtils;
import com.android.dumprendertree.forwarder.ForwardServer;
import com.android.dumprendertree.forwarder.ForwardService;
import android.app.Instrumentation;
import android.content.Intent;
@@ -143,17 +144,6 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
static final String LAYOUT_RESULTS_CRASHED_RESULT_FILE = "results/layout_tests_crashed.txt";
static final String LAYOUT_TESTS_RUNNER = "run_layout_tests.py";
static final String HTTP_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/";
static final String HTTPS_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/ssl/";
static final String HTTP_LOCAL_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/local/";
static final String HTTP_MEDIA_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/media/";
static final String HTTP_WML_TESTS_PREFIX = "/sdcard/android/layout_tests/http/tests/wml/";
static final String DEFAULT_TEST_HOST = "android-browser-test.mtv.corp.google.com";
static final String FORWARD_HOST_CONF = "/sdcard/drt_forward_host.txt";
private ForwardServer fs8000, fs8080, fs8443;
private MyTestRecorder mResultRecorder;
private Vector<String> mTestList;
private boolean mRebaselineResults;
@@ -162,45 +152,6 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
public LayoutTestsAutoTest() {
super("com.android.dumprendertree", TestShellActivity.class);
int addr = getForwardHostAddr();
if(addr != -1) {
fs8000 = new ForwardServer(8000, addr, 8000);
fs8080 = new ForwardServer(8080, addr, 8080);
fs8443 = new ForwardServer(8443, addr, 8443);
}
}
private int getForwardHostAddr() {
int addr = -1;
String host = null;
File forwardHostConf = new File(FORWARD_HOST_CONF);
if (forwardHostConf.isFile()) {
BufferedReader hostReader = null;
try {
hostReader = new BufferedReader(new FileReader(forwardHostConf));
host = hostReader.readLine();
Log.v(LOGTAG, "read forward host from file: " + host);
} catch (IOException ioe) {
Log.v(LOGTAG, "cannot read forward host from file", ioe);
} finally {
if (hostReader != null) {
try {
hostReader.close();
} catch (IOException ioe) {
// burn!!!
}
}
}
}
if (host == null || host.length() == 0)
host = DEFAULT_TEST_HOST;
try {
addr = AdbUtils.resolve(host);
} catch (IOException ioe) {
Log.e(LOGTAG, "failed to resolve server address", ioe);
}
return addr;
}
// This function writes the result of the layout test to
@@ -366,7 +317,7 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(activity, TestShellActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(TestShellActivity.TEST_URL, getTestUrl(test));
intent.putExtra(TestShellActivity.TEST_URL, FsUtils.getTestUrl(test));
intent.putExtra(TestShellActivity.RESULT_FILE, resultFile);
intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout);
activity.startActivity(intent);
@@ -450,49 +401,10 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
}
FsUtils.updateTestStatus(TEST_STATUS_FILE, "#DONE");
if(fs8000 != null)
fs8000.stop();
if(fs8080 != null)
fs8080.stop();
if(fs8443 != null)
fs8443.stop();
ForwardService.getForwardService().stopForwardService();
activity.finish();
}
private void startForwardServerIfNeeded() {
try {
if(fs8000 != null)
fs8000.start();
if(fs8080 != null)
fs8080.start();
if(fs8443 != null)
fs8443.start();
} catch (IOException ioe) {
Log.w(LOGTAG, "failed to start forwarder. http tests will fail.", ioe);
}
}
private String getTestUrl(String path) {
String url = null;
if (!path.startsWith(HTTP_TESTS_PREFIX)) {
url = "file://" + path;
} else {
startForwardServerIfNeeded();
if (path.startsWith(HTTPS_TESTS_PREFIX)) {
// still cut the URL after "http/tests/"
url = "https://127.0.0.1:8443/" + path.substring(HTTP_TESTS_PREFIX.length());
} else if (!path.startsWith(HTTP_LOCAL_TESTS_PREFIX)
&& !path.startsWith(HTTP_MEDIA_TESTS_PREFIX)
&& !path.startsWith(HTTP_WML_TESTS_PREFIX)) {
url = "http://127.0.0.1:8000/" + path.substring(HTTP_TESTS_PREFIX.length());
} else {
url = "file://" + path;
}
}
return url;
}
private String getTestPath() {
LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation();

View File

@@ -1,3 +1,19 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree;
import android.app.Activity;

View File

@@ -1,3 +1,19 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree;
import android.app.Activity;

View File

@@ -16,6 +16,8 @@
package com.android.dumprendertree;
import com.android.dumprendertree.forwarder.ForwardService;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
@@ -184,6 +186,7 @@ public class TestShellActivity extends Activity implements LayoutTestController
} catch (IOException ioe) {
Log.w(LOGTAG, "Failed to close test list file.", ioe);
}
ForwardService.getForwardService().stopForwardService();
finished();
}
@@ -215,10 +218,9 @@ public class TestShellActivity extends Activity implements LayoutTestController
builder.create().show();
return;
}
url = "file://" + url;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(TestShellActivity.TEST_URL, url);
intent.putExtra(TestShellActivity.TEST_URL, FsUtils.getTestUrl(url));
intent.putExtra(TIMEOUT_IN_MILLIS, 10000);
executeIntent(intent);
}

View File

@@ -1,3 +1,19 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree.forwarder;
import android.util.Log;
@@ -44,7 +60,6 @@ public class AdbUtils {
DataInputStream dis = new DataInputStream(localSocket.getInputStream());
OutputStream os = localSocket.getOutputStream();
int count_read = 0;
byte[] buf = new byte[128];
if (localSocket == null || dis == null || os == null)
return -1;

View File

@@ -1,3 +1,19 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree.forwarder;
import android.util.Log;

View File

@@ -0,0 +1,115 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree.forwarder;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import android.util.Log;
public class ForwardService {
private ForwardServer fs8000, fs8080, fs8443;
private static ForwardService inst;
private static final String LOGTAG = "ForwardService";
private static final String DEFAULT_TEST_HOST = "android-browser-test.mtv.corp.google.com";
private static final String FORWARD_HOST_CONF = "/sdcard/drt_forward_host.txt";
private ForwardService() {
int addr = getForwardHostAddr();
if (addr != -1) {
fs8000 = new ForwardServer(8000, addr, 8000);
fs8080 = new ForwardServer(8080, addr, 8080);
fs8443 = new ForwardServer(8443, addr, 8443);
}
}
public static ForwardService getForwardService() {
if (inst == null) {
inst = new ForwardService();
}
return inst;
}
public void startForwardService() {
try {
if (fs8000 != null)
fs8000.start();
if (fs8080 != null)
fs8080.start();
if (fs8443 != null)
fs8443.start();
} catch (IOException ioe) {
Log.w(LOGTAG, "failed to start forwarder. http tests will fail.", ioe);
return;
}
}
public void stopForwardService() {
if (fs8000 != null) {
fs8000.stop();
fs8000 = null;
}
if (fs8080 != null) {
fs8080.stop();
fs8080 = null;
}
if (fs8443 != null) {
fs8443.stop();
fs8443 = null;
}
Log.v(LOGTAG, "forwarders stopped.");
}
private static int getForwardHostAddr() {
int addr = -1;
String host = null;
File forwardHostConf = new File(FORWARD_HOST_CONF);
if (forwardHostConf.isFile()) {
BufferedReader hostReader = null;
try {
hostReader = new BufferedReader(new FileReader(forwardHostConf));
host = hostReader.readLine();
Log.v(LOGTAG, "read forward host from file: " + host);
} catch (IOException ioe) {
Log.v(LOGTAG, "cannot read forward host from file", ioe);
} finally {
if (hostReader != null) {
try {
hostReader.close();
} catch (IOException ioe) {
// burn!!!
}
}
}
}
if (host == null || host.length() == 0)
host = DEFAULT_TEST_HOST;
try {
addr = AdbUtils.resolve(host);
} catch (IOException ioe) {
Log.e(LOGTAG, "failed to resolve server address", ioe);
}
return addr;
}
}

View File

@@ -1,3 +1,19 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree.forwarder;
import android.util.Log;