Integration test for channel communication (#9621)

diff --git a/dev/devicelab/bin/tasks/platform_channel_test.dart b/dev/devicelab/bin/tasks/channels_integration_test.dart
similarity index 77%
copy from dev/devicelab/bin/tasks/platform_channel_test.dart
copy to dev/devicelab/bin/tasks/channels_integration_test.dart
index d1afc67..8b60289 100644
--- a/dev/devicelab/bin/tasks/platform_channel_test.dart
+++ b/dev/devicelab/bin/tasks/channels_integration_test.dart
@@ -4,11 +4,11 @@
 
 import 'dart:async';
 
-import 'package:flutter_devicelab/tasks/perf_tests.dart';
 import 'package:flutter_devicelab/framework/adb.dart';
 import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/tasks/integration_tests.dart';
 
 Future<Null> main() async {
   deviceOperatingSystem = DeviceOperatingSystem.android;
-  await task(createPlatformServiceDriverTest());
+  await task(createChannelsIntegrationTest());
 }
diff --git a/dev/devicelab/bin/tasks/platform_channel_test_ios.dart b/dev/devicelab/bin/tasks/channels_integration_test_ios.dart
similarity index 77%
copy from dev/devicelab/bin/tasks/platform_channel_test_ios.dart
copy to dev/devicelab/bin/tasks/channels_integration_test_ios.dart
index 07760fb..9ac1a3a 100644
--- a/dev/devicelab/bin/tasks/platform_channel_test_ios.dart
+++ b/dev/devicelab/bin/tasks/channels_integration_test_ios.dart
@@ -4,11 +4,11 @@
 
 import 'dart:async';
 
-import 'package:flutter_devicelab/tasks/perf_tests.dart';
 import 'package:flutter_devicelab/framework/adb.dart';
 import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/tasks/integration_tests.dart';
 
 Future<Null> main() async {
   deviceOperatingSystem = DeviceOperatingSystem.ios;
-  await task(createPlatformServiceDriverTest());
+  await task(createChannelsIntegrationTest());
 }
diff --git a/dev/devicelab/bin/tasks/platform_channel_test.dart b/dev/devicelab/bin/tasks/channels_integration_test_win.dart
similarity index 77%
copy from dev/devicelab/bin/tasks/platform_channel_test.dart
copy to dev/devicelab/bin/tasks/channels_integration_test_win.dart
index d1afc67..8b60289 100644
--- a/dev/devicelab/bin/tasks/platform_channel_test.dart
+++ b/dev/devicelab/bin/tasks/channels_integration_test_win.dart
@@ -4,11 +4,11 @@
 
 import 'dart:async';
 
-import 'package:flutter_devicelab/tasks/perf_tests.dart';
 import 'package:flutter_devicelab/framework/adb.dart';
 import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/tasks/integration_tests.dart';
 
 Future<Null> main() async {
   deviceOperatingSystem = DeviceOperatingSystem.android;
-  await task(createPlatformServiceDriverTest());
+  await task(createChannelsIntegrationTest());
 }
diff --git a/dev/devicelab/bin/tasks/platform_channel_test.dart b/dev/devicelab/bin/tasks/platform_channel_sample_test.dart
similarity index 77%
rename from dev/devicelab/bin/tasks/platform_channel_test.dart
rename to dev/devicelab/bin/tasks/platform_channel_sample_test.dart
index d1afc67..38b10b3 100644
--- a/dev/devicelab/bin/tasks/platform_channel_test.dart
+++ b/dev/devicelab/bin/tasks/platform_channel_sample_test.dart
@@ -4,11 +4,11 @@
 
 import 'dart:async';
 
-import 'package:flutter_devicelab/tasks/perf_tests.dart';
 import 'package:flutter_devicelab/framework/adb.dart';
 import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/tasks/integration_tests.dart';
 
 Future<Null> main() async {
   deviceOperatingSystem = DeviceOperatingSystem.android;
-  await task(createPlatformServiceDriverTest());
+  await task(createPlatformChannelSampleTest());
 }
diff --git a/dev/devicelab/bin/tasks/platform_channel_test_ios.dart b/dev/devicelab/bin/tasks/platform_channel_sample_test_ios.dart
similarity index 77%
rename from dev/devicelab/bin/tasks/platform_channel_test_ios.dart
rename to dev/devicelab/bin/tasks/platform_channel_sample_test_ios.dart
index 07760fb..9feeaa5 100644
--- a/dev/devicelab/bin/tasks/platform_channel_test_ios.dart
+++ b/dev/devicelab/bin/tasks/platform_channel_sample_test_ios.dart
@@ -4,11 +4,11 @@
 
 import 'dart:async';
 
-import 'package:flutter_devicelab/tasks/perf_tests.dart';
 import 'package:flutter_devicelab/framework/adb.dart';
 import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/tasks/integration_tests.dart';
 
 Future<Null> main() async {
   deviceOperatingSystem = DeviceOperatingSystem.ios;
-  await task(createPlatformServiceDriverTest());
+  await task(createPlatformChannelSampleTest());
 }
diff --git a/dev/devicelab/lib/tasks/integration_tests.dart b/dev/devicelab/lib/tasks/integration_tests.dart
new file mode 100644
index 0000000..004e7e5
--- /dev/null
+++ b/dev/devicelab/lib/tasks/integration_tests.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2017 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 'dart:async';
+
+import '../framework/adb.dart';
+import '../framework/framework.dart';
+import '../framework/ios.dart';
+import '../framework/utils.dart';
+
+TaskFunction createChannelsIntegrationTest() {
+  return new DriverTest(
+    '${flutterDirectory.path}/dev/integration_tests/channels',
+    'lib/main.dart',
+  );
+}
+
+TaskFunction createPlatformChannelSampleTest() {
+  return new DriverTest(
+    '${flutterDirectory.path}/examples/platform_channel',
+    'test_driver/button_tap.dart',
+  );
+}
+
+class DriverTest {
+
+  DriverTest(this.testDirectory, this.testTarget);
+
+  final String testDirectory;
+  final String testTarget;
+
+  Future<TaskResult> call() {
+    return inDirectory(testDirectory, () async {
+      final Device device = await devices.workingDevice;
+      await device.unlock();
+      final String deviceId = device.deviceId;
+      await flutter('packages', options: <String>['get']);
+
+      if (deviceOperatingSystem == DeviceOperatingSystem.ios) {
+        await prepareProvisioningCertificates(testDirectory);
+        // This causes an Xcode project to be created.
+        await flutter('build', options: <String>['ios', '--profile']);
+      }
+
+      await flutter('drive', options: <String>[
+        '-v',
+        '-t',
+        testTarget,
+        '-d',
+        deviceId,
+      ]);
+
+      return new TaskResult.success(null);
+    });
+  }
+}
diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart
index 87da30c..c59f216 100644
--- a/dev/devicelab/lib/tasks/perf_tests.dart
+++ b/dev/devicelab/lib/tasks/perf_tests.dart
@@ -10,14 +10,6 @@
 import '../framework/ios.dart';
 import '../framework/utils.dart';
 
-
-TaskFunction createPlatformServiceDriverTest() {
-  return new DriverTest(
-      '${flutterDirectory.path}/examples/platform_channel',
-      'test_driver/button_tap.dart',
-  );
-}
-
 TaskFunction createComplexLayoutScrollPerfTest() {
   return new PerfTest(
     '${flutterDirectory.path}/dev/benchmarks/complex_layout',
@@ -175,40 +167,6 @@
   }
 }
 
-
-class DriverTest {
-
-  DriverTest(this.testDirectory, this.testTarget);
-
-  final String testDirectory;
-  final String testTarget;
-
-  Future<TaskResult> call() {
-    return inDirectory(testDirectory, () async {
-      final Device device = await devices.workingDevice;
-      await device.unlock();
-      final String deviceId = device.deviceId;
-      await flutter('packages', options: <String>['get']);
-
-      if (deviceOperatingSystem == DeviceOperatingSystem.ios) {
-        await prepareProvisioningCertificates(testDirectory);
-        // This causes an Xcode project to be created.
-        await flutter('build', options: <String>['ios', '--profile']);
-      }
-
-      await flutter('drive', options: <String>[
-        '-v',
-        '-t',
-        testTarget,
-        '-d',
-        deviceId,
-      ]);
-
-      return new TaskResult.success(null);
-    });
-  }
-}
-
 class BuildTest {
 
   BuildTest(this.testDirectory);
diff --git a/dev/devicelab/manifest.yaml b/dev/devicelab/manifest.yaml
index 2aeb98d..b527fd3 100644
--- a/dev/devicelab/manifest.yaml
+++ b/dev/devicelab/manifest.yaml
@@ -83,7 +83,13 @@
     required_agent_capabilities: ["has-android-device"]
     flaky: true
 
-  platform_channel_test:
+  channels_integration_test:
+    description: >
+      Checks that platform channels work on Android.
+    stage: devicelab
+    required_agent_capabilities: ["has-android-device"]
+
+  platform_channel_sample_test:
     description: >
      Runs a driver test on the Platform Channel sample app on Android.
     stage: devicelab
@@ -154,7 +160,13 @@
 
   # iOS on-device tests
 
-  platform_channel_test_ios:
+  channels_integration_test_ios:
+    description: >
+      Checks that platform channels work on iOS.
+    stage: devicelab_ios
+    required_agent_capabilities: ["has-ios-device"]
+
+  platform_channel_sample_test_ios:
     description: >
       Runs a driver test on the Platform Channel sample app on iOS.
     stage: devicelab_ios
@@ -207,6 +219,13 @@
 
   # Tests running on Windows host
 
+  channels_integration_test_win:
+    description: >
+      Checks that platform channels work when app is launched from Windows.
+    stage: devicelab_win
+    required_agent_capabilities: ["windows"]
+    flaky: true
+
   flutter_gallery_win__build:
     description: >
       Collects various performance metrics from AOT builds of the Flutter