From 36aaf1b949f97d16c2f78aa62b0d5b7f8d8355a4 Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Mon, 16 Dec 2024 18:23:08 +0100 Subject: [PATCH 1/2] Stricter retry verification. --- .../lib/retry_enforcer_storage.dart | 38 +++++++++++++++---- pkg/fake_gcloud/pubspec.yaml | 1 + 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/pkg/fake_gcloud/lib/retry_enforcer_storage.dart b/pkg/fake_gcloud/lib/retry_enforcer_storage.dart index 7a8fa72bfc..f4e35858b2 100644 --- a/pkg/fake_gcloud/lib/retry_enforcer_storage.dart +++ b/pkg/fake_gcloud/lib/retry_enforcer_storage.dart @@ -5,19 +5,41 @@ import 'dart:async'; import 'package:gcloud/storage.dart'; +import 'package:stack_trace/stack_trace.dart'; + +const _skippedFirstFrames = { + 'package:fake_gcloud/retry_enforcer_storage.dart', + 'package:pub_dev/shared/storage.dart', +}; void _verifyRetryOnStack() { final st = StackTrace.current.toString(); - if (st.contains('package:retry/')) return; - if (st.contains('retryAsync')) return; // lib/shared/utils.dart + final trace = Trace.current(); + + // The first frame index outside of this file. + var startFrameIndex = 0; + while (_skippedFirstFrames.any((skipped) => + trace.frames[startFrameIndex].uri.toString().contains(skipped))) { + startFrameIndex++; + } + + final firstRealFrame = + trace.frames.skip(startFrameIndex).firstOrNull?.toString(); + if (firstRealFrame == null) { + return; + } // detect direct test calls - final linesWithoutThisFile = st - .split('\n') - .where((l) => !l.contains('retry_enforcer_storage.dart')) - .toList(); - if (linesWithoutThisFile.isNotEmpty && - linesWithoutThisFile.first.contains('_test.dart')) { + if (firstRealFrame.contains('_test.dart')) { + return; + } + + // detect retry library + if (firstRealFrame.contains('package:retry/')) { + return; + } + // detect lib/shared/utils.dart use + if (firstRealFrame.contains('retryAsync')) { return; } diff --git a/pkg/fake_gcloud/pubspec.yaml b/pkg/fake_gcloud/pubspec.yaml index 0affdd8d6f..4b2c4261f7 100644 --- a/pkg/fake_gcloud/pubspec.yaml +++ b/pkg/fake_gcloud/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: gcloud: ^0.8.18 logging: '>=0.11.3 <2.0.0' _discoveryapis_commons: ^1.0.7 + stack_trace: ^1.12.0 dev_dependencies: coverage: any # test already depends on it From d33d00430828a722d16cce1e4ab5ed376f08bd58 Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Mon, 16 Dec 2024 20:36:01 +0100 Subject: [PATCH 2/2] remove leftover --- pkg/fake_gcloud/lib/retry_enforcer_storage.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/fake_gcloud/lib/retry_enforcer_storage.dart b/pkg/fake_gcloud/lib/retry_enforcer_storage.dart index f4e35858b2..85cc89f167 100644 --- a/pkg/fake_gcloud/lib/retry_enforcer_storage.dart +++ b/pkg/fake_gcloud/lib/retry_enforcer_storage.dart @@ -13,7 +13,6 @@ const _skippedFirstFrames = { }; void _verifyRetryOnStack() { - final st = StackTrace.current.toString(); final trace = Trace.current(); // The first frame index outside of this file. @@ -43,8 +42,8 @@ void _verifyRetryOnStack() { return; } - print('Missing retry detected:\n$st\n'); - throw AssertionError('retry is not present in stacktrace: $st'); + print('Missing retry detected:\n$trace\n'); + throw AssertionError('retry is not present in stacktrace: $trace'); } Future _verifyRetry(