blob: b8ac406e260e7eaaa415e598e1e43410d63e5ec8 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import 'dart:async';
import 'package:file/file.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
import '../src/common.dart';
import 'test_data/basic_project.dart';
import 'test_driver.dart';
import 'test_utils.dart';
void main() {
Directory tempDir;
FlutterRunTestDriver flutter;
VmService vmService;
setUp(() async {
tempDir = createResolvedTempDirectorySync('vmservice_integration_test.');
final BasicProjectWithTimelineTraces project = BasicProjectWithTimelineTraces();
await project.setUpIn(tempDir);
flutter = FlutterRunTestDriver(tempDir);
await flutter.run(withDebugger: true);
final int port = flutter.vmServicePort;
vmService = await vmServiceConnectUri('ws://localhost:$port/ws');
});
tearDown(() async {
await flutter?.stop();
tryToDelete(tempDir);
});
// Regression test for https://github.com/flutter/flutter/issues/79498
testWithoutContext('Can connect to the timeline without getting ANR from the application', () async {
final Timer timer = Timer(const Duration(minutes: 5), () {
print(
'Warning: test isolate is still active after 5 minutes. This is likely an '
'app-not-responding error and not a flake. See https://github.com/flutter/flutter/issues/79498 '
'for the bug this test is attempting to exercise.'
);
});
// Subscribe to all available streams.
await Future.wait(<Future<void>>[
vmService.streamListen(EventStreams.kVM),
vmService.streamListen(EventStreams.kIsolate),
vmService.streamListen(EventStreams.kDebug),
vmService.streamListen(EventStreams.kGC),
vmService.streamListen(EventStreams.kExtension),
vmService.streamListen(EventStreams.kTimeline),
vmService.streamListen(EventStreams.kLogging),
vmService.streamListen(EventStreams.kService),
vmService.streamListen(EventStreams.kHeapSnapshot),
vmService.streamListen(EventStreams.kStdout),
vmService.streamListen(EventStreams.kStderr),
]);
// Verify that the app can be interacted with by querying the brightness
// for 30 seconds. Once this time has elapsed, wait for any pending requests and
// exit. If the app stops responding, the requests made will hang.
bool interactionCompleted = false;
Timer(const Duration(seconds: 30), () {
interactionCompleted = true;
});
final Isolate isolate = await waitForExtension(vmService, 'ext.flutter.brightnessOverride');
while (!interactionCompleted) {
final Response response = await vmService.callServiceExtension(
'ext.flutter.brightnessOverride',
isolateId: isolate.id,
);
expect(response.json['value'], 'Brightness.light');
}
timer.cancel();
});
}