Update from https://crrev.com/312398
Involves adding many //testing/test.gni imports, fixing one
SkSurface::NewRenderTarget invocation inside sky, and fixing up
base::Process usage in the shell.
Review URL: https://codereview.chromium.org/862133002
diff --git a/testing/android/java/AndroidManifest.xml b/testing/android/java/AndroidManifest.xml
index 93dd71b..8cc36b2 100644
--- a/testing/android/java/AndroidManifest.xml
+++ b/testing/android/java/AndroidManifest.xml
@@ -12,6 +12,13 @@
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
+ <uses-permission android:name="android.permission.CAMERA" />
+ <uses-permission android:name="android.permission.INTERNET"/>
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+ <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+ <uses-permission android:name="android.permission.WAKE_LOCK"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+
<application android:label="ChromeNativeTests"
android:name="org.chromium.base.BaseChromiumApplication">
<activity android:name=".ChromeNativeTestActivity"
@@ -28,11 +35,4 @@
android:targetPackage="org.chromium.native_test"
android:label="Instrumentation entry point for org.chromium.native_test"/>
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
- <uses-permission android:name="android.permission.RECORD_AUDIO"/>
- <uses-permission android:name="android.permission.WAKE_LOCK"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
</manifest>
diff --git a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
index 42befe5..d476cbc 100644
--- a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
+++ b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
@@ -7,6 +7,7 @@
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Handler;
import android.util.Log;
@@ -16,6 +17,8 @@
import org.chromium.base.ResourceExtractor;
import org.chromium.base.library_loader.NativeLibraries;
+import java.io.File;
+
/**
* Android's NativeActivity is mostly useful for pure-native code.
* Our tests need to go up to our own java classes, which is not possible using
@@ -75,7 +78,16 @@
if (commandLineFlags == null) commandLineFlags = "";
String commandLineFilePath = getIntent().getStringExtra(EXTRA_COMMAND_LINE_FILE);
- if (commandLineFilePath == null) commandLineFilePath = "";
+ if (commandLineFilePath == null) {
+ commandLineFilePath = "";
+ } else {
+ File commandLineFile = new File(commandLineFilePath);
+ if (!commandLineFile.isAbsolute()) {
+ commandLineFilePath = Environment.getExternalStorageDirectory() + "/"
+ + commandLineFilePath;
+ }
+ Log.i(TAG, "command line file path: " + commandLineFilePath);
+ }
// This directory is used by build/android/pylib/test_package_apk.py.
nativeRunTests(commandLineFlags, commandLineFilePath, getFilesDir().getAbsolutePath(),
diff --git a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java
index a5cf485..43135cc 100644
--- a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java
+++ b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java
@@ -27,9 +27,13 @@
* An Instrumentation that runs tests based on ChromeNativeTestActivity.
*/
public class ChromeNativeTestInstrumentationTestRunner extends Instrumentation {
+ // TODO(jbudorick): Remove this extra when b/18981674 is fixed.
+ public static final String EXTRA_ONLY_OUTPUT_FAILURES =
+ "org.chromium.native_test.ChromeNativeTestInstrumentationTestRunner."
+ + "OnlyOutputFailures";
private static final String TAG = "ChromeNativeTestInstrumentationTestRunner";
- private static final Pattern RE_TEST_OUTPUT = Pattern.compile("\\[ *([^ ]*) *\\] ?([^ ]*) .*");
+ private static final Pattern RE_TEST_OUTPUT = Pattern.compile("\\[ *([^ ]*) *\\] ?([^ ]+) .*");
private static interface ResultsBundleGenerator {
public Bundle generate(Map<String, TestResult> rawResults);
@@ -39,6 +43,7 @@
private String mCommandLineFlags;
private Bundle mLogBundle;
private ResultsBundleGenerator mBundleGenerator;
+ private boolean mOnlyOutputFailures;
@Override
public void onCreate(Bundle arguments) {
@@ -46,6 +51,7 @@
mCommandLineFlags = arguments.getString(ChromeNativeTestActivity.EXTRA_COMMAND_LINE_FLAGS);
mLogBundle = new Bundle();
mBundleGenerator = new RobotiumBundleGenerator();
+ mOnlyOutputFailures = arguments.containsKey(EXTRA_ONLY_OUTPUT_FAILURES);
start();
}
@@ -117,17 +123,27 @@
for (String l = r.readLine(); l != null && !l.equals("<<ScopedMainEntryLogger");
l = r.readLine()) {
Matcher m = RE_TEST_OUTPUT.matcher(l);
+ boolean isFailure = false;
if (m.matches()) {
if (m.group(1).equals("RUN")) {
results.put(m.group(2), TestResult.UNKNOWN);
} else if (m.group(1).equals("FAILED")) {
results.put(m.group(2), TestResult.FAILED);
+ isFailure = true;
+ mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
+ sendStatus(0, mLogBundle);
} else if (m.group(1).equals("OK")) {
results.put(m.group(2), TestResult.PASSED);
}
}
- mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
- sendStatus(0, mLogBundle);
+
+ // TODO(jbudorick): mOnlyOutputFailures is a workaround for b/18981674. Remove it
+ // once that issue is fixed.
+ if (!mOnlyOutputFailures || isFailure) {
+ mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
+ sendStatus(0, mLogBundle);
+ }
+ Log.i(TAG, l);
}
} catch (InterruptedException e) {
Log.e(TAG, "Interrupted while waiting for FIFO file creation: " + e.toString());
@@ -168,6 +184,9 @@
++testsPassed;
break;
case FAILED:
+ // TODO(jbudorick): Remove this log message once AMP execution and
+ // results handling has been stabilized.
+ Log.d(TAG, "FAILED: " + entry.getKey());
++testsFailed;
break;
default:
@@ -178,11 +197,12 @@
}
StringBuilder resultBuilder = new StringBuilder();
- resultBuilder.append("\nOK (" + Integer.toString(testsPassed) + " tests)");
if (testsFailed > 0) {
resultBuilder.append(
"\nFAILURES!!! Tests run: " + Integer.toString(rawResults.size())
+ ", Failures: " + Integer.toString(testsFailed) + ", Errors: 0");
+ } else {
+ resultBuilder.append("\nOK (" + Integer.toString(testsPassed) + " tests)");
}
resultsBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT,
resultBuilder.toString());
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 3e0535e..7d2f975 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -86,7 +86,6 @@
},
"sql_unittests",
"nacl_loader_unittests",
- "athena_unittests",
"app_shell_browsertests",
"app_shell_unittests",
"chromevox_tests",
@@ -100,7 +99,6 @@
"app_shell_browsertests",
"app_shell_unittests",
"ash_unittests",
- "athena_unittests",
"aura_unittests",
"base_unittests",
"cacheinvalidation_unittests",
@@ -250,7 +248,6 @@
"shards": 2
}
},
- "athena_unittests",
"gcm_unit_tests",
"skia_unittests",
{
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 68fb55b..4da8bc0 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -333,33 +333,20 @@
}
]
},
- "Linux ChromiumOS Athena Tests (1)": {
- "gtest_tests": [
- {
- "test": "athena_unittests",
- "swarming": {
- "can_use_on_swarming_builders": true
- }
- },
- {
- "test": "browser_tests",
- "swarming": {
- "can_use_on_swarming_builders": true,
- "shards": 5
- }
- }
- ]
- },
"Site Isolation Linux": {
"gtest_tests": [
{ "test": "content_unittests", "args": ["--site-per-process"] },
- { "test": "content_browsertests", "args": ["--site-per-process", "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.SupportCrossProcessPostMessage:*.DontSwapProcessWithOnlyTargetBlank:*.DisownOpener:*.NavigateWithLeftoverFrames:*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort:*.AllowTargetedNavigationsInOpenerAfterSwap"] }
+ { "test": "content_browsertests", "args": ["--site-per-process", "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.SupportCrossProcessPostMessage:*.DisownOpener:*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort"] },
+ { "test": "unit_tests", "args": ["--site-per-process"] },
+ { "test": "browser_tests", "args": ["--site-per-process", "--gtest_filter=-AppApiTest.*:AutofillDialogControllerTest.*:BlockedAppApiTest.*:BookmarkOverrideTest.*:BrowserTest.OtherRedirectsDontForkProcess:ChromeAppAPITest.*:ChromeRenderProcessHostTest.*:ChromeRenderProcessHostTestWithCommandLine.*:DevToolsExperimentalExtensionTest.*:DevToolsExtensionTest.*:DnsProbeBrowserTest.*:ErrorPageTest.*:ExecuteScriptApiTest.ExecuteScriptPermissions:ExtensionApiTest.ContentScriptExtensionIframe:ExtensionApiTest.ContentScriptOtherExtensions:ExtensionApiTest.ContentScriptExtensionProcess:ExtensionApiTest.TabsOnUpdated:ExtensionApiTest.WindowOpenPopupIframe:ExtensionBrowserTest.LoadChromeExtensionsWithOptionsParamWhenEmbedded:ExtensionCrxInstallerTest.InstallDelayedUntilNextUpdate:ExtensionOptionsApiTest.ExtensionCanEmbedOwnOptions:ExtensionSettingsApiTest.SimpleTest:ExtensionWebUITest.CanEmbedExtensionOptions:ExtensionWebUITest.ReceivesExtensionOptionsOnClose:ExternallyConnectableMessagingTest.*:GeolocationBrowserTest.*:HistoryBrowserTest.*:InlineLoginUISafeIframeBrowserTest.*:IsolatedAppTest.*:LaunchWebAuthFlowFunctionTest.*:MimeHandlerViewTest.*:NaClBrowserTestNonSfiMode.*:OptionsUIBrowserTest.*:PhishingClassifierTest.*:PhishingDOMFeatureExtractorTest.*:PlatformAppUrlRedirectorBrowserTest.*:PopupBlockerBrowserTest.*:PortForwardingTest.*:PrerenderBrowserTest.*:ProcessManagementTest.*:ProfileManagerBrowserTest.*:RedirectTest.*:ReferrerPolicyTest.*:SandboxStatusUITest.*:SSLUITest.*:SyncFileSystemApiTest.GetFileStatuses:SyncFileSystemTest.*:WebNavigationApiTest.CrossProcessFragment:WebNavigationApiTest.ServerRedirectSingleProcess:WebNavigationApiTest.CrossProcessHistory:WebViewDPITest.*:WebViewPluginTest.*:WebViewTest.*:ZoomControllerBrowserTest.*"] }
]
},
"Site Isolation Win": {
"gtest_tests": [
{ "test": "content_unittests", "args": ["--site-per-process"] },
- { "test": "content_browsertests", "args": ["--site-per-process", "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.SupportCrossProcessPostMessage:*.DontSwapProcessWithOnlyTargetBlank:*.DisownOpener:*.NavigateWithLeftoverFrames:*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort:*.AllowTargetedNavigationsInOpenerAfterSwap"] }
+ { "test": "content_browsertests", "args": ["--site-per-process", "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.SupportCrossProcessPostMessage:*.DisownOpener:*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort"] },
+ { "test": "unit_tests", "args": ["--site-per-process"] },
+ { "test": "browser_tests", "args": ["--site-per-process", "--gtest_filter=-AppApiTest.*:AutofillDialogControllerTest.*:BlockedAppApiTest.*:BookmarkOverrideTest.*:BrowserTest.OtherRedirectsDontForkProcess:ChromeAppAPITest.*:ChromeRenderProcessHostTest.*:ChromeRenderProcessHostTestWithCommandLine.*:DevToolsExperimentalExtensionTest.*:DevToolsExtensionTest.*:DnsProbeBrowserTest.*:ErrorPageTest.*:ExecuteScriptApiTest.ExecuteScriptPermissions:ExtensionApiTest.ContentScriptExtensionIframe:ExtensionApiTest.ContentScriptOtherExtensions:ExtensionApiTest.ContentScriptExtensionProcess:ExtensionApiTest.TabsOnUpdated:ExtensionApiTest.WindowOpenPopupIframe:ExtensionBrowserTest.LoadChromeExtensionsWithOptionsParamWhenEmbedded:ExtensionCrxInstallerTest.InstallDelayedUntilNextUpdate:ExtensionOptionsApiTest.ExtensionCanEmbedOwnOptions:ExtensionSettingsApiTest.SimpleTest:ExtensionWebUITest.CanEmbedExtensionOptions:ExtensionWebUITest.ReceivesExtensionOptionsOnClose:ExternallyConnectableMessagingTest.*:GeolocationBrowserTest.*:HistoryBrowserTest.*:InlineLoginUISafeIframeBrowserTest.*:IsolatedAppTest.*:LaunchWebAuthFlowFunctionTest.*:MimeHandlerViewTest.*:NaClBrowserTestNonSfiMode.*:OptionsUIBrowserTest.*:PhishingClassifierTest.*:PhishingDOMFeatureExtractorTest.*:PlatformAppUrlRedirectorBrowserTest.*:PopupBlockerBrowserTest.*:PortForwardingTest.*:PrerenderBrowserTest.*:ProcessManagementTest.*:ProfileManagerBrowserTest.*:RedirectTest.*:ReferrerPolicyTest.*:SandboxStatusUITest.*:SSLUITest.*:SyncFileSystemApiTest.GetFileStatuses:SyncFileSystemTest.*:WebNavigationApiTest.CrossProcessFragment:WebNavigationApiTest.ServerRedirectSingleProcess:WebNavigationApiTest.CrossProcessHistory:WebViewDPITest.*:WebViewPluginTest.*:WebViewTest.*:ZoomControllerBrowserTest.*"] }
]
},
"Browser Side Navigation Linux": {
@@ -367,5 +354,50 @@
{ "test": "content_unittests", "args": ["--enable-browser-side-navigation", "--gtest_filter=-ResourceDispatcherHostTest.TransferNavigationHtml:ResourceDispatcherHostTest.TransferNavigationText:ResourceDispatcherHostTest.TransferNavigationWithProcessCrash:ResourceDispatcherHostTest.TransferNavigationWithTwoRedirects:ResourceDispatcherHostTest.TransferTwoNavigationsHtml:RenderFrameHostManagerTest.CancelPendingProperlyDeletesOrSwaps:WebContentsImplTest.CrossSiteNotPreemptedDuringBeforeUnload"] },
{ "test": "content_browsertests", "args": ["--enable-browser-side-navigation"] }
]
+ },
+ "CrWinClang tester": {
+ "gtest_tests": [
+ {
+ "test": "base_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
+ "cacheinvalidation_unittests",
+ "chrome_elf_unittests",
+ "components_unittests",
+ "courgette_unittests",
+ "crypto_unittests",
+ "extensions_unittests",
+ "gcm_unit_tests",
+ "google_apis_unittests",
+ "gpu_unittests",
+ "url_unittests",
+ "jingle_unittests",
+ "content_unittests",
+ "device_unittests",
+ "media_unittests",
+ "net_unittests",
+ "ppapi_unittests",
+ "printing_unittests",
+ "remoting_unittests",
+ "sbox_unittests",
+ "sbox_integration_tests",
+ "sbox_validation_tests",
+ "ipc_tests",
+ "sync_unit_tests",
+ "unit_tests",
+ "sql_unittests",
+ "ui_base_unittests",
+ "views_unittests",
+ "browser_tests",
+ {
+ "test": "content_browsertests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
+ "installer_util_unittests"
+ ]
}
}
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 3c05ad7..7c71066 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -33,7 +33,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -66,7 +71,12 @@
}
},
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "interactive_ui_tests",
"swarming": {
@@ -76,7 +86,12 @@
"ipc_mojo_unittests",
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
@@ -127,6 +142,18 @@
],
"scripts": [
{
+ "name": "checkdeps",
+ "script": "checkdeps.py"
+ },
+ {
+ "name": "checklicenses",
+ "script": "checklicenses.py"
+ },
+ {
+ "name": "checkperms",
+ "script": "checkperms.py"
+ },
+ {
"name": "telemetry_unittests",
"script": "telemetry_unittests.py"
},
@@ -174,7 +201,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -207,7 +239,12 @@
}
},
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "interactive_ui_tests",
"swarming": {
@@ -217,7 +254,12 @@
"ipc_mojo_unittests",
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
@@ -307,7 +349,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -340,7 +387,12 @@
}
},
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "interactive_ui_tests",
"swarming": {
@@ -351,7 +403,12 @@
"ipc_mojo_unittests",
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index cfc0a2a..8f8a30e 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -30,7 +30,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "content_browsertests",
"swarming": {
@@ -52,7 +57,12 @@
"can_use_on_swarming_builders": true
}
},
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"google_apis_unittests",
{
"test": "interactive_ui_tests",
@@ -62,7 +72,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "message_center_unittests",
"swarming": {
@@ -154,7 +169,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "content_browsertests",
"swarming": {
@@ -176,7 +196,12 @@
"can_use_on_swarming_builders": true
}
},
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"google_apis_unittests",
{
"test": "interactive_ui_tests",
@@ -186,7 +211,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "message_center_unittests",
"swarming": {
@@ -278,7 +308,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "content_browsertests",
"swarming": {
@@ -300,7 +335,12 @@
"can_use_on_swarming_builders": true
}
},
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"google_apis_unittests",
{
"test": "interactive_ui_tests",
@@ -310,7 +350,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "message_center_unittests",
"swarming": {
@@ -402,7 +447,12 @@
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "content_browsertests",
"swarming": {
@@ -424,7 +474,12 @@
"can_use_on_swarming_builders": true
}
},
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"google_apis_unittests",
{
"test": "interactive_ui_tests",
@@ -435,7 +490,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "message_center_unittests",
"swarming": {
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 296c0a7..168f3a3 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -233,7 +233,6 @@
"can_use_on_swarming_builders": true
}
},
- "athena_unittests",
"aura_unittests",
{
"test": "base_unittests",
diff --git a/testing/buildbot/chromium.webkit.json b/testing/buildbot/chromium.webkit.json
index 47f4c49..475f4ec 100644
--- a/testing/buildbot/chromium.webkit.json
+++ b/testing/buildbot/chromium.webkit.json
@@ -83,7 +83,6 @@
},
"sql_unittests",
"nacl_loader_unittests",
- "athena_unittests",
"app_shell_browsertests",
"app_shell_unittests",
"chromevox_tests",
@@ -173,7 +172,6 @@
"shards": 2
}
},
- "athena_unittests",
"gcm_unit_tests",
"skia_unittests",
{
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index a138a36..a257144 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -23,7 +23,12 @@
"cc_unittests",
"chromedriver_unittests",
"chrome_elf_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -44,7 +49,12 @@
"gcm_unit_tests",
"gfx_unittests",
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"installer_util_unittests",
{
"test": "interactive_ui_tests",
@@ -55,7 +65,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "net_unittests",
"swarming": {
@@ -128,7 +143,12 @@
"cc_unittests",
"chromedriver_unittests",
"chrome_elf_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -149,7 +169,12 @@
"gcm_unit_tests",
"gfx_unittests",
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"installer_util_unittests",
{
"test": "interactive_ui_tests",
@@ -160,7 +185,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
@@ -244,7 +274,12 @@
"chromedriver_unittests",
"chrome_elf_unittests",
"components_browsertests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -266,7 +301,12 @@
"gcm_unit_tests",
"gfx_unittests",
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"installer_util_unittests",
{
"test": "interactive_ui_tests",
@@ -278,7 +318,12 @@
"ipc_tests",
"jingle_unittests",
"keyboard_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"message_center_unittests",
"mojo_common_unittests",
"mojo_public_bindings_unittests",
@@ -367,7 +412,12 @@
"chromedriver_unittests",
"chrome_elf_unittests",
"components_browsertests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -389,7 +439,12 @@
"gcm_unit_tests",
"gfx_unittests",
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"installer_util_unittests",
{
"test": "interactive_ui_tests",
@@ -401,7 +456,12 @@
"ipc_tests",
"jingle_unittests",
"keyboard_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"message_center_unittests",
"mojo_common_unittests",
"mojo_public_bindings_unittests",
@@ -487,7 +547,12 @@
"cc_unittests",
"chromedriver_unittests",
"chrome_elf_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"compositor_unittests",
{
"test": "content_browsertests",
@@ -507,7 +572,12 @@
"events_unittests",
"extensions_unittests",
"gcm_unit_tests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"installer_util_unittests",
{
"test": "interactive_ui_tests",
@@ -518,7 +588,12 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
diff --git a/testing/buildbot/chromium_athena.json b/testing/buildbot/chromium_athena.json
deleted file mode 100644
index 7b9d3c6..0000000
--- a/testing/buildbot/chromium_athena.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "compile_targets": [
- "chrome",
- "athena_main"
- ],
- "gtest_tests": [
- {
- "test": "browser_tests",
- "swarming": {
- "can_use_on_swarming_builders": true,
- "shards": 5
- }
- },
- {
- "test": "athena_unittests",
- "swarming": {
- "can_use_on_swarming_builders": true,
- "shards": 5
- }
- }
- ]
-}
diff --git a/testing/buildbot/chromium_memory_trybot.json b/testing/buildbot/chromium_memory_trybot.json
index 2b8564e..af0f169 100644
--- a/testing/buildbot/chromium_memory_trybot.json
+++ b/testing/buildbot/chromium_memory_trybot.json
@@ -16,7 +16,12 @@
},
"cacheinvalidation_unittests",
"cc_unittests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "content_browsertests",
"swarming": {
@@ -39,7 +44,12 @@
"gcm_unit_tests",
"gfx_unittests",
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "interactive_ui_tests",
"swarming": {
@@ -49,11 +59,17 @@
},
"ipc_tests",
"jingle_unittests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "net_unittests",
"swarming": {
- "can_use_on_swarming_builders": true
+ "can_use_on_swarming_builders": true,
+ "shards": 2
}
},
"ppapi_unittests",
diff --git a/testing/buildbot/chromium_trybot.json b/testing/buildbot/chromium_trybot.json
index cdf0ea1..eef2619 100644
--- a/testing/buildbot/chromium_trybot.json
+++ b/testing/buildbot/chromium_trybot.json
@@ -67,7 +67,12 @@
"platforms": ["win"]
},
"components_browsertests",
- "components_unittests",
+ {
+ "test": "components_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "compositor_unittests",
"platforms": ["linux", "win"]
@@ -112,7 +117,12 @@
}
},
"google_apis_unittests",
- "gpu_unittests",
+ {
+ "test": "gpu_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "interactive_ui_tests",
"swarming": {
@@ -135,7 +145,12 @@
"platforms": ["linux", "win"]
},
"media_perftests",
- "media_unittests",
+ {
+ "test": "media_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
{
"test": "message_center_unittests",
"swarming": {
@@ -251,15 +266,6 @@
]
},
{
- "test": "athena_unittests",
- "platforms": ["linux"],
- "chromium_configs": [
- "chromium_chromeos",
- "chromium_chromeos_athena",
- "chromium_chromeos_ozone"
- ]
- },
- {
"test": "display_unittests",
"platforms": ["linux"]
},
diff --git a/testing/chromoting/browser_test_commands_linux.txt b/testing/chromoting/browser_test_commands_linux.txt
index 2f5f2be..d6f2bf5 100644
--- a/testing/chromoting/browser_test_commands_linux.txt
+++ b/testing/chromoting/browser_test_commands_linux.txt
@@ -3,4 +3,6 @@
/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gafyd
/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=non-gmail
/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_Connect_Local_Host --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
\ No newline at end of file
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_Connect_Local_Host --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_Connect --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_InvalidAccessCode --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile
\ No newline at end of file
diff --git a/testing/chromoting/browser_tests_launcher.py b/testing/chromoting/browser_tests_launcher.py
index be66955..0cb903b 100644
--- a/testing/chromoting/browser_tests_launcher.py
+++ b/testing/chromoting/browser_tests_launcher.py
@@ -80,20 +80,14 @@
shutil.rmtree(user_profile_dir)
-def InitialiseTestMachineForLinux(cfg_file, manifest_file, user_profile_dir):
+def InitialiseTestMachineForLinux(cfg_file):
"""Sets up a Linux machine for connect-to-host browser-tests.
- Copy over me2me host-config and manifest files to expected locations.
+ Copy over me2me host-config to expected locations.
By default, the Linux me2me host expects the host-config file to be under
$HOME/.config/chrome-remote-desktop
Its name is expected to have a hash that is specific to a machine.
- When a user launches the remoting web-app, the native-message host process is
- started. For this to work, the manifest file for me2me host is expected to be
- in a specific folder under the user-profile dir.
-
- This function performs both the above tasks.
-
TODO(anandc):
Once we have Linux machines in the swarming lab already installed with the
me2me host, this function should also perform the step of starting the host.
@@ -102,8 +96,6 @@
Args:
cfg_file: location of test account's host-config file.
- manifest_file: location of me2me host manifest file.
- user_profile_dir: user-profile-dir to be used by the connect-to-host tests.
"""
# First get home directory on current machine.
@@ -121,21 +113,39 @@
config_file_src,
os.path.join(default_config_file_location, default_config_file_name))
- # Next, create a user-profile dir, and place the me2me manifest.json file in
- # the expected location for native-messating-host to work properly.
+ # Finally, start chromoting host.
+ RunCommandInSubProcess(CHROMOTING_HOST_PATH + ' --start')
+
+
+def SetupUserProfileDir(me2me_manifest_file, it2me_manifest_file,
+ user_profile_dir):
+ """Sets up the Google Chrome user profile directory
+
+ Delete the previous user profile directory if exists and create a new one.
+ This invalidates any state changes by the previous test so each test can start
+ with the same environment.
+
+ When a user launches the remoting web-app, the native messaging host process
+ is started. For this to work, this function places the me2me and it2me native
+ messaging host manifest files in a specific folder under the user-profile dir.
+
+ Args:
+ me2me_manifest_file: location of me2me native messaging host manifest file.
+ it2me_manifest_file: location of it2me native messaging host manifest file.
+ user_profile_dir: Chrome user-profile-directory.
+ """
native_messaging_folder = os.path.join(user_profile_dir, NATIVE_MESSAGING_DIR)
if os.path.exists(user_profile_dir):
shutil.rmtree(user_profile_dir)
os.makedirs(native_messaging_folder)
- manifest_file_src = os.path.join(os.getcwd(), manifest_file)
- manifest_file_dest = (
- os.path.join(native_messaging_folder, os.path.basename(manifest_file)))
- shutil.copyfile(manifest_file_src, manifest_file_dest)
-
- # Finally, start chromoting host.
- RunCommandInSubProcess(CHROMOTING_HOST_PATH + ' --start')
+ manifest_files = [me2me_manifest_file, it2me_manifest_file]
+ for manifest_file in manifest_files:
+ manifest_file_src = os.path.join(os.getcwd(), manifest_file)
+ manifest_file_dest = (
+ os.path.join(native_messaging_folder, os.path.basename(manifest_file)))
+ shutil.copyfile(manifest_file_src, manifest_file_dest)
def main():
@@ -146,19 +156,24 @@
help='path to folder having product and test binaries.')
parser.add_argument('-c', '--cfg_file',
help='path to test host config file.')
- parser.add_argument('-m', '--manifest_file',
+ parser.add_argument('--me2me_manifest_file',
help='path to me2me host manifest file.')
+ parser.add_argument('--it2me_manifest_file',
+ help='path to it2me host manifest file.')
parser.add_argument(
'-u', '--user_profile_dir',
help='path to user-profile-dir, used by connect-to-host tests.')
args = parser.parse_args()
- InitialiseTestMachineForLinux(args.cfg_file, args.manifest_file,
- args.user_profile_dir)
+ InitialiseTestMachineForLinux(args.cfg_file)
with open(args.commands_file) as f:
for line in f:
+ # Reset the user profile directory to start each test with a clean slate.
+ SetupUserProfileDir(args.me2me_manifest_file, args.it2me_manifest_file,
+ args.user_profile_dir)
+
# Replace the PROD_DIR value in the command-line with
# the passed in value.
line = line.replace(PROD_DIR_ID, args.prod_dir)
diff --git a/testing/chromoting/chromoting_integration_tests.isolate b/testing/chromoting/chromoting_integration_tests.isolate
index 83eb440..be04bd6 100644
--- a/testing/chromoting/chromoting_integration_tests.isolate
+++ b/testing/chromoting/chromoting_integration_tests.isolate
@@ -13,8 +13,10 @@
'<(PRODUCT_DIR)',
'--cfg_file',
'../../remoting/tools/internal/test-account-host-config.json',
- '--manifest_file',
+ '--me2me_manifest_file',
'<(PRODUCT_DIR)/remoting/com.google.chrome.remote_desktop.json',
+ '--it2me_manifest_file',
+ '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_assistance.json',
'--user_profile_dir',
'/tmp/chromoting_test_profile',
],
@@ -27,6 +29,7 @@
'<(PRODUCT_DIR)/nacl_irt_x86_64.nexe',
'../../remoting/tools/internal/test-account-host-config.json',
'<(PRODUCT_DIR)/remoting/com.google.chrome.remote_desktop.json',
+ '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_assistance.json',
],
},
}],
@@ -44,6 +47,7 @@
'<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
'<(PRODUCT_DIR)/remoting/remoting.webapp/',
'<(PRODUCT_DIR)/remoting/remoting.webapp.v2/',
+ '<(PRODUCT_DIR)/remoting/browser_test_resources/',
'<(PRODUCT_DIR)/resources.pak',
'../../remoting/tools/internal/test_accounts.json',
],
diff --git a/testing/commit_queue/config.json b/testing/commit_queue/config.json
index 3e39bf3..a3142a5 100644
--- a/testing/commit_queue/config.json
+++ b/testing/commit_queue/config.json
@@ -8,10 +8,10 @@
"linux_chromium_asan_rel_ng": ["defaulttests"]
},
"tryserver.chromium.mac": {
+ "mac_chromium_gn_rel": ["defaulttests"]
},
"tryserver.chromium.win": {
- "win8_chromium_ng": ["defaulttests"],
- "win_chromium_compile_dbg_ng": ["defaulttests"]
+ "win8_chromium_ng": ["defaulttests"]
}
}
}
@@ -54,6 +54,7 @@
"linux_chromium_asan_rel": ["defaulttests"],
"linux_chromium_chromeos_compile_dbg_ng": ["defaulttests"],
"linux_chromium_chromeos_rel_ng": ["defaulttests"],
+ "linux_chromium_gn_chromeos_rel": ["defaulttests"],
"linux_chromium_gn_dbg": ["defaulttests"],
"linux_chromium_gn_rel": ["defaulttests"],
"linux_chromium_rel_ng": ["defaulttests"],
@@ -83,10 +84,11 @@
"ios_rel_device_ninja_ng": ["defaulttests"]
},
"tryserver.chromium.win": {
- "win_chromium_compile_dbg": ["defaulttests"],
+ "win8_chromium_rel": ["defaulttests"],
+ "win8_chromium_gn_rel": ["defaulttests"],
+ "win_chromium_compile_dbg_ng": ["defaulttests"],
"win_chromium_rel_ng": ["defaulttests"],
- "win_chromium_x64_rel_ng": ["defaulttests"],
- "win8_chromium_rel": ["defaulttests"]
+ "win_chromium_x64_rel_ng": ["defaulttests"]
},
"tryserver.chromium.gpu": {
"linux_gpu": ["defaulttests"],
diff --git a/testing/scripts/checklicenses.py b/testing/scripts/checklicenses.py
new file mode 100755
index 0000000..43342d0
--- /dev/null
+++ b/testing/scripts/checklicenses.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import json
+import os
+import sys
+
+
+import common
+
+
+def main_run(args):
+ with common.temporary_file() as tempfile_path:
+ rc = common.run_command([
+ os.path.join(common.SRC_DIR, 'tools', 'checklicenses',
+ 'checklicenses.py'),
+ '--json', tempfile_path
+ ])
+
+ with open(tempfile_path) as f:
+ checklicenses_results = json.load(f)
+
+ result_set = set()
+ for result in checklicenses_results:
+ result_set.add((result['filename'], result['license']))
+
+ json.dump({
+ 'valid': True,
+ 'failures': ['%s: %s' % (r[0], r[1]) for r in result_set],
+ }, args.output)
+
+ return rc
+
+
+def main_compile_targets(args):
+ json.dump([], args.output)
+
+
+if __name__ == '__main__':
+ funcs = {
+ 'run': main_run,
+ 'compile_targets': main_compile_targets,
+ }
+ sys.exit(common.run_script(sys.argv[1:], funcs))
diff --git a/testing/scripts/checkperms.py b/testing/scripts/checkperms.py
new file mode 100755
index 0000000..17e32c4
--- /dev/null
+++ b/testing/scripts/checkperms.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import json
+import os
+import sys
+
+
+import common
+
+
+def main_run(args):
+ with common.temporary_file() as tempfile_path:
+ rc = common.run_command([
+ os.path.join(common.SRC_DIR, 'tools', 'checkperms', 'checkperms.py'),
+ '--root', args.paths['checkout'],
+ '--json', tempfile_path
+ ])
+
+ with open(tempfile_path) as f:
+ checkperms_results = json.load(f)
+
+ result_set = set()
+ for result in checkperms_results:
+ result_set.add((result['rel_path'], result['error']))
+
+ json.dump({
+ 'valid': True,
+ 'failures': ['%s: %s' % (r[0], r[1]) for r in result_set],
+ }, args.output)
+
+ return rc
+
+
+def main_compile_targets(args):
+ json.dump([], args.output)
+
+
+if __name__ == '__main__':
+ funcs = {
+ 'run': main_run,
+ 'compile_targets': main_compile_targets,
+ }
+ sys.exit(common.run_script(sys.argv[1:], funcs))
diff --git a/testing/test.gni b/testing/test.gni
index 50b23df..9362a78 100644
--- a/testing/test.gni
+++ b/testing/test.gni
@@ -1,3 +1,237 @@
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+
+# ==============================================================================
+# TEST SETUP
+# ==============================================================================
+
+# Define a test as an executable (or apk on Android) with the "testonly" flag
+# set.
+template("test") {
+ if (is_android) {
+ import("//build/config/android/config.gni")
+ import("//build/config/android/rules.gni")
+
+ main_target_name = target_name
+ library_name = "_${target_name}__library"
+ apk_name = "${target_name}_apk"
+
+ shared_library(library_name) {
+ # Configs will always be defined since we set_defaults for a component
+ # in the main config. We want to use those rather than whatever came with
+ # the nested shared/static library inside the component.
+ configs = [] # Prevent list overwriting warning.
+ configs = invoker.configs
+
+ # See above call.
+ set_sources_assignment_filter([])
+
+ testonly = true
+
+ if (defined(invoker.all_dependent_configs)) {
+ all_dependent_configs = invoker.all_dependent_configs
+ }
+ if (defined(invoker.allow_circular_includes_from)) {
+ allow_circular_includes_from = invoker.allow_circular_includes_from
+ }
+ if (defined(invoker.cflags)) {
+ cflags = invoker.cflags
+ }
+ if (defined(invoker.cflags_c)) {
+ cflags_c = invoker.cflags_c
+ }
+ if (defined(invoker.cflags_cc)) {
+ cflags_cc = invoker.cflags_cc
+ }
+ if (defined(invoker.cflags_objc)) {
+ cflags_objc = invoker.cflags_objc
+ }
+ if (defined(invoker.cflags_objcc)) {
+ cflags_objcc = invoker.cflags_objcc
+ }
+ if (defined(invoker.check_includes)) {
+ check_includes = invoker.check_includes
+ }
+ if (defined(invoker.data)) {
+ data = invoker.data
+ }
+ if (defined(invoker.data_deps)) {
+ data_deps = invoker.data_deps
+ }
+ if (defined(invoker.datadeps)) {
+ datadeps = invoker.datadeps
+ }
+ if (defined(invoker.defines)) {
+ defines = invoker.defines
+ }
+ deps = []
+ if (!defined(invoker.use_launcher) || invoker.use_launcher) {
+ deps += [ "//testing/android:native_test_native_code" ]
+ }
+ if (defined(invoker.deps)) {
+ deps += invoker.deps
+ }
+ if (defined(invoker.direct_dependent_configs)) {
+ direct_dependent_configs = invoker.direct_dependent_configs
+ }
+ if (defined(invoker.forward_dependent_configs_from)) {
+ forward_dependent_configs_from = invoker.forward_dependent_configs_from
+ }
+ if (defined(invoker.include_dirs)) {
+ include_dirs = invoker.include_dirs
+ }
+ if (defined(invoker.ldflags)) {
+ ldflags = invoker.ldflags
+ }
+ if (defined(invoker.lib_dirs)) {
+ lib_dirs = invoker.lib_dirs
+ }
+ if (defined(invoker.libs)) {
+ libs = invoker.libs
+ }
+ if (defined(invoker.output_extension)) {
+ output_extension = invoker.output_extension
+ }
+ if (defined(invoker.output_name)) {
+ output_name = invoker.output_name
+ }
+ if (defined(invoker.public)) {
+ public = invoker.public
+ }
+ if (defined(invoker.public_configs)) {
+ public_configs = invoker.public_configs
+ }
+ if (defined(invoker.public_deps)) {
+ public_deps = invoker.public_deps
+ }
+ if (defined(invoker.sources)) {
+ sources = invoker.sources
+ }
+ if (defined(invoker.visibility)) {
+ visibility = invoker.visibility
+ }
+ }
+
+ unittest_apk(apk_name) {
+ unittests_dep = ":$library_name"
+ apk_name = main_target_name
+ if (defined(invoker.output_name)) {
+ test_output_name = invoker.output_name
+ unittests_binary = "lib${test_output_name}.so"
+ }
+ deps = [
+ ":$library_name",
+ ]
+ if (defined(invoker.apk_deps)) {
+ deps += invoker.apk_deps
+ }
+ }
+
+ group(target_name) {
+ testonly = true
+
+ deps = [
+ ":$library_name",
+ ":$apk_name",
+ ]
+ }
+ } else {
+ executable(target_name) {
+ # See above.
+ configs = [] # Prevent list overwriting warning.
+ configs = invoker.configs
+
+ # See above call.
+ set_sources_assignment_filter([])
+
+ testonly = true
+
+ if (defined(invoker.all_dependent_configs)) {
+ all_dependent_configs = invoker.all_dependent_configs
+ }
+ if (defined(invoker.allow_circular_includes_from)) {
+ allow_circular_includes_from = invoker.allow_circular_includes_from
+ }
+ if (defined(invoker.cflags)) {
+ cflags = invoker.cflags
+ }
+ if (defined(invoker.cflags_c)) {
+ cflags_c = invoker.cflags_c
+ }
+ if (defined(invoker.cflags_cc)) {
+ cflags_cc = invoker.cflags_cc
+ }
+ if (defined(invoker.cflags_objc)) {
+ cflags_objc = invoker.cflags_objc
+ }
+ if (defined(invoker.cflags_objcc)) {
+ cflags_objcc = invoker.cflags_objcc
+ }
+ if (defined(invoker.check_includes)) {
+ check_includes = invoker.check_includes
+ }
+ if (defined(invoker.data)) {
+ data = invoker.data
+ }
+ if (defined(invoker.data_deps)) {
+ data_deps = invoker.data_deps
+ }
+ if (defined(invoker.datadeps)) {
+ datadeps = invoker.datadeps
+ }
+ if (defined(invoker.defines)) {
+ defines = invoker.defines
+ }
+
+ # All shared libraries must have the sanitizer deps to properly link in
+ # asan mode (this target will be empty in other cases).
+ if (defined(invoker.deps)) {
+ deps = invoker.deps + [ "//build/config/sanitizers:deps" ]
+ } else {
+ deps = [
+ "//build/config/sanitizers:deps",
+ ]
+ }
+ if (defined(invoker.direct_dependent_configs)) {
+ direct_dependent_configs = invoker.direct_dependent_configs
+ }
+ if (defined(invoker.forward_dependent_configs_from)) {
+ forward_dependent_configs_from = invoker.forward_dependent_configs_from
+ }
+ if (defined(invoker.include_dirs)) {
+ include_dirs = invoker.include_dirs
+ }
+ if (defined(invoker.ldflags)) {
+ ldflags = invoker.ldflags
+ }
+ if (defined(invoker.lib_dirs)) {
+ lib_dirs = invoker.lib_dirs
+ }
+ if (defined(invoker.libs)) {
+ libs = invoker.libs
+ }
+ if (defined(invoker.output_extension)) {
+ output_extension = invoker.output_extension
+ }
+ if (defined(invoker.output_name)) {
+ output_name = invoker.output_name
+ }
+ if (defined(invoker.public)) {
+ public = invoker.public
+ }
+ if (defined(invoker.public_configs)) {
+ public_configs = invoker.public_configs
+ }
+ if (defined(invoker.public_deps)) {
+ public_deps = invoker.public_deps
+ }
+ if (defined(invoker.sources)) {
+ sources = invoker.sources
+ }
+ if (defined(invoker.visibility)) {
+ visibility = invoker.visibility
+ }
+ }
+ }
+}