dart-sdk/pkg/vm_service/test/breakpoint_non_debuggable_library_test.dart
Ben Konyi 76a74ba678 [ package:vm_service ] Migrate Observatory service tests to package:vm_service (Pt 1)
See https://github.com/dart-lang/sdk/issues/45037

TEST=pkg/vm_service/test/*

Change-Id: I20bfc03ae40bc41ee4d965a71f090ecf974e4e59
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185522
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2021-11-05 17:04:07 +00:00

84 lines
2.8 KiB
Dart

// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:test/test.dart';
import 'package:test_package/has_part.dart' as test_pkg;
import 'package:vm_service/vm_service.dart';
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
const String file = 'package:test_package/has_part.dart';
// print() within fooz()
const int LINE_A = 15;
// print() within barz()
const int LINE_B = 11;
testMain() {
test_pkg.fooz();
}
var tests = <IsolateTest>[
hasPausedAtStart,
(VmService service, IsolateRef isolateRef) async {
// Mark 'package:observatory_test_package/has_part.dart' as not debuggable.
final isolateId = isolateRef.id!;
final isolate = await service.getIsolate(isolateId);
LibraryRef has_part_ref = isolate.libraries!.firstWhere(
(LibraryRef library) => library.uri == file,
);
Library has_part =
await service.getObject(isolateId, has_part_ref.id!) as Library;
expect(has_part.debuggable, true);
// SetBreakpoint before setting library to non-debuggable.
// Breakpoints are allowed to be set (before marking library as
// non-debuggable) but are not hit when running (after marking library
// as non-debuggable).
ScriptRef script = has_part.scripts!.firstWhere(
(ScriptRef script) => script.uri == file,
);
Breakpoint bpt = await service.addBreakpoint(isolateId, script.id!, LINE_A);
print("Breakpoint is $bpt");
expect(bpt, isNotNull);
// Set breakpoint and check later that this breakpoint won't be added if
// the library is non-debuggable.
bpt = await service.addBreakpoint(isolateId, script.id!, LINE_B);
print("Breakpoint is $bpt");
expect(bpt, isNotNull);
// Remove breakpoint.
final res = await service.removeBreakpoint(isolateId, bpt.id!);
expect(res.type, 'Success');
await service.setLibraryDebuggable(isolateId, has_part.id!, false);
has_part = await service.getObject(isolateId, has_part.id!) as Library;
expect(has_part.debuggable, false);
print('$has_part is debuggable: ${has_part.debuggable}');
// Breakpoints are not allowed to set on non-debuggable libraries.
try {
await service.addBreakpoint(isolateId, script.id!, LINE_B);
} on RPCError catch (e) {
// Cannot add breakpoint error code
expect(e.code, 102);
expect(e.details, contains("Cannot add breakpoint at line '11'"));
print("Set Breakpoint to non-debuggable library is not allowed");
}
},
resumeIsolate,
hasStoppedAtExit,
];
main(args) => runIsolateTests(
args,
tests,
'breakpoint_non_debuggable_library_test.dart',
testeeConcurrent: testMain,
pause_on_start: true,
pause_on_exit: true,
);