aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRakib M. Hasan <rmhasan@google.com>2023-03-14 20:14:30 +0000
committerRakib M. Hasan <rmhasan@google.com>2023-03-14 20:22:52 +0000
commit16ccf831e698d0566101c23d72526ba1b0df137e (patch)
tree4d1c150ffa1720efabb23ae87c6225d7276ef420
parent40e1998381355ad760ea4aae3d9755e721318b67 (diff)
downloadcsuite-16ccf831e698d0566101c23d72526ba1b0df137e.tar.gz
WebView: Create the WebviewUtils class which will be used in test suites
This CL creates the WebviewUtils class. It will contain all functions related to WebView. For instance it will contain the functions used to install or uninstall WebView. Test: csuite-tradefed run webview-app-launch <params> Bug: 206871132 Change-Id: Ie7342a007a32751a7780a9e938330fbb6d9fd4c3
-rw-r--r--test_scripts/src/main/java/com/android/webview/lib/WebviewUtils.java135
-rw-r--r--test_scripts/src/main/java/com/android/webview/tests/WebviewAppLaunchTest.java113
2 files changed, 142 insertions, 106 deletions
diff --git a/test_scripts/src/main/java/com/android/webview/lib/WebviewUtils.java b/test_scripts/src/main/java/com/android/webview/lib/WebviewUtils.java
new file mode 100644
index 0000000..0774b23
--- /dev/null
+++ b/test_scripts/src/main/java/com/android/webview/lib/WebviewUtils.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2023 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.webview.tests;
+
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.invoker.TestInformation;
+import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.util.CommandResult;
+import com.android.tradefed.util.CommandStatus;
+
+import org.junit.Assert;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class WebviewUtils {
+ private ITestDevice mTestDevice;
+ private TestInformation mTestInformation;
+
+ public WebviewUtils(ITestDevice device, TestInformation testInformation) {
+ mTestDevice = device;
+ mTestInformation = testInformation;
+ }
+
+ public WebviewPackage installWebview(String webviewVersion, String releaseChannel)
+ throws IOException, InterruptedException, DeviceNotAvailableException {
+ List<String> extraArgs = new ArrayList<>();
+ if (webviewVersion == null
+ && Arrays.asList("beta", "stable").contains(releaseChannel.toLowerCase())) {
+ // Get current version of WebView in the stable or beta release channels.
+ CLog.i(
+ "Getting the latest nightly official release version of the %s branch",
+ releaseChannel);
+ String releaseChannelVersion = getNightlyBranchBuildVersion(releaseChannel);
+ Assert.assertNotNull(
+ String.format(
+ "Could not retrieve the latest "
+ + "nightly release version of the %s channel",
+ releaseChannel),
+ releaseChannelVersion);
+ // Install the latest official build compiled for the beta or stable branches.
+ extraArgs.addAll(
+ Arrays.asList("--milestone", releaseChannelVersion.split("\\.", 2)[0]));
+ }
+ CommandResult commandResult =
+ WebviewInstallerToolPreparer.runWebviewInstallerToolCommand(
+ mTestInformation, mTestDevice, webviewVersion, releaseChannel, extraArgs);
+
+ Assert.assertEquals(
+ "The WebView installer tool failed to install WebView:\n"
+ + commandResult.toString(),
+ commandResult.getStatus(),
+ CommandStatus.SUCCESS);
+
+ printWebviewVersion();
+ return getCurrentWebviewPackage();
+ }
+
+ private static String getNightlyBranchBuildVersion(String releaseChannel)
+ throws IOException, MalformedURLException {
+ final URL omahaProxyUrl = new URL("https://omahaproxy.appspot.com/all?os=webview");
+ try (BufferedReader bufferedReader =
+ new BufferedReader(
+ new InputStreamReader(omahaProxyUrl.openConnection().getInputStream()))) {
+ String csvLine = null;
+ while ((csvLine = bufferedReader.readLine()) != null) {
+ String[] csvLineValues = csvLine.split(",");
+ if (csvLineValues[1].toLowerCase().equals(releaseChannel.toLowerCase())) {
+ return csvLineValues[2];
+ }
+ }
+ }
+ return null;
+ }
+
+ public void uninstallWebview(
+ WebviewPackage webviewPackage, WebviewPackage preInstalledWebviewPackage)
+ throws DeviceNotAvailableException {
+ Assert.assertNotEquals(
+ "Test is attempting to uninstall the preinstalled WebView provider",
+ webviewPackage,
+ preInstalledWebviewPackage);
+ updateWebviewImplementation(preInstalledWebviewPackage.getPackageName());
+ mTestDevice.executeAdbCommand("uninstall", webviewPackage.getPackageName());
+ printWebviewVersion();
+ }
+
+ private void updateWebviewImplementation(String webviewPackageName)
+ throws DeviceNotAvailableException {
+ CommandResult res =
+ mTestDevice.executeShellV2Command(
+ String.format(
+ "cmd webviewupdate set-webview-implementation %s",
+ webviewPackageName));
+ Assert.assertEquals(
+ "Failed to set webview update: " + res, res.getStatus(), CommandStatus.SUCCESS);
+ }
+
+ public WebviewPackage getCurrentWebviewPackage() throws DeviceNotAvailableException {
+ String dumpsys = mTestDevice.executeShellCommand("dumpsys webviewupdate");
+ return WebviewPackage.buildFromDumpsys(dumpsys);
+ }
+
+ public void printWebviewVersion() throws DeviceNotAvailableException {
+ WebviewPackage currentWebview = getCurrentWebviewPackage();
+ printWebviewVersion(currentWebview);
+ }
+
+ public void printWebviewVersion(WebviewPackage currentWebview)
+ throws DeviceNotAvailableException {
+ CLog.i("Current webview implementation: %s", currentWebview.getPackageName());
+ CLog.i("Current webview version: %s", currentWebview.getVersion());
+ }
+}
diff --git a/test_scripts/src/main/java/com/android/webview/tests/WebviewAppLaunchTest.java b/test_scripts/src/main/java/com/android/webview/tests/WebviewAppLaunchTest.java
index 186a9c1..c285308 100644
--- a/test_scripts/src/main/java/com/android/webview/tests/WebviewAppLaunchTest.java
+++ b/test_scripts/src/main/java/com/android/webview/tests/WebviewAppLaunchTest.java
@@ -28,8 +28,6 @@ import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner.TestLogData;
import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
-import com.android.tradefed.util.CommandResult;
-import com.android.tradefed.util.CommandStatus;
import com.android.tradefed.util.RunUtil;
import org.junit.After;
@@ -39,14 +37,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
@@ -56,6 +49,7 @@ public class WebviewAppLaunchTest extends BaseHostJUnit4Test {
@Rule public TestLogData mLogData = new TestLogData();
private static final long COMMAND_TIMEOUT_MILLIS = 5 * 60 * 1000;
+ private WebviewUtils mWebviewUtils;
private WebviewPackage mPreInstalledWebview;
private ApkInstaller mApkInstaller;
@@ -99,7 +93,8 @@ public class WebviewAppLaunchTest extends BaseHostJUnit4Test {
mWebviewVersionToTest != null || mReleaseChannel != null);
mApkInstaller = ApkInstaller.getInstance(getDevice());
- mPreInstalledWebview = getCurrentWebviewPackage();
+ mWebviewUtils = new WebviewUtils(getDevice(), getTestInformation());
+ mPreInstalledWebview = mWebviewUtils.getCurrentWebviewPackage();
for (File apkPath : mApkPaths) {
CLog.d("Installing " + apkPath);
@@ -107,7 +102,7 @@ public class WebviewAppLaunchTest extends BaseHostJUnit4Test {
}
DeviceUtils.getInstance(getDevice()).freezeRotation();
- printWebviewVersion();
+ mWebviewUtils.printWebviewVersion();
}
@Test
@@ -116,14 +111,14 @@ public class WebviewAppLaunchTest extends BaseHostJUnit4Test {
IOException {
AssertionError lastError = null;
WebviewPackage lastWebviewInstalled =
- installWebview(mWebviewVersionToTest, mReleaseChannel);
+ mWebviewUtils.installWebview(mWebviewVersionToTest, mReleaseChannel);
try {
assertAppLaunchNoCrash();
} catch (AssertionError e) {
lastError = e;
} finally {
- uninstallWebview(lastWebviewInstalled);
+ mWebviewUtils.uninstallWebview(lastWebviewInstalled, mPreInstalledWebview);
}
// If the app doesn't crash, complete the test.
@@ -159,101 +154,7 @@ public class WebviewAppLaunchTest extends BaseHostJUnit4Test {
deviceUtils.unfreezeRotation();
mApkInstaller.uninstallAllInstalledPackages();
- printWebviewVersion();
- }
-
- private void printWebviewVersion(WebviewPackage currentWebview)
- throws DeviceNotAvailableException {
- CLog.i("Current webview implementation: %s", currentWebview.getPackageName());
- CLog.i("Current webview version: %s", currentWebview.getVersion());
- }
-
- private void printWebviewVersion() throws DeviceNotAvailableException {
- WebviewPackage currentWebview = getCurrentWebviewPackage();
- printWebviewVersion(currentWebview);
- }
-
- private WebviewPackage installWebview(String webviewVersion, String releaseChannel)
- throws IOException, InterruptedException, DeviceNotAvailableException {
- List<String> extraArgs = new ArrayList<>();
- if (webviewVersion == null
- && Arrays.asList("beta", "stable").contains(releaseChannel.toLowerCase())) {
- // Get current version of WebView in the stable or beta release channels.
- CLog.i(
- "Getting the latest nightly official release version of the %s branch",
- releaseChannel);
- String releaseChannelVersion = getNightlyBranchBuildVersion(releaseChannel);
- Assert.assertNotNull(
- String.format(
- "Could not retrieve the latest "
- + "nightly release version of the %s channel",
- releaseChannel),
- releaseChannelVersion);
- // Install the latest official build compiled for the beta or stable branches.
- extraArgs.addAll(
- Arrays.asList("--milestone", releaseChannelVersion.split("\\.", 2)[0]));
- }
- CommandResult commandResult =
- WebviewInstallerToolPreparer.runWebviewInstallerToolCommand(
- getTestInformation(),
- getDevice(),
- webviewVersion,
- releaseChannel,
- extraArgs);
-
- Assert.assertEquals(
- "The WebView installer tool failed to install WebView:\n"
- + commandResult.toString(),
- commandResult.getStatus(),
- CommandStatus.SUCCESS);
-
- printWebviewVersion();
- return getCurrentWebviewPackage();
- }
-
- private String getNightlyBranchBuildVersion(String releaseChannel)
- throws IOException, MalformedURLException {
- final URL omahaProxyUrl = new URL("https://omahaproxy.appspot.com/all?os=webview");
- try (BufferedReader bufferedReader =
- new BufferedReader(
- new InputStreamReader(omahaProxyUrl.openConnection().getInputStream()))) {
- String csvLine = null;
- while ((csvLine = bufferedReader.readLine()) != null) {
- String[] csvLineValues = csvLine.split(",");
- if (csvLineValues[1].toLowerCase().equals(releaseChannel.toLowerCase())) {
- return csvLineValues[2];
- }
- }
- }
- return null;
- }
-
- private void uninstallWebview(WebviewPackage webviewPackage)
- throws DeviceNotAvailableException {
- Assert.assertNotEquals(
- "Test is attempting to uninstall the preinstalled WebView provider",
- webviewPackage,
- mPreInstalledWebview);
- updateWebviewImplementation(mPreInstalledWebview.getPackageName());
- getDevice().executeAdbCommand("uninstall", webviewPackage.getPackageName());
- printWebviewVersion();
- }
-
- private void updateWebviewImplementation(String webviewPackageName)
- throws DeviceNotAvailableException {
- CommandResult res =
- getDevice()
- .executeShellV2Command(
- String.format(
- "cmd webviewupdate set-webview-implementation %s",
- webviewPackageName));
- Assert.assertEquals(
- "Failed to set webview update: " + res, res.getStatus(), CommandStatus.SUCCESS);
- }
-
- private WebviewPackage getCurrentWebviewPackage() throws DeviceNotAvailableException {
- String dumpsys = getDevice().executeShellCommand("dumpsys webviewupdate");
- return WebviewPackage.buildFromDumpsys(dumpsys);
+ mWebviewUtils.printWebviewVersion();
}
private void assertAppLaunchNoCrash() throws DeviceNotAvailableException {