From c22319371a6cca3d4a903714dcdfa9aad7919811 Mon Sep 17 00:00:00 2001 From: John McDole Date: Thu, 12 Feb 2026 13:29:42 -0800 Subject: [PATCH 1/3] feat: move dashboard's dev_cocoon to integration tests Updates the dashboard code to use a "real" server in the browser. Currently, `DevelopmentCocoonService` in `dashboard/lib/service/dev_cocoon.dart` generates fake data manually. While effective, it doesn't test end-to-end with the backend logic or API surface, leading to a false sense of security (and having caused multiple 'push to prod to fix'). By using `IntegrationServer`, we can run the real `app_dart` logic against in-memory fakes (Firestore, BigQuery, etc.), ensuring the frontend is tested against the same logic the production server uses. 1. defangs app_dart/lib/** by removing app_engine and dart:io. * gae_server.dart passes in the needed "dart:io" handlers * server.dart now handles an abstract Request, which can be real (app engine, local server) or fake (tests / dashboard local). * "dynamic config" no longer looks up the config.yaml from the read only filesystem and instead we build dynamic config with build hooks - `generated_config.dart`. * dynamic_config with compield defaults means some tests need to ensure the flags they are testing are set correctly. 2. Removes dev_cocoon and its hardcoded mockery (partial reason for the image diffs) 3. Adds `IntegrationServerAdapter` (which is an `AppEngineCocoonService`) to wrap and make fake http calls to the `IntegrationServer`. --- app_dart/analysis_options.yaml | 5 + app_dart/bin/gae_server.dart | 5 +- app_dart/hook/build.dart | 32 + app_dart/lib/cocoon_service.dart | 9 + app_dart/lib/server.dart | 5 +- .../src/foundation/github_checks_util.dart | 2 +- app_dart/lib/src/foundation/utils.dart | 1 - app_dart/lib/src/generated_config.dart | 35 + app_dart/lib/src/model/firestore/account.dart | 3 +- app_dart/lib/src/model/firestore/commit.dart | 3 - .../firestore/content_aware_hash_builds.dart | 3 +- .../model/firestore/github_build_status.dart | 1 - .../model/firestore/github_gold_status.dart | 1 - .../src/model/firestore/presubmit_guard.dart | 1 - app_dart/lib/src/model/firestore/task.dart | 1 - .../get_build_status_badge.dart | 6 +- .../get_engine_artifacts_ready.dart | 3 - .../get_presubmit_checks.dart | 1 - .../request_handlers/get_presubmit_guard.dart | 1 - .../get_presubmit_guard_summaries.dart | 2 - .../lib/src/request_handlers/get_status.dart | 1 - .../get_suppressed_tests.dart | 1 - .../github/webhook_subscription.dart | 1 - .../postsubmit_luci_subscription.dart | 6 +- .../presubmit_luci_subscription.dart | 6 +- .../push_gold_status_to_github.dart | 1 - .../request_handling/api_request_handler.dart | 14 +- .../src/request_handling/authentication.dart | 4 +- .../cache_request_handler.dart | 9 +- .../checkrun_authentication.dart | 12 +- .../dashboard_authentication.dart | 14 +- .../lib/src/request_handling/exceptions.dart | 2 +- .../lib/src/request_handling/http_io.dart | 104 +++ .../lib/src/request_handling/http_utils.dart | 62 ++ .../pubsub_authentication.dart | 7 +- .../src/request_handling/request_handler.dart | 78 +- .../lib/src/request_handling/response.dart | 31 +- .../request_handling/static_file_handler.dart | 3 +- .../subscription_handler.dart | 31 +- .../swarming_authentication.dart | 7 +- .../lib/src/service/build_bucket_client.dart | 2 +- .../lib/src/service/build_status_service.dart | 2 - app_dart/lib/src/service/firestore.dart | 2 - .../lib/src/service/flags/dynamic_config.dart | 27 +- .../service/flags/dynamic_config_updater.dart | 1 - app_dart/lib/src/service/gerrit_service.dart | 2 +- .../lib/src/service/luci_build_service.dart | 1 - app_dart/lib/src/service/scheduler.dart | 2 +- .../scheduler/process_check_run_result.dart | 3 +- app_dart/pubspec.yaml | 3 + app_dart/test/foundation/utils_test.dart | 2 +- .../model/firestore/suppressed_test_test.dart | 1 - .../get_presubmit_checks_test.dart | 1 - .../get_suppressed_tests_test.dart | 2 - .../presubmit_luci_subscription_test.dart | 1 - .../rerun_prod_task_test.dart | 1 - .../api_request_handler_test.dart | 3 +- .../cache_request_handler_test.dart | 10 +- .../checkrun_authentication_test.dart | 9 +- .../dashboard_authentication_test.dart | 22 +- .../pubsub_authentication_test.dart | 23 +- .../request_handler_test.dart | 3 +- .../subscription_handler_test.dart | 3 +- .../swarming_authentication_test.dart | 25 +- app_dart/test/service/config_test.dart | 1 - .../service/dynamic_config_updater_test.dart | 1 - .../scheduler/ci_yaml_fetcher_test.dart | 1 - .../service/scheduler/hash_workflow_test.dart | 9 +- app_dart/test/service/scheduler_test.dart | 13 +- .../request_handler_tester.dart | 5 +- app_dart/tool/local_server.dart | 6 +- .../cocoon_integration_test_20260206/plan.md | 4 +- .../cocoon_integration_test_20260206/spec.md | 0 conductor/tracks.md | 16 - .../lib/dashboard_navigation_drawer.dart | 45 + dashboard/lib/service/appengine_cocoon.dart | 4 + dashboard/lib/service/cocoon.dart | 14 +- dashboard/lib/service/data_seeder.dart | 756 +++++++++++++++++ dashboard/lib/service/dev_cocoon.dart | 773 ------------------ .../service/integration_server_adapter.dart | 168 ++++ dashboard/lib/service/scenarios.dart | 21 + dashboard/lib/state/build.dart | 13 + dashboard/pubspec.yaml | 7 +- dashboard/test/build_dashboard_page_test.dart | 8 +- ...ld_dashboard.defaultPropertySheet.dark.png | Bin 41245 -> 31470 bytes .../build_dashboard.defaultPropertySheet.png | Bin 43242 -> 24915 bytes dashboard/test/service/data_seeder_test.dart | 33 + dashboard/test/service/dev_cocoon_test.dart | 30 - .../integration_server_adapter_test.dart | 56 ++ dashboard/test/utils/fake_build.dart | 4 + .../widgets/goldens/commit_box_test.idle.png | Bin 28260 -> 28260 bytes .../widgets/goldens/commit_box_test.open.png | Bin 33479 -> 33479 bytes .../sign_in_button.not_authenticated.png | Bin 23041 -> 23041 bytes .../task_grid_test.dev.mouse_scroll_x.png | Bin 22532 -> 26388 bytes .../task_grid_test.dev.mouse_scroll_y.png | Bin 27652 -> 33476 bytes .../task_grid_test.dev.origin.dark.png | Bin 29737 -> 35280 bytes .../goldens/task_grid_test.dev.origin.png | Bin 29253 -> 35296 bytes .../task_grid_test.dev.scroll_x.dark.png | Bin 22928 -> 26616 bytes .../goldens/task_grid_test.dev.scroll_x.png | Bin 22532 -> 26388 bytes .../task_grid_test.dev.scroll_y.dark.png | Bin 27819 -> 33414 bytes .../goldens/task_grid_test.dev.scroll_y.png | Bin 27652 -> 33476 bytes ...grid_test.filterDefault.differentTypes.png | Bin 3570 -> 3570 bytes ..._test.filterShowBringup.differentTypes.png | Bin 4108 -> 4108 bytes .../widgets/goldens/task_grid_test.withL.png | Bin 2296 -> 2296 bytes .../goldens/task_grid_test.withSkips.png | Bin 2437 -> 2437 bytes .../goldens/task_grid_test.withoutL.png | Bin 2121 -> 2121 bytes ...task_overlay_test.flaky_overlay_closed.png | Bin 25200 -> 25200 bytes .../task_overlay_test.flaky_overlay_open.png | Bin 34037 -> 34037 bytes .../task_overlay_test.nondevicelab_closed.png | Bin 25198 -> 25198 bytes .../task_overlay_test.nondevicelab_open.png | Bin 30357 -> 30357 bytes ...ask_overlay_test.normal_overlay_closed.png | Bin 26956 -> 26956 bytes .../task_overlay_test.normal_overlay_open.png | Bin 35412 -> 35412 bytes dashboard/test/widgets/task_grid_test.dart | 21 +- .../investigation_report.md | 45 + .../lib/src/fakes/fake_config.dart | 11 +- .../fakes/fake_dashboard_authentication.dart | 4 +- .../lib/src/fakes/fake_firestore_service.dart | 14 +- .../lib/src/fakes/fake_http.dart | 75 +- .../lib/src/integration_http_client.dart | 3 +- .../lib/src/server.dart | 11 +- 120 files changed, 1701 insertions(+), 1136 deletions(-) create mode 100644 app_dart/hook/build.dart create mode 100644 app_dart/lib/src/generated_config.dart create mode 100644 app_dart/lib/src/request_handling/http_io.dart create mode 100644 app_dart/lib/src/request_handling/http_utils.dart rename conductor/{tracks => archive}/cocoon_integration_test_20260206/plan.md (92%) rename conductor/{tracks => archive}/cocoon_integration_test_20260206/spec.md (100%) create mode 100644 dashboard/lib/service/data_seeder.dart delete mode 100644 dashboard/lib/service/dev_cocoon.dart create mode 100644 dashboard/lib/service/integration_server_adapter.dart create mode 100644 dashboard/lib/service/scenarios.dart create mode 100644 dashboard/test/service/data_seeder_test.dart delete mode 100644 dashboard/test/service/dev_cocoon_test.dart create mode 100644 dashboard/test/service/integration_server_adapter_test.dart create mode 100644 packages/cocoon_integration_test/investigation_report.md diff --git a/app_dart/analysis_options.yaml b/app_dart/analysis_options.yaml index f4cf71f90b..7a71105d3f 100644 --- a/app_dart/analysis_options.yaml +++ b/app_dart/analysis_options.yaml @@ -1,5 +1,10 @@ include: ../analysis_options.yaml +analyzer: + exclude: + # Optional: exclude the generated file if you don't want it analyzed + - hook/build.dart + linter: rules: # a few rules listed below are the ones we would like to exclude from flutter_lint package, for app_dart diff --git a/app_dart/bin/gae_server.dart b/app_dart/bin/gae_server.dart index ac93aac6de..a37142ef9b 100644 --- a/app_dart/bin/gae_server.dart +++ b/app_dart/bin/gae_server.dart @@ -11,6 +11,7 @@ import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/server.dart'; import 'package:cocoon_service/src/foundation/appengine_utils.dart'; import 'package:cocoon_service/src/foundation/providers.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/service/big_query.dart'; import 'package:cocoon_service/src/service/build_status_service.dart'; import 'package:cocoon_service/src/service/commit_service.dart'; @@ -143,7 +144,9 @@ Future main() async { ); return runAppEngine( - server, + (HttpRequest request) async { + await server(request.toRequest()); + }, onAcceptingConnections: (InternetAddress address, int port) { final host = address.isLoopback ? 'localhost' : address.host; print('Serving requests at http://$host:$port/'); diff --git a/app_dart/hook/build.dart b/app_dart/hook/build.dart new file mode 100644 index 0000000000..48d0281f37 --- /dev/null +++ b/app_dart/hook/build.dart @@ -0,0 +1,32 @@ +// Copyright 2025 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. + +import 'dart:io'; + +import 'package:native_assets_cli/native_assets_cli.dart'; + +void main(List args) async { + await build(args, (config, output) async { + // 1. Read the source file (e.g., your App Engine config) + final configFile = File('config.yaml'); + final content = await configFile.readAsString(); + + // 2. Define the path for the generated code + // It's best to put this in 'lib/src/generated_config.dart' + final outputFile = File('lib/src/generated_config.dart'); + + // 3. Write the file as a raw string constant + await outputFile.writeAsString(''' +// GENERATED CODE - DO NOT MODIFY BY HAND +// Generated by build.dart hook + +const String configFileContent = + r\'\'\'$content\'\'\'; +'''); + + // 4. (Optional) Tell Dart that this hook depends on the config file + // This ensures that if config.yaml changes, the hook runs again. + output.addDependency(configFile.uri); + }); +} diff --git a/app_dart/lib/cocoon_service.dart b/app_dart/lib/cocoon_service.dart index 27214df51c..434bd510ea 100644 --- a/app_dart/lib/cocoon_service.dart +++ b/app_dart/lib/cocoon_service.dart @@ -4,6 +4,13 @@ export 'src/foundation/context.dart'; export 'src/foundation/utils.dart'; +export 'src/model/firestore/base.dart' hide AppDocument; +export 'src/model/firestore/commit.dart'; +export 'src/model/firestore/presubmit_check.dart'; +export 'src/model/firestore/presubmit_guard.dart'; +export 'src/model/firestore/suppressed_test.dart'; +export 'src/model/firestore/task.dart'; +export 'src/model/firestore/tree_status_change.dart'; export 'src/request_handlers/check_flaky_builders.dart'; export 'src/request_handlers/create_branch.dart'; export 'src/request_handlers/dart_internal_subscription.dart'; @@ -35,6 +42,7 @@ export 'src/request_handling/authentication.dart'; export 'src/request_handling/cache_request_handler.dart'; export 'src/request_handling/checkrun_authentication.dart'; export 'src/request_handling/dashboard_authentication.dart'; +export 'src/request_handling/http_utils.dart'; export 'src/request_handling/pubsub.dart'; export 'src/request_handling/pubsub_authentication.dart'; export 'src/request_handling/request_handler.dart'; @@ -47,6 +55,7 @@ export 'src/service/build_bucket_client.dart'; export 'src/service/cache_service.dart'; export 'src/service/config.dart'; export 'src/service/firestore.dart'; +export 'src/service/flags/dynamic_config.dart'; export 'src/service/gerrit_service.dart'; export 'src/service/github_checks_service.dart'; export 'src/service/luci_build_service.dart'; diff --git a/app_dart/lib/server.dart b/app_dart/lib/server.dart index dac2ad5ba2..bd6c5ff5d6 100644 --- a/app_dart/lib/server.dart +++ b/app_dart/lib/server.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; import 'dart:math'; import 'cocoon_service.dart'; @@ -25,7 +24,7 @@ import 'src/service/content_aware_hash_service.dart'; import 'src/service/discord_service.dart'; import 'src/service/scheduler/ci_yaml_fetcher.dart'; -typedef Server = Future Function(HttpRequest); +typedef Server = Future Function(Request); /// Creates a service with the given dependencies. Server createServer({ @@ -404,7 +403,7 @@ Server createServer({ '/readiness_check': ReadinessCheck(config: config), }; - return (HttpRequest request) async { + return (Request request) async { if (handlers.containsKey(request.uri.path)) { final handler = handlers[request.uri.path]!; await handler.service(request); diff --git a/app_dart/lib/src/foundation/github_checks_util.dart b/app_dart/lib/src/foundation/github_checks_util.dart index 6a65f37df5..7a1728c81f 100644 --- a/app_dart/lib/src/foundation/github_checks_util.dart +++ b/app_dart/lib/src/foundation/github_checks_util.dart @@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:core'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:github/github.dart' as github; import 'package:github/hooks.dart'; import 'package:retry/retry.dart'; +import '../request_handling/http_utils.dart'; import '../service/config.dart'; /// Wrapper class for github checkrun service. This is used to simplify diff --git a/app_dart/lib/src/foundation/utils.dart b/app_dart/lib/src/foundation/utils.dart index 222d2ecae9..4ac88a966d 100644 --- a/app_dart/lib/src/foundation/utils.dart +++ b/app_dart/lib/src/foundation/utils.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:github/github.dart'; diff --git a/app_dart/lib/src/generated_config.dart b/app_dart/lib/src/generated_config.dart new file mode 100644 index 0000000000..e9ca5e239c --- /dev/null +++ b/app_dart/lib/src/generated_config.dart @@ -0,0 +1,35 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// Generated by build.dart hook + +const String configFileContent = + r'''# Defines the config options for Flutter CI (Cocoon) +# +# The schema for this file is defined in DynamicConfig of +# app_dart/lib/src/service/config.dart + +# TODO(matanlurey): Remove this flag, it is currently unused. +allowManualTreeClosures: true + +backfillerCommitLimit: 50 + +ciYaml: + +contentAwareHashing: + # This will cause PRs that enter the merge queue to wait on CAH hashing + # to happen before scheduling builds. + waitOnContentHash: true + +# Whether to close the MQ guard right after LUCI presubmit completed +# instead of doing that as part of the `check_run` GitHub event handling. +closeMqGuardAfterPresubmit: true + +# Whether to allow the tree status to be suppressed for specific failed tests. +dynamicTestSuppression: true + +# Whether to allow unified check run flow to specific users or to everyone. +unifiedCheckRunFlow: + useForAll: false + useForUsers: + - ievdokdm + - matanlurey +'''; diff --git a/app_dart/lib/src/model/firestore/account.dart b/app_dart/lib/src/model/firestore/account.dart index 50d82b6a3a..c9527e1474 100644 --- a/app_dart/lib/src/model/firestore/account.dart +++ b/app_dart/lib/src/model/firestore/account.dart @@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:googleapis/firestore/v1.dart' as g; import 'package:path/path.dart' as p; +import '../../request_handling/http_utils.dart'; import '../../service/firestore.dart'; import 'base.dart'; diff --git a/app_dart/lib/src/model/firestore/commit.dart b/app_dart/lib/src/model/firestore/commit.dart index ea2e048864..a9f105d315 100644 --- a/app_dart/lib/src/model/firestore/commit.dart +++ b/app_dart/lib/src/model/firestore/commit.dart @@ -5,15 +5,12 @@ /// @docImport 'task.dart'; library; -import 'dart:io'; - import 'package:github/github.dart'; import 'package:googleapis/firestore/v1.dart' hide Status; import 'package:path/path.dart' as p; import 'package:truncate/truncate.dart'; import '../../../cocoon_service.dart'; -import '../../service/firestore.dart'; import '../commit_ref.dart'; import 'base.dart'; diff --git a/app_dart/lib/src/model/firestore/content_aware_hash_builds.dart b/app_dart/lib/src/model/firestore/content_aware_hash_builds.dart index a7a8ce3c53..e63095ad22 100644 --- a/app_dart/lib/src/model/firestore/content_aware_hash_builds.dart +++ b/app_dart/lib/src/model/firestore/content_aware_hash_builds.dart @@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:googleapis/firestore/v1.dart' as g; import 'package:path/path.dart' as p; +import '../../request_handling/http_utils.dart'; import '../../service/firestore.dart'; import 'base.dart'; diff --git a/app_dart/lib/src/model/firestore/github_build_status.dart b/app_dart/lib/src/model/firestore/github_build_status.dart index 23a43c38cc..5d1cf68e7c 100644 --- a/app_dart/lib/src/model/firestore/github_build_status.dart +++ b/app_dart/lib/src/model/firestore/github_build_status.dart @@ -7,7 +7,6 @@ import 'package:googleapis/firestore/v1.dart' hide Status; import 'package:path/path.dart' as p; import '../../../cocoon_service.dart'; -import '../../service/firestore.dart'; import 'base.dart'; const String kGithubBuildStatusCollectionId = 'githubBuildStatuses'; diff --git a/app_dart/lib/src/model/firestore/github_gold_status.dart b/app_dart/lib/src/model/firestore/github_gold_status.dart index a6743869af..4aab4ea863 100644 --- a/app_dart/lib/src/model/firestore/github_gold_status.dart +++ b/app_dart/lib/src/model/firestore/github_gold_status.dart @@ -7,7 +7,6 @@ import 'package:googleapis/firestore/v1.dart' hide Status; import 'package:path/path.dart' as p; import '../../../cocoon_service.dart'; -import '../../service/firestore.dart'; import 'base.dart'; const String kGithubGoldStatusCollectionId = 'githubGoldStatuses'; diff --git a/app_dart/lib/src/model/firestore/presubmit_guard.dart b/app_dart/lib/src/model/firestore/presubmit_guard.dart index 8835261cb0..5b2e48214d 100644 --- a/app_dart/lib/src/model/firestore/presubmit_guard.dart +++ b/app_dart/lib/src/model/firestore/presubmit_guard.dart @@ -13,7 +13,6 @@ import 'package:googleapis/firestore/v1.dart' hide Status; import 'package:path/path.dart' as p; import '../../../cocoon_service.dart'; -import '../../service/firestore.dart'; import 'base.dart'; final class PresubmitGuardId extends AppDocumentId { diff --git a/app_dart/lib/src/model/firestore/task.dart b/app_dart/lib/src/model/firestore/task.dart index 312804ac0c..e049e8e700 100644 --- a/app_dart/lib/src/model/firestore/task.dart +++ b/app_dart/lib/src/model/firestore/task.dart @@ -12,7 +12,6 @@ import 'package:meta/meta.dart'; import 'package:path/path.dart' as p; import '../../../cocoon_service.dart'; -import '../../service/firestore.dart'; import '../bbv2_extension.dart'; import '../ci_yaml/target.dart'; import '../task_ref.dart'; diff --git a/app_dart/lib/src/request_handlers/get_build_status_badge.dart b/app_dart/lib/src/request_handlers/get_build_status_badge.dart index d0d043026a..fbf51dc652 100644 --- a/app_dart/lib/src/request_handlers/get_build_status_badge.dart +++ b/app_dart/lib/src/request_handlers/get_build_status_badge.dart @@ -3,11 +3,11 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:cocoon_common/rpc_model.dart' as rpc_model; import 'package:meta/meta.dart'; +import '../request_handling/http_utils.dart'; import '../request_handling/request_handler.dart'; import '../request_handling/response.dart'; import 'get_build_status.dart'; @@ -48,12 +48,10 @@ final class GetBuildStatusBadge extends GetBuildStatus { Future get(Request request) async { return Response.string( generateSVG(await super.createResponse(request)), - contentType: _imageSvgXml, + contentType: kImageSvgXml, ); } - static final _imageSvgXml = ContentType.parse('image/svg+xml'); - @visibleForTesting String generateSVG(rpc_model.BuildStatusResponse response) { final passing = response.failingTasks.isEmpty; diff --git a/app_dart/lib/src/request_handlers/get_engine_artifacts_ready.dart b/app_dart/lib/src/request_handlers/get_engine_artifacts_ready.dart index 66dadd9b82..5cdff1e09e 100644 --- a/app_dart/lib/src/request_handlers/get_engine_artifacts_ready.dart +++ b/app_dart/lib/src/request_handlers/get_engine_artifacts_ready.dart @@ -2,12 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:googleapis/firestore/v1.dart'; import '../../cocoon_service.dart'; -import '../model/firestore/base.dart'; import '../model/firestore/ci_staging.dart'; import '../request_handling/exceptions.dart'; import '../request_handling/public_api_request_handler.dart'; diff --git a/app_dart/lib/src/request_handlers/get_presubmit_checks.dart b/app_dart/lib/src/request_handlers/get_presubmit_checks.dart index 45ee4987ff..78a54ab8c3 100644 --- a/app_dart/lib/src/request_handlers/get_presubmit_checks.dart +++ b/app_dart/lib/src/request_handlers/get_presubmit_checks.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:cocoon_common/rpc_model.dart'; diff --git a/app_dart/lib/src/request_handlers/get_presubmit_guard.dart b/app_dart/lib/src/request_handlers/get_presubmit_guard.dart index ab2ca007cc..0fb259a187 100644 --- a/app_dart/lib/src/request_handlers/get_presubmit_guard.dart +++ b/app_dart/lib/src/request_handlers/get_presubmit_guard.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:cocoon_common/guard_status.dart'; import 'package:cocoon_common/rpc_model.dart' as rpc_model; diff --git a/app_dart/lib/src/request_handlers/get_presubmit_guard_summaries.dart b/app_dart/lib/src/request_handlers/get_presubmit_guard_summaries.dart index 238b1fe23e..ab846d573d 100644 --- a/app_dart/lib/src/request_handlers/get_presubmit_guard_summaries.dart +++ b/app_dart/lib/src/request_handlers/get_presubmit_guard_summaries.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'dart:math'; import 'package:cocoon_common/guard_status.dart'; @@ -12,7 +11,6 @@ import 'package:github/github.dart'; import 'package:meta/meta.dart'; import '../../cocoon_service.dart'; -import '../model/firestore/presubmit_guard.dart'; import '../request_handling/public_api_request_handler.dart'; import '../service/firestore/unified_check_run.dart'; diff --git a/app_dart/lib/src/request_handlers/get_status.dart b/app_dart/lib/src/request_handlers/get_status.dart index eefc7ee497..38d0be1cfb 100644 --- a/app_dart/lib/src/request_handlers/get_status.dart +++ b/app_dart/lib/src/request_handlers/get_status.dart @@ -10,7 +10,6 @@ import 'package:github/github.dart'; import 'package:meta/meta.dart'; import '../../cocoon_service.dart'; -import '../model/firestore/commit.dart'; import '../request_handling/public_api_request_handler.dart'; import '../service/build_status_service.dart'; diff --git a/app_dart/lib/src/request_handlers/get_suppressed_tests.dart b/app_dart/lib/src/request_handlers/get_suppressed_tests.dart index 8110d9d608..12ba8dc8ad 100644 --- a/app_dart/lib/src/request_handlers/get_suppressed_tests.dart +++ b/app_dart/lib/src/request_handlers/get_suppressed_tests.dart @@ -8,7 +8,6 @@ import 'package:github/github.dart'; import 'package:meta/meta.dart'; import '../../cocoon_service.dart'; -import '../model/firestore/suppressed_test.dart'; import '../request_handling/public_api_request_handler.dart'; /// Request handler to get a list of suppressed tests. diff --git a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart index 8d2982ec0e..0e1535fdbc 100644 --- a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart +++ b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_common/is_release_branch.dart'; import 'package:cocoon_server/logging.dart'; diff --git a/app_dart/lib/src/request_handlers/postsubmit_luci_subscription.dart b/app_dart/lib/src/request_handlers/postsubmit_luci_subscription.dart index d23ab7ccb9..1d305c0fff 100644 --- a/app_dart/lib/src/request_handlers/postsubmit_luci_subscription.dart +++ b/app_dart/lib/src/request_handlers/postsubmit_luci_subscription.dart @@ -3,8 +3,8 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; +import 'package:archive/archive.dart'; import 'package:buildbucket/buildbucket_pb.dart' as bbv2; import 'package:cocoon_common/is_release_branch.dart'; import 'package:cocoon_server/logging.dart'; @@ -77,7 +77,9 @@ final class PostsubmitLuciSubscription extends SubscriptionHandler { log.debug('Updating buildId=${build.id} for result=${build.status}'); // Add build fields that are stored in a separate compressed buffer. - build.mergeFromBuffer(ZLibCodec().decode(buildsPubSub.buildLargeFields)); + build.mergeFromBuffer( + const ZLibDecoder().decodeBytes(buildsPubSub.buildLargeFields), + ); log.info('build ${build.toProto3Json()}'); final fsTask = await fs.Task.fromFirestore(_firestore, userData.taskId); diff --git a/app_dart/lib/src/request_handlers/presubmit_luci_subscription.dart b/app_dart/lib/src/request_handlers/presubmit_luci_subscription.dart index 474da52cb6..a6dcebfdfd 100644 --- a/app_dart/lib/src/request_handlers/presubmit_luci_subscription.dart +++ b/app_dart/lib/src/request_handlers/presubmit_luci_subscription.dart @@ -3,8 +3,8 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; +import 'package:archive/archive.dart'; import 'package:buildbucket/buildbucket_pb.dart' as bbv2; import 'package:cocoon_server/logging.dart'; @@ -80,7 +80,9 @@ final class PresubmitLuciSubscription extends SubscriptionHandler { var build = buildsPubSub.build; // Add build fields that are stored in a separate compressed buffer. - build.mergeFromBuffer(ZLibCodec().decode(buildsPubSub.buildLargeFields)); + build.mergeFromBuffer( + const ZLibDecoder().decodeBytes(buildsPubSub.buildLargeFields), + ); final builderName = build.builder.builder; final tagSet = BuildTags.fromStringPairs(build.tags); diff --git a/app_dart/lib/src/request_handlers/push_gold_status_to_github.dart b/app_dart/lib/src/request_handlers/push_gold_status_to_github.dart index feabf62338..9a12349b5c 100644 --- a/app_dart/lib/src/request_handlers/push_gold_status_to_github.dart +++ b/app_dart/lib/src/request_handlers/push_gold_status_to_github.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:github/github.dart'; diff --git a/app_dart/lib/src/request_handling/api_request_handler.dart b/app_dart/lib/src/request_handling/api_request_handler.dart index 3ad67f2a2c..76ec79f303 100644 --- a/app_dart/lib/src/request_handling/api_request_handler.dart +++ b/app_dart/lib/src/request_handling/api_request_handler.dart @@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; -import 'dart:typed_data'; +import 'dart:convert'; import 'package:meta/meta.dart'; import 'authentication.dart'; import 'exceptions.dart'; +import 'http_utils.dart'; import 'public_api_request_handler.dart'; import 'request_handler.dart'; @@ -39,7 +39,7 @@ abstract base class ApiRequestHandler extends PublicApiRequestHandler { @override Future service( - HttpRequest request, { + Request request, { Future Function(HttpStatusException)? onError, }) async { AuthenticatedContext context; @@ -47,9 +47,8 @@ abstract base class ApiRequestHandler extends PublicApiRequestHandler { context = await authenticationProvider.authenticate(request); } on Unauthenticated catch (error) { final response = request.response; - response - ..statusCode = HttpStatus.unauthorized - ..write(error.message); + response.statusCode = HttpStatus.unauthorized; + await response.addStream(Stream.value(utf8.encode(error.message))); await response.flush(); await response.close(); return; @@ -64,9 +63,6 @@ abstract base class ApiRequestHandler extends PublicApiRequestHandler { class ApiKey extends RequestKey { const ApiKey._(super.name); - static const ApiKey requestBody = ApiKey._( - 'requestBody', - ); static const ApiKey authContext = ApiKey._('authenticatedContext'); static const ApiKey> requestData = diff --git a/app_dart/lib/src/request_handling/authentication.dart b/app_dart/lib/src/request_handling/authentication.dart index 218ec07a5d..56bc72041d 100644 --- a/app_dart/lib/src/request_handling/authentication.dart +++ b/app_dart/lib/src/request_handling/authentication.dart @@ -3,12 +3,12 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:meta/meta.dart'; import '../foundation/context.dart'; import 'exceptions.dart'; +import 'request_handler.dart'; @immutable abstract interface class AuthenticationProvider { @@ -20,7 +20,7 @@ abstract interface class AuthenticationProvider { /// /// This will throw an [Unauthenticated] exception if the request is /// unauthenticated. - Future authenticate(HttpRequest request); + Future authenticate(Request request); } /// Class that represents an authenticated request having been made, and any diff --git a/app_dart/lib/src/request_handling/cache_request_handler.dart b/app_dart/lib/src/request_handling/cache_request_handler.dart index b8e3c04f88..53664b9d2b 100644 --- a/app_dart/lib/src/request_handling/cache_request_handler.dart +++ b/app_dart/lib/src/request_handling/cache_request_handler.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'dart:typed_data'; import 'package:cocoon_common/core_extensions.dart'; @@ -12,6 +11,7 @@ import 'package:meta/meta.dart'; import '../request_handling/request_handler.dart'; import '../service/cache_service.dart'; +import 'http_utils.dart'; import 'response.dart'; /// A [RequestHandler] for serving cached responses. @@ -124,7 +124,7 @@ final class _CachedHttpResponse { return _CachedHttpResponse._( decoded['statusCode'] as int, base64.decode(decoded['body'] as String), - contentType != null ? ContentType.parse(contentType) : null, + contentType != null ? MediaType.parse(contentType) : null, ); } @@ -132,7 +132,7 @@ final class _CachedHttpResponse { final int statusCode; final Uint8List body; - final ContentType? contentType; + final MediaType? contentType; /// Returns a binary encoding of the HTTP response. Uint8List toBytes() { @@ -140,8 +140,7 @@ final class _CachedHttpResponse { json.encode({ 'statusCode': statusCode, 'body': base64.encode(body), - if (contentType case final contentType?) - 'contentType': contentType.value, + if (contentType case final contentType?) 'contentType': '$contentType', }), ); diff --git a/app_dart/lib/src/request_handling/checkrun_authentication.dart b/app_dart/lib/src/request_handling/checkrun_authentication.dart index 10350d1e17..a19fa10f6e 100644 --- a/app_dart/lib/src/request_handling/checkrun_authentication.dart +++ b/app_dart/lib/src/request_handling/checkrun_authentication.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:github/github.dart'; @@ -16,7 +15,7 @@ import '../model/google/token_info.dart'; import '../service/firebase_jwt_validator.dart'; import 'exceptions.dart'; -/// Class capable of authenticating [HttpRequest]s from the Checkrun page. +/// Class capable of authenticating [Request]s from the Checkrun page. /// /// There are two types of authentication this class supports: /// @@ -77,7 +76,7 @@ interface class CheckrunAuthentication implements AuthenticationProvider { /// This will throw an [Unauthenticated] exception if the request is /// unauthenticated. @override - Future authenticate(HttpRequest request) async { + Future authenticate(Request request) async { /// Walk through the providers for (final provider in _authenticationChain) { try { @@ -90,7 +89,7 @@ interface class CheckrunAuthentication implements AuthenticationProvider { } } -/// Class capable of authenticating [HttpRequest]s from the Checkrun page. +/// Class capable of authenticating [Request]s from the Checkrun page. class GithubAuthentication implements AuthenticationProvider { GithubAuthentication({ required CacheService cache, @@ -118,10 +117,9 @@ class GithubAuthentication implements AuthenticationProvider { /// Attempt to validate a JWT as a Firebase token. /// And then validate whether the token has flutter repo write permissions. @override - Future authenticate(HttpRequest request) async { + Future authenticate(Request request) async { try { - if (request.headers.value('X-Flutter-IdToken') - case final idTokenFromHeader?) { + if (request.header('X-Flutter-IdToken') case final idTokenFromHeader?) { final token = await _validator.decodeAndVerify(idTokenFromHeader); log.info('authing with github.com'); return authenticateGithub( diff --git a/app_dart/lib/src/request_handling/dashboard_authentication.dart b/app_dart/lib/src/request_handling/dashboard_authentication.dart index 62139ec424..b6f65cac2b 100644 --- a/app_dart/lib/src/request_handling/dashboard_authentication.dart +++ b/app_dart/lib/src/request_handling/dashboard_authentication.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:meta/meta.dart'; @@ -16,7 +15,7 @@ import '../model/google/token_info.dart'; import '../service/firebase_jwt_validator.dart'; import 'exceptions.dart'; -/// Class capable of authenticating [HttpRequest]s from the Dashboard +/// Class capable of authenticating [Request]s from the Dashboard /// /// There are two types of authentication this class supports: /// @@ -76,7 +75,7 @@ interface class DashboardAuthentication implements AuthenticationProvider { /// This will throw an [Unauthenticated] exception if the request is /// unauthenticated. @override - Future authenticate(HttpRequest request) async { + Future authenticate(Request request) async { /// Walk through the providers for (final provider in _authenticationChain) { try { @@ -116,10 +115,9 @@ class DashboardFirebaseAuthentication implements AuthenticationProvider { /// NOTE: Until we fully switch over to Firebase; we could have a mix of JWT /// coming into cocoon. This should not be fatal. @override - Future authenticate(HttpRequest request) async { + Future authenticate(Request request) async { try { - if (request.headers.value('X-Flutter-IdToken') - case final idTokenFromHeader?) { + if (request.header('X-Flutter-IdToken') case final idTokenFromHeader?) { final token = await _validator.decodeAndVerify(idTokenFromHeader); log.info('authed with firebase: ${token.email}'); return authenticateFirebase( @@ -182,8 +180,8 @@ class DashboardCronAuthentication implements AuthenticationProvider { final ClientContextProvider _clientContextProvider; @override - Future authenticate(HttpRequest request) async { - if (request.headers.value('X-Appengine-Cron') == 'true') { + Future authenticate(Request request) async { + if (request.header('X-Appengine-Cron') == 'true') { return AuthenticatedContext( clientContext: _clientContextProvider(), email: 'CRON_JOB', diff --git a/app_dart/lib/src/request_handling/exceptions.dart b/app_dart/lib/src/request_handling/exceptions.dart index 28d47720a4..a8683ca07d 100644 --- a/app_dart/lib/src/request_handling/exceptions.dart +++ b/app_dart/lib/src/request_handling/exceptions.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; +import 'http_utils.dart'; /// An exception that may be thrown by a [RequestHandler] to trigger an error /// HTTP response. diff --git a/app_dart/lib/src/request_handling/http_io.dart b/app_dart/lib/src/request_handling/http_io.dart new file mode 100644 index 0000000000..653e247bfa --- /dev/null +++ b/app_dart/lib/src/request_handling/http_io.dart @@ -0,0 +1,104 @@ +// Copyright 2019 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. + +import 'dart:convert'; +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:cocoon_common/core_extensions.dart'; + +import 'http_utils.dart'; +import 'request_handler.dart'; + +/// Creates a [Request] by wrapping an existing [HttpRequest]. +extension ToRequest on HttpRequest { + Request toRequest() => _HttpRequest(this); +} + +/// A request that is backed by an [HttpRequest]. +final class _HttpRequest implements Request { + _HttpRequest(this._request); + final HttpRequest _request; + + @override + Uri get uri => _request.uri; + + @override + String get method => _request.method; + + @override + late final RequestResponse response = _HttpResponse(_request.response); + + @override + String? header(String name) { + return _request.headers.value(name); + } + + @override + Future readBodyAsBytes() async { + if (_bodyAsBytes case final previousCall?) { + return previousCall; + } + final builder = await _request.fold(BytesBuilder(copy: false), ( + builder, + data, + ) { + builder.add(data); + return builder; + }); + return _bodyAsBytes = builder.takeBytes(); + } + + Uint8List? _bodyAsBytes; + + @override + Future readBodyAsString() async { + return utf8.decode(await readBodyAsBytes()); + } + + @override + Future> readBodyAsJson() async { + final bytes = await readBodyAsBytes(); + return bytes.isEmpty ? {} : bytes.parseAsJsonObject(); + } +} + +final class _HttpResponse implements RequestResponse { + _HttpResponse(this._response); + final HttpResponse _response; + + @override + int get statusCode => _response.statusCode; + @override + set statusCode(int value) => _response.statusCode = value; + + @override + set contentType(MediaType? value) { + if (value != null) { + _response.headers.contentType = ContentType( + value.type, + value.subtype, + charset: value.parameters['charset'], + ); + } else { + _response.headers.contentType = null; + } + } + + @override + Future addStream(Stream stream) => + _response.addStream(stream); + + @override + Future flush() => _response.flush(); + + @override + Future close() => _response.close(); + + @override + Future redirect( + Uri location, { + int status = HttpStatus.movedTemporarily, + }) => _response.redirect(location, status: status); +} diff --git a/app_dart/lib/src/request_handling/http_utils.dart b/app_dart/lib/src/request_handling/http_utils.dart new file mode 100644 index 0000000000..f9f72e70e1 --- /dev/null +++ b/app_dart/lib/src/request_handling/http_utils.dart @@ -0,0 +1,62 @@ +// Copyright 2019 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. + +import 'package:http_parser/http_parser.dart'; + +export 'package:http_parser/http_parser.dart' show MediaType; + +/// A collection of HTTP status codes. +/// +/// This is used instead of 'dart:io' to keep the library platform-neutral. +class HttpStatus { + static const int ok = 200; + static const int accepted = 202; + static const int permanentRedirect = 308; + static const int movedTemporarily = 302; + static const int badRequest = 400; + static const int unauthorized = 401; + static const int forbidden = 403; + static const int notFound = 404; + static const int methodNotAllowed = 405; + static const int conflict = 409; + static const int internalServerError = 500; + static const int serviceUnavailable = 503; +} + +/// A collection of HTTP header names. +/// +/// This is used instead of 'dart:io' to keep the library platform-neutral. +class HttpHeaders { + static const String contentTypeHeader = 'content-type'; + static const String acceptHeader = 'accept'; + static const String authorizationHeader = 'authorization'; +} + +final MediaType kContentTypeText = MediaType('text', 'plain', { + 'charset': 'utf-8', +}); +final MediaType kContentTypeHtml = MediaType('text', 'html', { + 'charset': 'utf-8', +}); +final MediaType kContentTypeJson = MediaType('application', 'json', { + 'charset': 'utf-8', +}); +final MediaType kContentTypeBinary = MediaType('application', 'octet-stream'); +final MediaType kImageSvgXml = MediaType('image', 'svg+xml'); + +/// Exception thrown when an HTTP request fails. +class HttpException implements Exception { + HttpException(this.message); + final String message; + @override + String toString() => 'HttpException: $message'; +} + +/// Exception thrown when a socket operation fails. +class SocketException implements Exception { + SocketException(this.message); + final String message; + @override + String toString() => 'SocketException: $message'; +} diff --git a/app_dart/lib/src/request_handling/pubsub_authentication.dart b/app_dart/lib/src/request_handling/pubsub_authentication.dart index eb6a290daa..460509e8b3 100644 --- a/app_dart/lib/src/request_handling/pubsub_authentication.dart +++ b/app_dart/lib/src/request_handling/pubsub_authentication.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:googleapis/oauth2/v2.dart'; @@ -14,7 +13,7 @@ import '../foundation/providers.dart'; import '../foundation/typedefs.dart'; import 'exceptions.dart'; -/// Class capable of authenticating [HttpRequest]s for PubSub messages. +/// Class capable of authenticating [Request]s for PubSub messages. /// /// This class implements an ACL on a [RequestHandler] to ensure only automated /// systems can access the endpoints. @@ -58,8 +57,8 @@ class PubsubAuthenticationProvider implements AuthenticationProvider { /// This will throw an [Unauthenticated] exception if the request is /// unauthenticated. @override - Future authenticate(HttpRequest request) async { - final idToken = request.headers.value(HttpHeaders.authorizationHeader); + Future authenticate(Request request) async { + final idToken = request.header(HttpHeaders.authorizationHeader); final clientContext = clientContextProvider(); diff --git a/app_dart/lib/src/request_handling/request_handler.dart b/app_dart/lib/src/request_handling/request_handler.dart index 693f6fa38e..228a071abb 100644 --- a/app_dart/lib/src/request_handling/request_handler.dart +++ b/app_dart/lib/src/request_handling/request_handler.dart @@ -3,11 +3,8 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; import 'dart:typed_data'; -import 'package:cocoon_common/core_extensions.dart'; import 'package:cocoon_server/logging.dart'; import 'package:meta/meta.dart'; @@ -30,7 +27,7 @@ abstract base class RequestHandler { /// should override one of [get] or [post], depending on which methods /// they support. Future service( - HttpRequest request, { + Request request, { Future Function(HttpStatusException)? onError, }) async { final response = request.response; @@ -39,10 +36,10 @@ abstract base class RequestHandler { Response body; switch (request.method) { case 'GET': - body = await get(Request.fromHttpRequest(request)); + body = await get(request); break; case 'POST': - body = await post(Request.fromHttpRequest(request)); + body = await post(request); break; default: throw MethodNotAllowed(request.method); @@ -69,8 +66,8 @@ abstract base class RequestHandler { /// Responds (using [response]). /// /// Returns a future that completes when [response] has been closed. - Future _respond(HttpResponse response, Response body) async { - response.headers.contentType = body.contentType; + Future _respond(RequestResponse response, Response body) async { + response.contentType = body.contentType; response.statusCode = body.statusCode; await response.addStream(body.body); await response.flush(); @@ -113,13 +110,16 @@ abstract base class RequestHandler { } /// A request received on a [RequestHandler]. -abstract mixin class Request { - /// Creates a [Request] by wrapping an existing [HttpRequest]. - factory Request.fromHttpRequest(HttpRequest request) = _HttpRequest; - +abstract class Request { /// URL the request was served to, including query parameters. Uri get uri; + /// The HTTP method of the request. + String get method; + + /// The response that will be sent to the client. + RequestResponse get response; + /// Returns the value for the header with the given [name]. /// /// The value must not have more than one value. @@ -133,46 +133,25 @@ abstract mixin class Request { Future readBodyAsBytes(); /// Reads the body as a UTF-8 string. - Future readBodyAsString() async { - return utf8.decode(await readBodyAsBytes()); - } + Future readBodyAsString(); /// Reads the body as a JSON object. - Future> readBodyAsJson() async { - final bytes = await readBodyAsBytes(); - return bytes.isEmpty ? {} : bytes.parseAsJsonObject(); - } + Future> readBodyAsJson(); } -/// A request that is backed by an [HttpRequest]. -final class _HttpRequest with Request { - _HttpRequest(this._request); - final HttpRequest _request; - - @override - Uri get uri => _request.uri; - - @override - String? header(String name) { - return _request.headers.value(name); - } +abstract interface class RequestResponse { + int get statusCode; + set statusCode(int value); - @override - Future readBodyAsBytes() async { - if (_bodyAsBytes case final previousCall?) { - return previousCall; - } - final builder = await _request.fold(BytesBuilder(copy: false), ( - builder, - data, - ) { - builder.add(data); - return builder; - }); - return _bodyAsBytes = builder.takeBytes(); - } + set contentType(MediaType? value); - Uint8List? _bodyAsBytes; + Future addStream(Stream stream); + Future flush(); + Future close(); + Future redirect( + Uri location, { + int status = HttpStatus.movedTemporarily, + }); } /// A key that can be used to index a value within the request context. @@ -185,13 +164,6 @@ class RequestKey { final String name; - static const RequestKey request = RequestKey( - 'request', - ); - static const RequestKey response = RequestKey( - 'response', - ); - @override String toString() => '$runtimeType($name)'; } diff --git a/app_dart/lib/src/request_handling/response.dart b/app_dart/lib/src/request_handling/response.dart index d39134a2e6..cb2d7a1dd4 100644 --- a/app_dart/lib/src/request_handling/response.dart +++ b/app_dart/lib/src/request_handling/response.dart @@ -3,11 +3,12 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'dart:typed_data'; import 'package:meta/meta.dart'; +import 'http_utils.dart'; + /// An HTTP response returned by a request handler. /// /// A response encapsulates: @@ -26,19 +27,19 @@ abstract final class Response { /// Creates an UTF-8 string response of [content]. /// - /// By default, uses [ContentType.text] and [HttpStatus.ok]. + /// By default, uses [kContentTypeText] and [HttpStatus.ok]. factory Response.string( String content, { // - ContentType? contentType, + MediaType? contentType, int statusCode, }) = _StringBody; /// Creates a byte-encoded stream of [content]. /// - /// By default, uses [ContentType.binary] and [HttpStatus.ok]. + /// By default, uses [kContentTypeBinary] and [HttpStatus.ok]. factory Response.stream( Stream content, { // - ContentType? contentType, + MediaType? contentType, int statusCode, }) = _StreamBody; @@ -48,14 +49,14 @@ abstract final class Response { /// that defines a `toJson()` method that returns a JSON type, or a [List] or /// [Map] of other JSON types). /// - /// By default, uses [ContentType.json] and [HttpStatus.ok]. + /// By default, uses [kContentTypeJson] and [HttpStatus.ok]. factory Response.json(Object? value, {int statusCode}) = _JsonBody; /// A [Response] with an _empty_ [body] and [HttpStatus.ok]. static const Response emptyOk = _EmptyBody(); /// Format of the body. - ContentType? get contentType; + MediaType? get contentType; /// Status code of the response. final int statusCode; @@ -71,7 +72,7 @@ final class _EmptyBody extends Response { const _EmptyBody(); @override - ContentType? get contentType => null; + MediaType? get contentType => null; @override Stream get body => const Stream.empty(); @@ -81,14 +82,14 @@ final class _StringBody extends Response { const _StringBody( this._content, { // super.statusCode, - ContentType? contentType, + MediaType? contentType, }) : _contentType = contentType; final String _content; @override - ContentType get contentType => _contentType ?? ContentType.text; - final ContentType? _contentType; + MediaType get contentType => _contentType ?? kContentTypeText; + final MediaType? _contentType; @override Stream get body { @@ -106,7 +107,7 @@ final class _JsonBody extends Response { final Object? _content; @override - ContentType get contentType => ContentType.json; + MediaType get contentType => kContentTypeJson; static final _utf8JsonEncoder = JsonUtf8Encoder(); @override @@ -126,12 +127,12 @@ final class _StreamBody extends Response { const _StreamBody( this._stream, { // super.statusCode, - ContentType? contentType, + MediaType? contentType, }) : _contentType = contentType; @override - ContentType get contentType => _contentType ?? ContentType.binary; - final ContentType? _contentType; + MediaType get contentType => _contentType ?? kContentTypeBinary; + final MediaType? _contentType; final Stream _stream; diff --git a/app_dart/lib/src/request_handling/static_file_handler.dart b/app_dart/lib/src/request_handling/static_file_handler.dart index 8a612c862d..5005a76a15 100644 --- a/app_dart/lib/src/request_handling/static_file_handler.dart +++ b/app_dart/lib/src/request_handling/static_file_handler.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show ContentType; import 'dart:typed_data'; import 'package:file/file.dart'; @@ -54,7 +53,7 @@ final class StaticFileHandler extends RequestHandler { 'application/octet-stream'; return Response.stream( file.openRead().cast(), - contentType: ContentType.parse(mimeType), + contentType: MediaType.parse(mimeType), ); } else { throw NotFoundException(resultPath); diff --git a/app_dart/lib/src/request_handling/subscription_handler.dart b/app_dart/lib/src/request_handling/subscription_handler.dart index 77234d49fe..a9ae692101 100644 --- a/app_dart/lib/src/request_handling/subscription_handler.dart +++ b/app_dart/lib/src/request_handling/subscription_handler.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'dart:typed_data'; import 'package:cocoon_server/logging.dart'; @@ -15,6 +14,7 @@ import '../service/cache_service.dart'; import 'api_request_handler.dart'; import 'authentication.dart'; import 'exceptions.dart'; +import 'http_utils.dart'; import 'pubsub_authentication.dart'; import 'request_handler.dart'; @@ -56,7 +56,7 @@ abstract base class SubscriptionHandler extends RequestHandler { @override Future service( - HttpRequest request, { + Request request, { Future Function(HttpStatusException)? onError, }) async { AuthenticatedContext authContext; @@ -65,22 +65,20 @@ abstract base class SubscriptionHandler extends RequestHandler { authContext = await auth.authenticate(request); } on Unauthenticated catch (error) { final response = request.response; - response - ..statusCode = HttpStatus.unauthorized - ..write(error.message); + response.statusCode = HttpStatus.unauthorized; + await response.addStream(Stream.value(utf8.encode(error.message))); await response.flush(); await response.close(); return; } - List body; + Uint8List body; try { - body = await request.expand((List chunk) => chunk).toList(); + body = await request.readBodyAsBytes(); } catch (error) { final response = request.response; - response - ..statusCode = HttpStatus.internalServerError - ..write('$error'); + response.statusCode = HttpStatus.internalServerError; + await response.addStream(Stream.value(utf8.encode('$error'))); await response.flush(); await response.close(); return; @@ -94,9 +92,8 @@ abstract base class SubscriptionHandler extends RequestHandler { pubSubPushMessage = PubSubPushMessage.fromJson(json); } catch (error) { final response = request.response; - response - ..statusCode = HttpStatus.internalServerError - ..write('$error'); + response.statusCode = HttpStatus.internalServerError; + await response.addStream(Stream.value(utf8.encode('$error'))); await response.flush(); await response.close(); return; @@ -119,9 +116,11 @@ abstract base class SubscriptionHandler extends RequestHandler { if (messageLock != null) { // No-op - There's already a write lock for this message log.info('Ignoring $messageId, we already are/were writing a message'); - final response = request.response - ..statusCode = HttpStatus.ok - ..write('$messageId was already processed'); + final response = request.response; + response.statusCode = HttpStatus.ok; + await response.addStream( + Stream.value(utf8.encode('$messageId was already processed')), + ); await response.flush(); await response.close(); return; diff --git a/app_dart/lib/src/request_handling/swarming_authentication.dart b/app_dart/lib/src/request_handling/swarming_authentication.dart index f2a1b02284..ae0a412de0 100644 --- a/app_dart/lib/src/request_handling/swarming_authentication.dart +++ b/app_dart/lib/src/request_handling/swarming_authentication.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:meta/meta.dart'; @@ -15,7 +14,7 @@ import '../foundation/typedefs.dart'; import '../model/google/token_info.dart'; import 'exceptions.dart'; -/// Class capable of authenticating [HttpRequest]s for infra endpoints. +/// Class capable of authenticating [Request]s for infra endpoints. /// /// This class implements an ACL on a [RequestHandler] to ensure only automated /// systems can access the endpoints. @@ -62,8 +61,8 @@ class SwarmingAuthenticationProvider implements AuthenticationProvider { /// This will throw an [Unauthenticated] exception if the request is /// unauthenticated. @override - Future authenticate(HttpRequest request) async { - final swarmingToken = request.headers.value(kSwarmingTokenHeader); + Future authenticate(Request request) async { + final swarmingToken = request.header(kSwarmingTokenHeader); final clientContext = clientContextProvider(); diff --git a/app_dart/lib/src/service/build_bucket_client.dart b/app_dart/lib/src/service/build_bucket_client.dart index 89df404e04..282fd47976 100644 --- a/app_dart/lib/src/service/build_bucket_client.dart +++ b/app_dart/lib/src/service/build_bucket_client.dart @@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:buildbucket/buildbucket_pb.dart' as bbv2; import 'package:cocoon_server/logging.dart'; import 'package:http/http.dart' as http; import 'package:meta/meta.dart'; +import '../request_handling/http_utils.dart'; import 'access_token_provider.dart'; // TODO generalize the two clients to remove this. diff --git a/app_dart/lib/src/service/build_status_service.dart b/app_dart/lib/src/service/build_status_service.dart index aebde89271..810a98a9a3 100644 --- a/app_dart/lib/src/service/build_status_service.dart +++ b/app_dart/lib/src/service/build_status_service.dart @@ -12,8 +12,6 @@ import 'package:meta/meta.dart'; import '../../cocoon_service.dart'; import '../model/firestore/github_build_status.dart'; -import '../model/firestore/suppressed_test.dart'; -import '../model/firestore/tree_status_change.dart'; import 'build_status_provider/commit_tasks_status.dart'; /// Class that calculates the current build status. diff --git a/app_dart/lib/src/service/firestore.dart b/app_dart/lib/src/service/firestore.dart index b8ca805263..a9fa9cf7c4 100644 --- a/app_dart/lib/src/service/firestore.dart +++ b/app_dart/lib/src/service/firestore.dart @@ -13,11 +13,9 @@ import 'package:googleapis/firestore/v1.dart'; import 'package:meta/meta.dart'; import '../../cocoon_service.dart'; -import '../model/firestore/commit.dart'; import '../model/firestore/github_build_status.dart'; import '../model/firestore/github_gold_status.dart'; -import '../model/firestore/task.dart'; import 'firestore/commit_and_tasks.dart'; export '../model/common/firestore_extensions.dart'; diff --git a/app_dart/lib/src/service/flags/dynamic_config.dart b/app_dart/lib/src/service/flags/dynamic_config.dart index 8c246ceb4d..ec2789c8e0 100644 --- a/app_dart/lib/src/service/flags/dynamic_config.dart +++ b/app_dart/lib/src/service/flags/dynamic_config.dart @@ -6,13 +6,11 @@ /// @docImport 'dynamic_config_updater.dart'; library; -import 'dart:io' as io; - import 'package:json_annotation/json_annotation.dart'; import 'package:meta/meta.dart'; -import 'package:path/path.dart' as p; import 'package:yaml/yaml.dart'; +import '../../generated_config.dart'; import 'ci_yaml_flags.dart'; import 'content_aware_hashing_flags.dart'; import 'dynamic_config_updater.dart'; @@ -126,26 +124,9 @@ final class DynamicConfig { return DynamicConfigUpdater().fetchDynamicConfig(); } - /// Returns the latest copy of [DynamicConfig] fetched from the repository. - static Future fromLocalFileSystem() async { - final execPath = io.Platform.resolvedExecutable; - - // Walk backwards until the root of the Cocoon repository is found. - var dir = io.File(execPath).parent; - while (dir.path != dir.parent.path) { - final gitDir = io.Directory(p.join(dir.path, '.git')); - if (await gitDir.exists()) { - break; - } - dir = dir.parent; - } - - final configPath = io.File(p.join(dir.path, 'app_dart', 'config.yaml')); - if (!await configPath.exists()) { - throw StateError('Could not find config.yaml at ${configPath.path}'); - } - - final yaml = loadYaml(await configPath.readAsString()) as YamlMap; + /// Returns the copy of [DynamicConfig] that was created at build time. + static DynamicConfig fromLocalFileSystem() { + final yaml = loadYaml(configFileContent) as YamlMap; return DynamicConfig.fromYaml(yaml); } diff --git a/app_dart/lib/src/service/flags/dynamic_config_updater.dart b/app_dart/lib/src/service/flags/dynamic_config_updater.dart index cf2e967f59..49519f174e 100644 --- a/app_dart/lib/src/service/flags/dynamic_config_updater.dart +++ b/app_dart/lib/src/service/flags/dynamic_config_updater.dart @@ -11,7 +11,6 @@ import 'package:yaml/yaml.dart' show YamlMap, loadYaml; import '../../../cocoon_service.dart'; import '../../foundation/providers.dart' show Providers; import '../../foundation/typedefs.dart' show HttpClientProvider; -import 'dynamic_config.dart'; /// Responsibly polls for configuration changes to our service config. /// diff --git a/app_dart/lib/src/service/gerrit_service.dart b/app_dart/lib/src/service/gerrit_service.dart index aac4693939..0bb7d2ee8e 100644 --- a/app_dart/lib/src/service/gerrit_service.dart +++ b/app_dart/lib/src/service/gerrit_service.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_server/logging.dart'; import 'package:github/github.dart'; @@ -14,6 +13,7 @@ import 'package:meta/meta.dart'; import '../model/gerrit/commit.dart'; import '../request_handling/exceptions.dart'; +import '../request_handling/http_utils.dart'; import 'config.dart'; /// Communicates with gerrit APIs https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html diff --git a/app_dart/lib/src/service/luci_build_service.dart b/app_dart/lib/src/service/luci_build_service.dart index 4db9d07980..50c66a8b54 100644 --- a/app_dart/lib/src/service/luci_build_service.dart +++ b/app_dart/lib/src/service/luci_build_service.dart @@ -19,7 +19,6 @@ import '../../cocoon_service.dart'; import '../foundation/github_checks_util.dart'; import '../model/ci_yaml/target.dart'; import '../model/commit_ref.dart'; -import '../model/firestore/base.dart'; import '../model/firestore/pr_check_runs.dart' as fs; import '../model/firestore/task.dart' as fs; import '../model/github/checks.dart' as cocoon_checks; diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart index f4a034a386..904acc9ecf 100644 --- a/app_dart/lib/src/service/scheduler.dart +++ b/app_dart/lib/src/service/scheduler.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'dart:math'; import 'package:cocoon_common/task_status.dart'; @@ -34,6 +33,7 @@ import '../model/github/checks.dart' as cocoon_checks; import '../model/github/checks.dart' show MergeGroup; import '../model/github/workflow_job.dart'; import '../model/proto/internal/scheduler.pb.dart' as pb; +import '../request_handling/http_utils.dart'; import 'big_query.dart'; import 'cache_service.dart'; import 'config.dart'; diff --git a/app_dart/lib/src/service/scheduler/process_check_run_result.dart b/app_dart/lib/src/service/scheduler/process_check_run_result.dart index f948409cce..4db96218a2 100644 --- a/app_dart/lib/src/service/scheduler/process_check_run_result.dart +++ b/app_dart/lib/src/service/scheduler/process_check_run_result.dart @@ -5,11 +5,10 @@ /// @docImport 'package:cocoon_service/src/service/scheduler.dart'; library; -import 'dart:io'; - import 'package:cocoon_server/logging.dart'; import 'package:meta/meta.dart'; +import '../../request_handling/http_utils.dart'; import '../../request_handling/response.dart'; /// Possible results for [Scheduler.processCheckRun]. diff --git a/app_dart/pubspec.yaml b/app_dart/pubspec.yaml index 9acaaa86df..a75a914940 100644 --- a/app_dart/pubspec.yaml +++ b/app_dart/pubspec.yaml @@ -14,6 +14,7 @@ environment: dependencies: appengine: 0.13.11 + archive: ^4.0.7 args: ^2.6.0 buildbucket: path: ../packages/buildbucket-dart @@ -35,6 +36,7 @@ dependencies: graphql: ^5.2.3 grpc: ^4.0.1 http: ^1.2.1 + http_parser: ^4.1.2 jose_plus: ^0.4.6 json_annotation: ^4.9.0 logging: ^1.3.0 @@ -65,6 +67,7 @@ dev_dependencies: fake_async: ^1.3.3 json_serializable: ^6.9.4 mockito: ^5.4.6 + native_assets_cli: ^0.18.0 platform: ^3.1.6 test: ^1.25.15 diff --git a/app_dart/test/foundation/utils_test.dart b/app_dart/test/foundation/utils_test.dart index 49a69b2b6a..61d80e49f7 100644 --- a/app_dart/test/foundation/utils_test.dart +++ b/app_dart/test/foundation/utils_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_common/cocoon_common.dart'; import 'package:cocoon_common_test/cocoon_common_test.dart'; @@ -12,6 +11,7 @@ import 'package:cocoon_server/logging.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/src/foundation/utils.dart'; import 'package:cocoon_service/src/model/ci_yaml/target.dart'; +import 'package:cocoon_service/src/request_handling/http_utils.dart'; import 'package:cocoon_service/src/service/get_files_changed.dart'; import 'package:github/github.dart'; import 'package:http/http.dart' as http; diff --git a/app_dart/test/model/firestore/suppressed_test_test.dart b/app_dart/test/model/firestore/suppressed_test_test.dart index e64498c6e8..79f9ee786e 100644 --- a/app_dart/test/model/firestore/suppressed_test_test.dart +++ b/app_dart/test/model/firestore/suppressed_test_test.dart @@ -4,7 +4,6 @@ import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/cocoon_service.dart'; -import 'package:cocoon_service/src/model/firestore/suppressed_test.dart'; import 'package:googleapis/firestore/v1.dart'; import 'package:test/test.dart'; diff --git a/app_dart/test/request_handlers/get_presubmit_checks_test.dart b/app_dart/test/request_handlers/get_presubmit_checks_test.dart index b9f6e69708..c146ee46f8 100644 --- a/app_dart/test/request_handlers/get_presubmit_checks_test.dart +++ b/app_dart/test/request_handlers/get_presubmit_checks_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_common/rpc_model.dart'; import 'package:cocoon_common/task_status.dart'; diff --git a/app_dart/test/request_handlers/get_suppressed_tests_test.dart b/app_dart/test/request_handlers/get_suppressed_tests_test.dart index d10cc6a2aa..35d1cc1e77 100644 --- a/app_dart/test/request_handlers/get_suppressed_tests_test.dart +++ b/app_dart/test/request_handlers/get_suppressed_tests_test.dart @@ -7,8 +7,6 @@ import 'dart:convert'; import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/cocoon_service.dart'; -import 'package:cocoon_service/src/model/firestore/suppressed_test.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:test/test.dart'; import '../src/request_handling/api_request_handler_tester.dart'; diff --git a/app_dart/test/request_handlers/presubmit_luci_subscription_test.dart b/app_dart/test/request_handlers/presubmit_luci_subscription_test.dart index 3432b2de45..4a71a6a972 100644 --- a/app_dart/test/request_handlers/presubmit_luci_subscription_test.dart +++ b/app_dart/test/request_handlers/presubmit_luci_subscription_test.dart @@ -11,7 +11,6 @@ import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/model/commit_ref.dart'; import 'package:cocoon_service/src/model/common/presubmit_completed_check.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:cocoon_service/src/service/luci_build_service/build_tags.dart'; import 'package:cocoon_service/src/service/luci_build_service/user_data.dart'; import 'package:fixnum/fixnum.dart'; diff --git a/app_dart/test/request_handlers/rerun_prod_task_test.dart b/app_dart/test/request_handlers/rerun_prod_task_test.dart index fc518d34ec..74e2604df1 100644 --- a/app_dart/test/request_handlers/rerun_prod_task_test.dart +++ b/app_dart/test/request_handlers/rerun_prod_task_test.dart @@ -9,7 +9,6 @@ import 'package:cocoon_server/logging.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/model/firestore/task.dart' as fs; -import 'package:cocoon_service/src/model/firestore/task.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; diff --git a/app_dart/test/request_handling/api_request_handler_test.dart b/app_dart/test/request_handling/api_request_handler_test.dart index da367846b2..b8fb396c01 100644 --- a/app_dart/test/request_handling/api_request_handler_test.dart +++ b/app_dart/test/request_handling/api_request_handler_test.dart @@ -12,6 +12,7 @@ import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server/logging.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/src/request_handling/api_request_handler.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/request_handling/request_handler.dart'; import 'package:cocoon_service/src/request_handling/response.dart'; import 'package:gcloud/service_scope.dart' as ss; @@ -30,7 +31,7 @@ void main() { runZoned(() { return ss.fork(() { ss.register(#appengine.logging, log); - return handler.service(request); + return handler.service(request.toRequest()); }); }); }); diff --git a/app_dart/test/request_handling/cache_request_handler_test.dart b/app_dart/test/request_handling/cache_request_handler_test.dart index 146bb5a4b0..3f0ebfffb7 100644 --- a/app_dart/test/request_handling/cache_request_handler_test.dart +++ b/app_dart/test/request_handling/cache_request_handler_test.dart @@ -3,11 +3,11 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/src/request_handling/cache_request_handler.dart'; +import 'package:cocoon_service/src/request_handling/http_utils.dart'; import 'package:cocoon_service/src/request_handling/response.dart'; import 'package:cocoon_service/src/service/cache_service.dart'; import 'package:test/test.dart'; @@ -61,7 +61,7 @@ void main() { body: Response.string( 'hello!', statusCode: 400, - contentType: ContentType.json, + contentType: kContentTypeJson, ), config: FakeConfig(), ); @@ -76,11 +76,7 @@ void main() { expect(response.statusCode, 400); expect( response.contentType, - isA().having( - (c) => c.value, - 'value', - ContentType.json.value, - ), + isA().having((c) => '$c', 'type', kContentTypeJson.toString()), ); }); diff --git a/app_dart/test/request_handling/checkrun_authentication_test.dart b/app_dart/test/request_handling/checkrun_authentication_test.dart index 7ba78a78aa..a484c6e9ae 100644 --- a/app_dart/test/request_handling/checkrun_authentication_test.dart +++ b/app_dart/test/request_handling/checkrun_authentication_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/mocks.mocks.dart'; @@ -12,6 +11,7 @@ import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/model/google/firebase_jwt_claim.dart'; import 'package:cocoon_service/src/model/google/token_info.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/service/github_service.dart'; import 'package:github/github.dart'; import 'package:http/http.dart' as http; @@ -82,7 +82,7 @@ void main() { config.githubService = githubService; request.headers.set('X-Flutter-IdToken', 'trustmebro'); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.email, email); }, ); @@ -128,7 +128,10 @@ void main() { config.githubService = githubService; request.headers.set('X-Flutter-IdToken', 'trustmebro'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }, ); }); diff --git a/app_dart/test/request_handling/dashboard_authentication_test.dart b/app_dart/test/request_handling/dashboard_authentication_test.dart index 83fae7fb50..66a0167d3a 100644 --- a/app_dart/test/request_handling/dashboard_authentication_test.dart +++ b/app_dart/test/request_handling/dashboard_authentication_test.dart @@ -8,6 +8,7 @@ import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/model/firestore/account.dart'; import 'package:cocoon_service/src/model/google/token_info.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:test/test.dart'; void main() { @@ -28,12 +29,15 @@ void main() { test('succeeds for App Engine cronjobs', () async { request.headers.set('X-Appengine-Cron', 'true'); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.clientContext, same(clientContext)); }); test('throws for non App Engine cronjobs', () async { - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); }); @@ -62,7 +66,7 @@ void main() { TokenInfo(email: 'abc123@google.com', issued: DateTime.now()), ); request.headers.set('X-Flutter-IdToken', 'trustmebro'); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.email, 'abc123@google.com'); }); @@ -72,7 +76,7 @@ void main() { TokenInfo(email: 'abc123@gmail.com', issued: DateTime.now()), ); request.headers.set('X-Flutter-IdToken', 'trustmebro'); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.email, 'abc123@gmail.com'); }); @@ -81,12 +85,18 @@ void main() { TokenInfo(email: 'abc123@gmail.com', issued: DateTime.now()), ); request.headers.set('X-Flutter-IdToken', 'trustmebro'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); test('fails for non-firebase jwt', () { request.headers.set('X-Flutter-IdToken', 'trustmebro'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); }); } diff --git a/app_dart/test/request_handling/pubsub_authentication_test.dart b/app_dart/test/request_handling/pubsub_authentication_test.dart index 0d8a6da2a1..7bc3032a48 100644 --- a/app_dart/test/request_handling/pubsub_authentication_test.dart +++ b/app_dart/test/request_handling/pubsub_authentication_test.dart @@ -2,13 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/test_logging.dart'; +import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; -import 'package:cocoon_service/src/request_handling/pubsub_authentication.dart'; -import 'package:cocoon_service/src/service/config.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; import 'package:test/test.dart'; @@ -53,7 +51,7 @@ void main() { request.headers.add(HttpHeaders.authorizationHeader, 'Bearer token'); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.clientContext, same(clientContext)); }); } @@ -76,7 +74,10 @@ void main() { request.headers.add(HttpHeaders.authorizationHeader, 'Bearer token'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); test('auth fails with invalid token', () async { @@ -97,7 +98,10 @@ void main() { request.headers.add(HttpHeaders.authorizationHeader, 'Bearer token'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); test('auth fails with expired token', () async { @@ -121,7 +125,10 @@ void main() { request.headers.add(HttpHeaders.authorizationHeader, 'Bearer token'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); }); } diff --git a/app_dart/test/request_handling/request_handler_test.dart b/app_dart/test/request_handling/request_handler_test.dart index 711b7515db..1a6ed10e44 100644 --- a/app_dart/test/request_handling/request_handler_test.dart +++ b/app_dart/test/request_handling/request_handler_test.dart @@ -12,6 +12,7 @@ import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server/logging.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/request_handling/request_handler.dart'; import 'package:cocoon_service/src/request_handling/response.dart'; import 'package:gcloud/service_scope.dart' as ss; @@ -29,7 +30,7 @@ void main() { server.listen((HttpRequest request) { runZoned(() { return ss.fork(() { - return handler.service(request); + return handler.service(request.toRequest()); }); }); }); diff --git a/app_dart/test/request_handling/subscription_handler_test.dart b/app_dart/test/request_handling/subscription_handler_test.dart index e0f47a2585..7021a7e018 100644 --- a/app_dart/test/request_handling/subscription_handler_test.dart +++ b/app_dart/test/request_handling/subscription_handler_test.dart @@ -10,6 +10,7 @@ import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/src/model/luci/pubsub_message.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/request_handling/response.dart'; import 'package:cocoon_service/src/request_handling/subscription_handler.dart'; import 'package:cocoon_service/src/service/cache_service.dart'; @@ -34,7 +35,7 @@ void main() { server.listen((HttpRequest request) { runZoned(() { return ss.fork(() { - return subscription.service(request); + return subscription.service(request.toRequest()); }); }); }); diff --git a/app_dart/test/request_handling/swarming_authentication_test.dart b/app_dart/test/request_handling/swarming_authentication_test.dart index 8556725acf..9d167f2ac0 100644 --- a/app_dart/test/request_handling/swarming_authentication_test.dart +++ b/app_dart/test/request_handling/swarming_authentication_test.dart @@ -2,13 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/test_logging.dart'; +import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; -import 'package:cocoon_service/src/request_handling/swarming_authentication.dart'; -import 'package:cocoon_service/src/service/config.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; import 'package:test/test.dart'; @@ -34,7 +32,10 @@ void main() { test('fails for App Engine cronjobs', () async { request.headers.set('X-Appengine-Cron', 'true'); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); group('when access token is given', () { @@ -66,7 +67,7 @@ void main() { 'token', ); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.clientContext, same(clientContext)); }); @@ -87,7 +88,7 @@ void main() { 'token', ); - final result = await auth.authenticate(request); + final result = await auth.authenticate(request.toRequest()); expect(result.clientContext, same(clientContext)); }); @@ -107,7 +108,10 @@ void main() { 'unauthenticated token', ); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); test('auth fails with unauthenticated service account token', () async { @@ -125,7 +129,10 @@ void main() { 'unauthenticated token', ); - expect(auth.authenticate(request), throwsA(isA())); + expect( + auth.authenticate(request.toRequest()), + throwsA(isA()), + ); }); }); }); diff --git a/app_dart/test/service/config_test.dart b/app_dart/test/service/config_test.dart index c0e581c4cf..8fe7f3f0d0 100644 --- a/app_dart/test/service/config_test.dart +++ b/app_dart/test/service/config_test.dart @@ -8,7 +8,6 @@ import 'dart:typed_data'; import 'package:cocoon_server_test/fake_secret_manager.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/cocoon_service.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:github/github.dart'; import 'package:test/test.dart'; import 'package:yaml/yaml.dart'; diff --git a/app_dart/test/service/dynamic_config_updater_test.dart b/app_dart/test/service/dynamic_config_updater_test.dart index de3976e093..40eeacf4b9 100644 --- a/app_dart/test/service/dynamic_config_updater_test.dart +++ b/app_dart/test/service/dynamic_config_updater_test.dart @@ -9,7 +9,6 @@ import 'package:cocoon_server/logging.dart' show log; import 'package:cocoon_server_test/fake_secret_manager.dart'; import 'package:cocoon_server_test/test_logging.dart'; import 'package:cocoon_service/cocoon_service.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:cocoon_service/src/service/flags/dynamic_config_updater.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart' show MockClient; diff --git a/app_dart/test/service/scheduler/ci_yaml_fetcher_test.dart b/app_dart/test/service/scheduler/ci_yaml_fetcher_test.dart index 6ec741067d..7152c8fc78 100644 --- a/app_dart/test/service/scheduler/ci_yaml_fetcher_test.dart +++ b/app_dart/test/service/scheduler/ci_yaml_fetcher_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; import 'package:cocoon_integration_test/testing.dart'; import 'package:cocoon_server_test/test_logging.dart'; diff --git a/app_dart/test/service/scheduler/hash_workflow_test.dart b/app_dart/test/service/scheduler/hash_workflow_test.dart index 61be590630..807a4d1a2c 100644 --- a/app_dart/test/service/scheduler/hash_workflow_test.dart +++ b/app_dart/test/service/scheduler/hash_workflow_test.dart @@ -12,7 +12,6 @@ import 'package:cocoon_service/src/model/firestore/content_aware_hash_builds.dar import 'package:cocoon_service/src/model/github/workflow_job.dart'; import 'package:cocoon_service/src/service/big_query.dart'; import 'package:cocoon_service/src/service/content_aware_hash_service.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:github/github.dart'; import 'package:http/http.dart'; import 'package:mockito/mockito.dart'; @@ -127,12 +126,14 @@ void main() { }); test('only processes workflow events !waitOnContentHash', () async { - final job = workflowJobTemplate().toWorkflowJob(); - // fakeContentAwareHash.nextStatusReturn = MergeQueueHashStatus.build; + config.dynamicConfig = DynamicConfig.fromJson({ + ...config.dynamicConfig.toJson(), + 'contentAwareHashing': {'waitOnContentHash': false}, + }); + final job = workflowJobTemplate().toWorkflowJob(); await scheduler.processWorkflowJob(job); - // expect(fakeContentAwareHash.processWorkflowJobs, [job]); expect(firestore.documents, isNotEmpty); expect( firestore, diff --git a/app_dart/test/service/scheduler_test.dart b/app_dart/test/service/scheduler_test.dart index 837ad9a8b6..8b42045ed9 100644 --- a/app_dart/test/service/scheduler_test.dart +++ b/app_dart/test/service/scheduler_test.dart @@ -15,16 +15,12 @@ import 'package:cocoon_service/src/model/ci_yaml/ci_yaml.dart'; import 'package:cocoon_service/src/model/ci_yaml/target.dart'; import 'package:cocoon_service/src/model/commit_ref.dart'; import 'package:cocoon_service/src/model/common/presubmit_completed_check.dart'; -import 'package:cocoon_service/src/model/firestore/base.dart'; import 'package:cocoon_service/src/model/firestore/ci_staging.dart'; import 'package:cocoon_service/src/model/firestore/commit.dart' as fs; import 'package:cocoon_service/src/model/firestore/pr_check_runs.dart'; -import 'package:cocoon_service/src/model/firestore/presubmit_check.dart'; -import 'package:cocoon_service/src/model/firestore/presubmit_guard.dart'; import 'package:cocoon_service/src/model/firestore/task.dart' as fs; import 'package:cocoon_service/src/model/github/checks.dart' as cocoon_checks; import 'package:cocoon_service/src/service/big_query.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:cocoon_service/src/service/flags/unified_check_run_flow_flags.dart'; import 'package:cocoon_service/src/service/luci_build_service/engine_artifacts.dart'; import 'package:cocoon_service/src/service/luci_build_service/pending_task.dart'; @@ -3202,6 +3198,9 @@ targets: // tabledataResource: tabledataResource, githubService: mockGithubService, githubClient: MockGitHub(), + dynamicConfig: DynamicConfig.fromJson({ + 'contentAwareHashing': {'waitOnContentHash': false}, + }), ), githubChecksService: GithubChecksService( config, @@ -3470,6 +3469,9 @@ targets: // tabledataResource: tabledataResource, githubService: mockGithubService, githubClient: MockGitHub(), + dynamicConfig: DynamicConfig.fromJson({ + 'contentAwareHashing': {'waitOnContentHash': false}, + }), ), githubChecksService: GithubChecksService( config, @@ -3590,6 +3592,9 @@ targets: // tabledataResource: tabledataResource, githubService: mockGithubService, githubClient: MockGitHub(), + dynamicConfig: DynamicConfig.fromJson({ + 'contentAwareHashing': {'waitOnContentHash': false}, + }), ), githubChecksService: GithubChecksService( config, diff --git a/app_dart/test/src/request_handling/request_handler_tester.dart b/app_dart/test/src/request_handling/request_handler_tester.dart index b3ba131274..04cc7cff61 100644 --- a/app_dart/test/src/request_handling/request_handler_tester.dart +++ b/app_dart/test/src/request_handling/request_handler_tester.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'package:cocoon_integration_test/testing.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/request_handling/request_handler.dart'; import 'package:cocoon_service/src/request_handling/response.dart'; import 'package:meta/meta.dart'; @@ -19,7 +20,7 @@ class RequestHandlerTester { Future get(RequestHandler handler) { return run(() { // ignore: invalid_use_of_protected_member - return handler.get(Request.fromHttpRequest(request)); + return handler.get(request.toRequest()); }); } @@ -27,7 +28,7 @@ class RequestHandlerTester { Future post(RequestHandler handler) { return run(() { // ignore: invalid_use_of_protected_member - return handler.post(Request.fromHttpRequest(request)); + return handler.post(request.toRequest()); }); } diff --git a/app_dart/tool/local_server.dart b/app_dart/tool/local_server.dart index 04a4c270de..5909911c9f 100644 --- a/app_dart/tool/local_server.dart +++ b/app_dart/tool/local_server.dart @@ -11,11 +11,11 @@ import 'package:cocoon_server_test/fake_secret_manager.dart'; import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/server.dart'; import 'package:cocoon_service/src/foundation/providers.dart'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:cocoon_service/src/service/big_query.dart'; import 'package:cocoon_service/src/service/build_status_service.dart'; import 'package:cocoon_service/src/service/commit_service.dart'; import 'package:cocoon_service/src/service/firebase_jwt_validator.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:cocoon_service/src/service/get_files_changed.dart'; import 'package:cocoon_service/src/service/scheduler/ci_yaml_fetcher.dart'; @@ -116,7 +116,9 @@ Future main() async { ); return runAppEngine( - server, + (HttpRequest request) async { + await server(request.toRequest()); + }, onAcceptingConnections: (InternetAddress address, int port) { final host = address.isLoopback ? 'localhost' : address.host; print('Serving requests at http://$host:$port/'); diff --git a/conductor/tracks/cocoon_integration_test_20260206/plan.md b/conductor/archive/cocoon_integration_test_20260206/plan.md similarity index 92% rename from conductor/tracks/cocoon_integration_test_20260206/plan.md rename to conductor/archive/cocoon_integration_test_20260206/plan.md index 491b41efcc..f173ff8fb4 100644 --- a/conductor/tracks/cocoon_integration_test_20260206/plan.md +++ b/conductor/archive/cocoon_integration_test_20260206/plan.md @@ -1,4 +1,4 @@ -# Implementation Plan: Cocoon Integration Test +# Implementation Plan: Cocoon Integration Test [checkpoint: 5d0d05c] ## Phase 1: Package Setup & Fake Consolidation - [x] Task: Create `packages/cocoon_integration_test` structure. @@ -22,4 +22,4 @@ - [x] Task: Write a "Smoke Test". - [x] Create `packages/cocoon_integration_test/test/server_test.dart`. - [x] Verify the server starts and responds to a simple health check or API call. -- [ ] Task: Conductor - User Manual Verification (Protocol in workflow.md) +- [x] Task: Conductor - User Manual Verification (Protocol in workflow.md) diff --git a/conductor/tracks/cocoon_integration_test_20260206/spec.md b/conductor/archive/cocoon_integration_test_20260206/spec.md similarity index 100% rename from conductor/tracks/cocoon_integration_test_20260206/spec.md rename to conductor/archive/cocoon_integration_test_20260206/spec.md diff --git a/conductor/tracks.md b/conductor/tracks.md index 34a1619e79..43048451de 100644 --- a/conductor/tracks.md +++ b/conductor/tracks.md @@ -2,21 +2,5 @@ --- -- [~] **Track: Cocoon Integration Test Environment** -*Link: [./tracks/cocoon_integration_test_20260206/](./tracks/cocoon_integration_test_20260206/)* - ---- - - [~] **Track: Build a Merge Queue Dashboard** *Link: [./tracks/merge_queue_dashboard_20260205/](./tracks/merge_queue_dashboard_20260205/)* - ---- - -- [x] **Track: Add sha to and show it on presubmit view of dashborad on a header along with PR and author** -*Link: [./archive/presubmit_header_sha_20260217/](./archive/presubmit_header_sha_20260217/)* - ---- - -- [x] **Track: For PreSubmitView move all state change logic to PresubmitState similarly to how BuildDashboardPage use BuildState** -*Link: [./archive/refactor_presubmit_state_20260223/](./archive/refactor_presubmit_state_20260223/)* - diff --git a/dashboard/lib/dashboard_navigation_drawer.dart b/dashboard/lib/dashboard_navigation_drawer.dart index fc8fbf5a1d..9708e34f7c 100644 --- a/dashboard/lib/dashboard_navigation_drawer.dart +++ b/dashboard/lib/dashboard_navigation_drawer.dart @@ -2,9 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'logic/links.dart'; +import 'service/scenarios.dart'; +import 'state/build.dart'; /// Sidebar for navigating the different pages of Cocoon. class DashboardNavigationDrawer extends StatelessWidget { @@ -34,9 +38,50 @@ class DashboardNavigationDrawer extends StatelessWidget { selected: currentRoute == link.route, ), ), + if (kDebugMode) ...[ + const Divider(), + ListTile( + leading: const Icon(Icons.bug_report), + title: const Text('Scenarios'), + onTap: () { + Navigator.pop(context); + _showScenarioDialog(context); + }, + ), + ], const AboutListTile(icon: FlutterLogo()), ], ), ); } + + void _showScenarioDialog(BuildContext context) { + final buildState = Provider.of(context, listen: false); + showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: const Text('Dev Tools: Select Scenario'), + content: Column( + mainAxisSize: MainAxisSize.min, + children: Scenario.values.map((scenario) { + return ListTile( + title: Text(scenario.name), + onTap: () { + buildState.resetScenario(scenario); + Navigator.of(context).pop(); + }, + ); + }).toList(), + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text('Close'), + ), + ], + ); + }, + ); + } } diff --git a/dashboard/lib/service/appengine_cocoon.dart b/dashboard/lib/service/appengine_cocoon.dart index 14610ec086..290cff2b26 100644 --- a/dashboard/lib/service/appengine_cocoon.dart +++ b/dashboard/lib/service/appengine_cocoon.dart @@ -11,6 +11,7 @@ import 'package:flutter/foundation.dart' show kIsWeb, visibleForTesting; import 'package:http/http.dart' as http; import 'cocoon.dart'; +import 'scenarios.dart'; /// CocoonService for interacting with flutter/flutter production build data. /// @@ -22,6 +23,9 @@ class AppEngineCocoonService implements CocoonService { AppEngineCocoonService({http.Client? client}) : _client = client ?? http.Client(); + @override + void resetScenario(Scenario scenario) {} + /// Branch on flutter/flutter to default requests for. final String _defaultBranch = 'master'; diff --git a/dashboard/lib/service/cocoon.dart b/dashboard/lib/service/cocoon.dart index 2f56e41aeb..a1995e441e 100644 --- a/dashboard/lib/service/cocoon.dart +++ b/dashboard/lib/service/cocoon.dart @@ -4,10 +4,12 @@ import 'package:cocoon_common/rpc_model.dart'; import 'package:cocoon_common/task_status.dart'; +import 'package:cocoon_integration_test/cocoon_integration_test.dart'; import 'package:flutter/foundation.dart'; import 'appengine_cocoon.dart'; -import 'dev_cocoon.dart'; +import 'integration_server_adapter.dart'; +import 'scenarios.dart'; /// Service class for interacting with flutter/flutter build data. /// @@ -23,10 +25,7 @@ abstract class CocoonService { if (useProductionService) { return AppEngineCocoonService(); } - return DevelopmentCocoonService( - DateTime.now(), - simulateLoadingDelays: true, - ); + return IntegrationServerAdapter(IntegrationServer(), now: DateTime.now()); } /// Gets build information on the most recent commits. @@ -134,6 +133,11 @@ abstract class CocoonService { /// Gets the presubmit guard summaries for a given [repo] and [pr]. Future>> fetchPresubmitGuardSummaries({required String repo, required String pr}); + + /// Resets the data scenario for fake implementations. + /// + /// No-op for production services. + void resetScenario(Scenario scenario) {} } /// Wrapper class for data this state serves. diff --git a/dashboard/lib/service/data_seeder.dart b/dashboard/lib/service/data_seeder.dart new file mode 100644 index 0000000000..077d731f92 --- /dev/null +++ b/dashboard/lib/service/data_seeder.dart @@ -0,0 +1,756 @@ +// Copyright 2026 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. + +import 'dart:math' as math; + +import 'package:cocoon_common/task_status.dart'; +import 'package:cocoon_integration_test/cocoon_integration_test.dart'; +import 'package:cocoon_service/cocoon_service.dart'; +import 'package:github/github.dart'; +import 'package:googleapis/firestore/v1.dart' as g; + +import 'cocoon.dart'; +import 'scenarios.dart'; + +/// Seeder to populate [IntegrationServer] with fake data. +class DataSeeder { + DataSeeder(this._server, {this.scenario = Scenario.realistic}); + + final IntegrationServer _server; + final Scenario scenario; + + /// Seeds the [IntegrationServer] with initial data. + void seed({DateTime? now}) { + if (scenario == Scenario.empty) { + return; + } + + // Use a fixed seed for reproducibility in tests, matching DevelopmentCocoonService + now ??= DateTime.now(); + final random = math.Random(now.millisecondsSinceEpoch); + + // Seed Commits and Tasks + for (final repo in ['flutter', 'cocoon']) { + final branch = defaultBranches[repo]!; + _seedCommitStatuses(now, random, repo, branch); + } + + // Seed Tree Status Changes + _seedTreeStatusChanges(now); + + // Seed Suppressed Tests + _seedSuppressedTests(now); + + // Seed Presubmit Data + _seedPresubmitData(now); + } + + void _seedPresubmitData(DateTime now) { + final guards = []; + final checks = []; + + // cafe5_1_mock_sha + guards.add( + _createPresubmitGuard( + commitSha: 'cafe5_1_mock_sha', + checkRunId: 456, + pullRequestId: 123, + author: _authors[0], + stage: CiStage.fusionTests, + creationTime: now.millisecondsSinceEpoch - 100000, + builds: { + 'Mac mac_host_engine': TaskStatus.infraFailure, + 'Mac mac_ios_engine': TaskStatus.cancelled, + 'Linux linux_android_aot_engine': TaskStatus.infraFailure, + }, + ), + ); + for (final buildName in [ + 'Mac mac_host_engine', + 'Mac mac_ios_engine', + 'Linux linux_android_aot_engine', + ]) { + checks.add( + _createPresubmitCheck( + checkRunId: 456, + buildName: buildName, + status: TaskStatus.infraFailure, + creationTime: now.millisecondsSinceEpoch - 100000, + ), + ); + } + + // face5_2_mock_sha + guards.add( + _createPresubmitGuard( + commitSha: 'face5_2_mock_sha', + checkRunId: 789, + pullRequestId: 123, + author: _authors[1], + stage: CiStage.fusionTests, + creationTime: now.millisecondsSinceEpoch - 50000, + builds: { + 'Mac mac_host_engine': TaskStatus.succeeded, + 'Mac mac_ios_engine': TaskStatus.cancelled, + 'Linux linux_android_aot_engine': TaskStatus.succeeded, + }, + ), + ); + guards.add( + _createPresubmitGuard( + commitSha: 'face5_2_mock_sha', + checkRunId: 789, + pullRequestId: 123, + author: _authors[1], + stage: CiStage.fusionEngineBuild, + creationTime: now.millisecondsSinceEpoch - 40000, + builds: { + 'Linux framework_tests': TaskStatus.succeeded, + 'Mac framework_tests': TaskStatus.failed, + 'Linux android framework_tests': TaskStatus.skipped, + 'Windows framework_tests': TaskStatus.failed, + }, + ), + ); + + // decaf_3_mock_sha + guards.add( + _createPresubmitGuard( + commitSha: 'decaf_3_mock_sha', + checkRunId: 1011, + pullRequestId: 123, + author: _authors[2], + stage: CiStage.fusionEngineBuild, + creationTime: now.millisecondsSinceEpoch, + builds: { + 'Mac mac_host_engine': TaskStatus.succeeded, + 'Mac mac_ios_engine': TaskStatus.cancelled, + 'Linux linux_android_aot_engine': TaskStatus.succeeded, + }, + ), + ); + guards.add( + _createPresubmitGuard( + commitSha: 'decaf_3_mock_sha', + checkRunId: 1011, + pullRequestId: 123, + author: _authors[2], + stage: CiStage.fusionTests, + creationTime: now.millisecondsSinceEpoch, + builds: { + 'Linux framework_tests': TaskStatus.succeeded, + 'Mac framework_tests': TaskStatus.waitingForBackfill, + 'Linux android framework_tests': TaskStatus.skipped, + 'Windows framework_tests': TaskStatus.inProgress, + }, + ), + ); + + // deafcab_mock_sha + guards.add( + _createPresubmitGuard( + commitSha: 'deafcab_mock_sha', + checkRunId: 369, + pullRequestId: 123, + author: _authors[3], + stage: CiStage.fusionEngineBuild, + creationTime: now.millisecondsSinceEpoch - 300000, + builds: { + 'Mac mac_host_engine': TaskStatus.succeeded, + 'Mac mac_ios_engine': TaskStatus.cancelled, + 'Linux linux_android_aot_engine': TaskStatus.succeeded, + }, + ), + ); + guards.add( + _createPresubmitGuard( + commitSha: 'deafcab_mock_sha', + checkRunId: 369, + pullRequestId: 123, + author: _authors[3], + stage: CiStage.fusionTests, + creationTime: now.millisecondsSinceEpoch - 300000, + builds: { + 'Linux framework_tests': TaskStatus.succeeded, + 'Mac framework_tests': TaskStatus.succeeded, + 'Linux android framework_tests': TaskStatus.skipped, + 'Windows framework_tests': TaskStatus.succeeded, + }, + ), + ); + + // Add some checks with multiple attempts for testing fetchPresubmitCheckDetails + checks.add( + PresubmitCheck( + checkRunId: 1234, + buildName: 'Test Multi Attempt', + status: TaskStatus.succeeded, + attemptNumber: 1, + creationTime: now.millisecondsSinceEpoch - 10000, + buildNumber: 12345, + summary: ''' +[INFO] Starting task Test Multi Attempt... +[SUCCESS] Dependencies installed. +[INFO] Running build script... +[SUCCESS] All tests passed (452/452) +''', + ), + ); + checks.add( + PresubmitCheck( + checkRunId: 1234, + buildName: 'Test Multi Attempt', + status: TaskStatus.failed, + attemptNumber: 2, + creationTime: now.millisecondsSinceEpoch, + buildNumber: 67890, + summary: + '[INFO] Starting task Test Multi Attempt...\n[ERROR] Test failed: Unit Tests', + ), + ); + + _server.firestore.putDocuments(guards); + _server.firestore.putDocuments(checks); + } + + PresubmitGuard _createPresubmitGuard({ + required String commitSha, + required int checkRunId, + required int pullRequestId, + required String author, + required CiStage stage, + required int creationTime, + required Map builds, + String repo = 'flutter', + }) { + final slug = RepositorySlug('flutter', repo); + final failedBuilds = builds.values + .where((status) => status.isFailure) + .length; + final remainingBuilds = builds.values + .where((status) => !status.isBuildCompleted) + .length; + + return PresubmitGuard( + checkRun: generateCheckRun(checkRunId), + commitSha: commitSha, + slug: slug, + pullRequestId: pullRequestId, + stage: stage, + creationTime: creationTime, + author: author, + remainingBuilds: remainingBuilds, + failedBuilds: failedBuilds, + builds: builds, + ); + } + + PresubmitCheck _createPresubmitCheck({ + required int checkRunId, + required String buildName, + required TaskStatus status, + required int creationTime, + int attemptNumber = 1, + }) { + return PresubmitCheck( + checkRunId: checkRunId, + buildName: buildName, + status: status, + attemptNumber: attemptNumber, + creationTime: creationTime, + ); + } + + void _seedTreeStatusChanges(DateTime now) { + final changes = []; + // Create a history of tree status changes + for (var i = 0; i < 10; i++) { + changes.add( + _createTreeStatusChange( + i, + created: now.subtract(Duration(hours: i)), + status: i.isEven ? TreeStatus.success : TreeStatus.failure, + reason: i.isEven ? null : 'Build failure on Linux', + ), + ); + } + _server.firestore.putDocuments(changes); + } + + void _seedSuppressedTests(DateTime now) { + final suppressed = []; + suppressed.add( + _createSuppressedTest( + name: 'Linux_android 0', + created: now.subtract(const Duration(days: 1)), + issueLink: 'https://github.com/flutter/flutter/issues/12345', + ), + ); + _server.firestore.putDocuments(suppressed); + } + + TreeStatusChange _createTreeStatusChange( + int i, { + DateTime? created, + TreeStatus status = TreeStatus.success, + String author = 'dash', + String? reason, + String repo = 'flutter', + }) { + final name = + 'projects/${Config.flutterGcpProjectId}/databases/${Config.flutterGcpFirestoreDatabase}/documents/${TreeStatusChange.metadata.collectionId}/$i'; + return TreeStatusChange.fromDocument( + g.Document( + name: name, + fields: { + 'createTimestamp': (created ?? DateTime.fromMillisecondsSinceEpoch(i)) + .toValue(), + 'status': status.name.toValue(), + 'author': author.toValue(), + 'repository': RepositorySlug('flutter', repo).fullName.toValue(), + if (reason != null) 'reason': reason.toValue(), + }, + ), + ); + } + + SuppressedTest _createSuppressedTest({ + String name = 'task', + String repository = 'flutter/flutter', + bool isSuppressed = true, + String issueLink = 'link', + DateTime? created, + }) { + final docName = + 'projects/${Config.flutterGcpProjectId}/databases/${Config.flutterGcpFirestoreDatabase}/documents/${SuppressedTest.kCollectionId}/$name'; + return SuppressedTest( + name: name, + repository: repository, + isSuppressed: isSuppressed, + issueLink: issueLink, + createTimestamp: created ?? DateTime.fromMillisecondsSinceEpoch(1), + )..name = docName; + } + + void _seedCommitStatuses( + DateTime now, + math.Random random, + String repo, + String branch, + ) { + const commitGap = 2 * 60 * 1000; // 2 minutes between commits + final baseTimestamp = now.millisecondsSinceEpoch; + + final commits = []; + final tasks = []; + + final commitCount = scenario == Scenario.highLoad ? 100 : 25; + + for (var index = 0; index < commitCount; index += 1) { + final commitTimestamp = baseTimestamp - ((index + 1) * commitGap); + // Use the same random sequence as DevelopmentCocoonService + final commitRandom = math.Random(commitTimestamp); + + // Generate a stable and unique SHA for each commit + final commitSha = _commitsSha[repo]![index]; + + final authorIndex = commitRandom.nextInt(_authors.length); + final messageSeed = commitTimestamp % 37 + authorIndex; + final messageInc = _messagePrimes[messageSeed % _messagePrimes.length]; + final message = List.generate( + 6, + (int i) => _words[(messageSeed + i * messageInc) % _words.length], + ).join(' '); + + final commit = generateFirestoreCommit( + index, + sha: commitSha, + repo: repo, + branch: branch, + createTimestamp: commitTimestamp, + author: _authors[authorIndex], + avatar: _avatars[authorIndex], + message: message, + ); + commits.add(commit); + + final taskCount = repo == 'flutter' ? 100 : 3; + for (var i = 0; i < taskCount; i++) { + tasks.add( + _createFakeTask( + now, + commitTimestamp, + index, + i, + commitRandom, + commitSha, + repo, + ), + ); + } + } + + _server.firestore.putDocuments(commits); + _server.firestore.putDocuments(tasks); + } + + Task _createFakeTask( + DateTime now, + int commitTimestamp, + int commitIndex, + int taskIndex, + math.Random random, + String commitSha, + String repo, + ) { + const commitGap = 2 * 60 * 1000; + final age = (now.millisecondsSinceEpoch - commitTimestamp) ~/ commitGap; + + TaskStatus status; + if (scenario == Scenario.allGreen) { + status = TaskStatus.succeeded; + } else if (scenario == Scenario.redTree && commitIndex == 0) { + status = TaskStatus.failed; + } else { + // The [statusesProbability] list is an list of proportional + // weights to give each of the values in _statuses when randomly + // determining the status. So e.g. if one is 150, another 50, and + // the rest 0, then the first has a 75% chance of being picked, + // the second a 25% chance, and the rest a 0% chance. + final statusesProbability = [ + // bigger = more probable + math.max(taskIndex % 2, 20 - age * 2), // TaskStatus.waitingForBackfill + math.max(0, 10 - age * 2), // TaskStatus.inProgress + math.min(10 + age * 2, 100), // TaskStatus.succeeded + math.min(1 + age ~/ 3, 30), // TaskStatus.failed + if (taskIndex % 15 == 0) // TaskStatus.infraFailure + 5 + else if (taskIndex % 25 == 0) + 15 + else + 1, + if (taskIndex % 20 == 0) 30, + 1, // TaskStatus.cancelled + ]; + + final maxProbability = statusesProbability.fold( + 0, + (int c, int p) => c + p, + ); + var weightedIndex = random.nextInt(maxProbability); + var statusIndex = 0; + while (weightedIndex > statusesProbability[statusIndex]) { + weightedIndex -= statusesProbability[statusIndex]; + statusIndex += 1; + } + status = _statuses[statusIndex]; + } + + final minAttempts = _minAttempts[status]!; + final maxAttempts = _maxAttempts[status]!; + final attempts = + minAttempts + random.nextInt(maxAttempts - minAttempts + 1); + + final buildNumber = attempts > 0 ? random.nextInt(1000) : null; + + return generateFirestoreTask( + taskIndex, + name: 'Linux_android $taskIndex', + status: status, + attempts: attempts, + buildNumber: buildNumber, + commitSha: commitSha, + created: DateTime.fromMillisecondsSinceEpoch(commitTimestamp + taskIndex), + started: DateTime.fromMillisecondsSinceEpoch( + commitTimestamp + (taskIndex * 1000 * 60), + ), + ended: DateTime.fromMillisecondsSinceEpoch( + commitTimestamp + (taskIndex * 1000 * 60) + (taskIndex * 1000 * 60), + ), + bringup: taskIndex == now.millisecondsSinceEpoch % 13, + testFlaky: attempts > 1, + ); + } + + static const _statuses = [ + TaskStatus.waitingForBackfill, + TaskStatus.inProgress, + TaskStatus.succeeded, + TaskStatus.failed, + TaskStatus.infraFailure, + TaskStatus.skipped, + TaskStatus.cancelled, + ]; + + static const _minAttempts = { + TaskStatus.waitingForBackfill: 1, + TaskStatus.inProgress: 1, + TaskStatus.succeeded: 1, + TaskStatus.failed: 1, + TaskStatus.infraFailure: 1, + TaskStatus.skipped: 1, + TaskStatus.cancelled: 1, + }; + + static const _maxAttempts = { + TaskStatus.waitingForBackfill: 1, + TaskStatus.inProgress: 2, + TaskStatus.succeeded: 1, + TaskStatus.failed: 2, + TaskStatus.infraFailure: 2, + TaskStatus.skipped: 1, + TaskStatus.cancelled: 1, + }; + + static const List _authors = [ + 'matan', + 'yegor', + 'john', + 'jenn', + 'kate', + 'stuart', + ]; + + static const List _avatars = [ + 'https://avatars.githubusercontent.com/u/168174?v=4', + 'https://avatars.githubusercontent.com/u/211513?v=4', + 'https://avatars.githubusercontent.com/u/1924313?v=4', + 'https://avatars.githubusercontent.com/u/682784?v=4', + 'https://avatars.githubusercontent.com/u/16964204?v=4', + 'https://avatars.githubusercontent.com/u/122189?v=4', + ]; + + static const List _messagePrimes = [ + 3, + 11, + 17, + 23, + 31, + 41, + 47, + 67, + 79, + ]; + static const List _words = [ + 'fixes', + 'issue', + 'crash', + 'developer', + 'blocker', + 'intermittent', + 'format', + ]; + + static const _commitsSha = { + 'cocoon': _commitsCocoon, + 'flutter': _commitsFlutter, + }; + + // These commits from from flutter/cocoon + static const List _commitsCocoon = [ + '2fd76f920a38e4384248173d05ee482d5aeaf4c5', + '2d22b5e85f986f3fa2cf1bfaf085905c2182c270', + '77238bc7bf35489df03bc00ce2b2231a1afe6b06', + '01d87b7a802e6ea388a066e773b1af3dace44053', + '754039ae0cc524db1052da0f22c9275e32fe4f54', + '1f5e006a398fa5d0e59f78cd5071e2532d2fe438', + 'a798b24044d567df62b8693b179932a8364c8dd8', + '4389a8a3dbe1ed4c6a643641e95d7759f2158d9e', + 'c05e886884ec9adff2f43b87dbcb02e3507d971b', + 'a2acc46447cdfcd6628a897dea27ff64849bfc99', + 'd31d67ffb38fbd09ecf0a11ad5f6fd433cec9c9f', + 'e303d2c71c956c9c1eb7bf81473aac20d756eb75', + '789f6bb335fe31de5d9c6adbab2fc169030a057f', + 'c97f0670658e04f096a3e57b20fa8241306ffcaa', + 'e8e31198861b5f53f04900bdf9a54e8bf6b7d597', + '434a0a7d3c4c3bc633e06de7707ef590c54c20c3', + 'e7fca29b3f0408c7c1726e270a5aba0e28e74090', + 'dd6f94d8573a77506a122899a0592a956ac57bec', + 'cb19ec23d79b9d422f577722e5a14253fdcaea71', + '4cb8c6498aedfd2ff0f89e34eb5da993a77392bd', + 'de892884aa089f22aced4d19a71b6a1d521c8db6', + '214470ceb026525fa225d52dfe7d27db2c4ddf31', + 'e0f4628b4379286c433bab020b9e193fdc437d05', + 'be5975cb0b7fcad7ab2c3122a8df3d541befdeab', + '06f7ab60d4914e00b342f098e1ef3e43e501b469', + 'e1005bea192673e54faa0c769d9f0fb7439a09b4', + 'e22d7f6bf2e1e1969dd963d39ad32c756fb0f20e', + 'f4b4b20bb27cbbd1c42eee7b17ce39c5819dc818', + 'd717ed969b6a477499eb3cf823c78dbe654ca709', + '6a8d6a42b4c9f4b72caf0a3b808e50909686a2b7', + 'afaa9bfa5d26ab419f791d5ca97d602ec52a30a5', + 'f553212d9bfbc6e70c0d6a4ac3fe71208bb77ca1', + 'c35f8b79f4a5103603ceaaa14d1df3857a166fa1', + '46447341838d480966926d0b32771e281af1c885', + '4e3330081d4e0a3e109cf1cfb514072a90b999d7', + '4199ef93c3184c29362520ea5292d854a8728494', + 'a0538938974c60cb9249acf8f0588c3df3c0e4b1', + '49cac0b6c1e0d7d1d04865c328c8cbe5c8e0cda2', + '97e3cc6295515f8292f5f57868506c70446594c3', + 'c94e577ef3b0ab48255633c63f0143d9e3eab6f8', + '17d9af726fb6e4a4a8cc4f1becfc11dc9d4db96c', + '4af6ec81ad538e3da23ee88cba65ed8687a72ea3', + '69cb45166d2f4f61069e1f1a975dab3f48bed832', + 'ae227082570f75b614bb29593911ada5137654ad', + '882b9fa44962df0b80d9a25b2553796bd4eba2ff', + 'e1f5c4c7178c34ce561c493b558df7450995a60c', + '56d7272cd497c73502ec5a09bdf69b4c7ecbfd74', + '36a99b302f7348848ec477ce867a8b78656d9c6c', + '48be7a01565289f44c2c9d4ff1436800c52acf75', + '422cb82e01ee0192256a05217102f45f2f74551d', + 'f8744d10460abae3d75e92336b3bb264bb78cc8c', + '5000f246c8c568547c551b11e4b72acd0179e73c', + '52c09522b288766a42900aa73f77216907d16b23', + '61adb59fc097335b45b23fc884a78362b71a3e9b', + 'b81c3c58e5a6c45bc8728024068291a7e5f19c1a', + 'dec394e5401b62024ed71253e900c25a06eb46f9', + 'fbe142d2cb60fb981521cfe72961642d69db8784', + '24a9c4557e0366945c179433fab8434c2c8ee59f', + 'ccc28f607ae11fe79c39c42d88798c19b1388af9', + 'd4d5ca665e56063fdd37d42d2192c64151915454', + '4273fc07c3e8a36726087becdf331f7d63fc7e66', + '5e0380895cc8e34a6a58f238b7fd33b9e0f027fe', + '146908e48a8a9f92f59fae86a7a4ff28c0ce9109', + '2779a449026423bc0f50a10eead2d9f3720b825c', + 'ff9b954908341360ffb39f5eee2857172a29c0e5', + 'b00b6d146c4f4af1d28260a3f28abd15f0105221', + '4ffd03df44741d73877a0848935eea0d6cbfc1e9', + 'c2c5b73aaae2583cc235319e53200e0e15cda438', + 'b7b370faf46f4c682827fbb3967e1ef117b3b0d1', + 'bc6c9ac81e5909408518568729c2c3a147402928', + 'ba1aa77c5bc5fe545b245f2b1883af3dfeeae6c0', + '97a7060a7e28ab1d13cb2f4ca90be624b417168e', + '3df1da69ffcb4e00cf13c65c9f0497a56413e5e9', + 'ebb13b4ed0cb41814839d4084c064e62526b2ec0', + '70b9d50722307f0f45ceed01d421d6a425e95291', + '3f81ca7b73f21ca9b449c147942fbe4fcd31450d', + '86d490939df232966dc6ba363ebc0baaac364701', + '6ba51f3f61025543d66e59c2c1ae3d1b37d5d8d6', + 'b728942e1c9a9046c1a5c8d8a25a644d0db7160c', + '920819252a398c0e3da9b6017b110ee047c1748e', + 'd7c114d803b1365ea3a975c9600fc8cfd9efb9d4', + '792aa82143bb12e97f396cb2a462ad617dbd22bc', + 'b69dda7e6e7c605aacb0ab973a21830c4401db20', + '90b5950051487c57c9120f6d0b98d61dfb05a197', + '177ac767fdfbe9799f91bfc0f22b44109f7b1b20', + '18d71ce8066b0653b5ecd1a235571fd806f420a0', + '39016691752550109065cb506393f9a88eeb5433', + '3477afbf65aac3fd3dfca54770803283d827222a', + 'ec17795bcac60741f0b4009fd60e654333173c0d', + '02d64e3e6b65d430adc8f28e76b65fef06112e81', + '6d378d876bb342380e5aaa2671d7c2687bc67df2', + 'b47732a57770a5a1780f25bb495cbcc2b61722b9', + '4b666b1f44634a5766220adc84e01c6f804cf552', + '642bbd51338f2ea19e97409e3abaa07391707df9', + '49935920c84157e8c0b981ac6b4eac9f92022613', + 'ce4105b9a777ed2b494ee61465584d58faa52cde', + '24aeb8dffb2e9a83161a89e88e9aacf5f01beb63', + '07280e78af25d07f1bd00c391fd0928f5d9aa543', + '13239ea26d46db5a3268592b88ba65f732fcca7a', + '213244f8ec1740c1db65cd02853de2e5736b26bd', + ]; + + static const _commitsFlutter = [ + '692b51763d45cc4d574a06cf3d7b9b36f69c5170', + '450478ad313f8291c3a48b00a7331e7d12e2bda0', + 'fb75b2b671c7702b549a80a420144097f4fab5a9', + '9020331a243162781b2c5a645cdca892b1d32b97', + '7672bd756ac34099907137e51f276ee5c0cfb582', + '6172ba6c553e7642bc58997c200f5dde488b64bc', + '1da41c5015a28e0025a00b7c189077e3872a358c', + 'fafe9c3c1e772019a4894f6c3092f3f633654b1f', + '8d3b8d8b7fa1267439e979803af8d41e237e9c95', + '113ea6ae72deb26444c3b561c65c9c6b2c0f3ef3', + 'f4e490131e338bf8b1a3bcab8dae68c56c4498cd', + 'b13a8b24362d7a0b2fafe2a404cd9852b27dc688', + 'a545549c4e33a548600a8045d1bd5388346cf187', + 'f76936bb858dbade620fc8710b5fd89dc1fab750', + '4c4f5e70b14e238ceebd03372765abb204070573', + '3b21872f9aea4d1cdf3a09c7d74c3970d9316330', + 'c5643e21933389ab21a45e38515494c53d2cc2f6', + 'ee7e28ec979562d0ab722fd24b5e145068ec6b63', + 'cbb7a618809ee9dfb525ca6ea28044e016718ae7', + '399a692f7db0bd5faba36003d67880776a3767d3', + 'c389cc0b790a10482a82a5ab2915e907aa442ad1', + 'd88a5099b202bd289c508d1dd5ef3e006ccf8144', + 'c71e0e31aeb6b855477dee84b391d64f14967616', + '88ef36199ddebf36b0596af73047b56ed0208fa3', + '4f5478cce38d837e14b7a032a12500d3fc0f1310', + '02f61b17f1aa91dca2df3108676bc13700f9efe7', + '7ff0723e08fd3f40bf866c164da8f1895ad41e71', + 'fbfe04e0c4e7311a92f9407abb6ec6f3c9543d8e', + 'dad6f9d4107a5332d15c126207882edbd8acdc97', + '95144d41fa78bde126c4c1460d4f9ec1a0c3daa5', + '1e1df36da3654f3bec977435cee56637ab77d398', + 'efb43ece1f40a0a5f04348951eb625f81318587a', + 'd2d2a7a0c18d7465dd12225f511d998135e0036d', + '8774a3b33cb281791933f1cd45f0e77ddd9d4bd1', + '3ff83f39d2fe9c228f4fa16709392c27ef1d7d32', + '3f0a7310dfb6ae1ce29c09b58167b2c16cff743a', + '2a4b712361668ae230fbf1077bf6a5ef07552641', + 'e6e36963d3bdbd3810f8986ab56811b9ff145a5c', + '9c8defed0245315b2dab8986ae66fc84b186ff3e', + '6d42ae50140884ec72886665cfb5d4bf39f30afe', + '075faff72b964ee4fb6f4e45f260d0223ff55f23', + '1af98a6bfc879852008bd2108242a64c07403b1d', + '5b5a69ff0a4288b1e53c3d1337c5ac69ca26ebfc', + '4c020ad5dad530afde20c2830a5a6f22c6e3b867', + '3109939de842eb6fe00a831e436963d4568bdc0e', + 'f38a3e07af777d51606cd9912bc28c274eb6f05b', + '5655697a23d54dadeb4f527424b3da3ffa1051a2', + '9dc7888929d9112dfed9deb16f3f20d6a341bb5b', + '91b2d41a66d1c540233b819525553afc0fa1f58d', + '2d7e80963b3ad3594b7fcab231f1bd08c13cf0d1', + '81c91517d55c15f9f3a10d5b88401c7e191a5179', + '6c9a881a59f6a2e79e0896e0b475ee9293983947', + '8034db0bd38b1c682146474cc5986e2e00dad96f', + 'd134331bf8f01c213b87cc611a76a0013ed3e860', + '34073f4f2a86acd23f4966acbb24d550b5f31563', + '56956c33ef102ac0b5fc46b62bd2dd9f50a86616', + '0ef66c7d1a4c3ed303fdd2aa0349d39955b0e0ef', + '935b8f70305b2d82d76b2a15d568d973e2835895', + '9af4145b8ecb5da13d053dd2a6702c73705a862a', + 'a8911cbac88ef8f73c083465d0cbc35a7537f35f', + 'd33442bedb88e1579c58f5dee14951712bdaf94d', + '7008d4acb2076798da0adf3c16dc08286dbea765', + '06df71c51446e96939c6a615b7c34ce9123806ba', + '230240c56880f2c19bf92d2c32203b064054f173', + '1fdf684e327544e93c39f1da5429c3e880d22d15', + '8a80222e4d09460d6615636df152adc6772cb9f6', + 'de1b130cf637ad91ebf17db0893b7e1ce5f2b064', + 'e1f11bd5aafda71a21854a0cc53022666c1c5449', + '76f70d21da9c58da773ca7ebb044b2bbb8808c28', + '1f506886e11c3cb59deb216b6139f718f5a2dd67', + 'b9e7e3ffe808a93f1e50d3b1729bf1f40e375de2', + '2c24f0f31223fbda063ad40e25219578742ac299', + 'e0e7a7d72db3fef30b221433e259e4e94a4d3aec', + '96d292fa0acd9d11e85fd04f7355a47cf3fb2723', + '246b62f221f3966a0fcfcecc3e8cb1ef7ce3e953', + '1e97fd38cf89f94f5159f4e9d0b598a0871103ab', + '6c90a6559480c7b46a3e6c767af614326fb8ca9b', + '2b2bdc6df9e061b0bdf0ff61e9c508d963e3ac64', + '9f2cb479c8aa66c82a4ae9f6ca825aee5949382b', + 'c023e5b2474f8ff1c146240dd685237cd8490f89', + '24ce716cfddfef201027c1a5fa2299a8aeffb03e', + '1887f3f8e0d4ebff550dcc08319e338290edf339', + '0c72661d44978a4e9374a14e882bbb26a46c0ac5', + '5e7b2a0bb3e58cbe4771ae3b7965941f9f38b84e', + '64866862f623ceeb45fd8be4782e8db8b58910c0', + '4c7144a4a890b98ed812be8648ff16c917216e8b', + '294aa14e763f7e8a3729f15eef72f50f16b48e05', + 'ec11254157f69d5d9260e12f53f82a6569b5c1fa', + 'f5825a22a47969ce9fec303dbefee035eadb1acc', + 'a58324d980b1e1d6805eac3e4a7748ae5965a242', + '8f61855dede30a55e9e00c9cb0caa62829798cd1', + '7ac16a276391e26e448e50447f2bb4f3e8146c87', + '70870ee8d3b6280e2366f95f067e075f11c08f58', + 'ecf688eb21e8e7d6e21456a2d2fbede4c4ab5b94', + '5b1c84cec15ce15283fe67cb202f37d3f9a911be', + '35e8dae34234cf605ab622ae5c91ff0c3676da55', + '6e4a481bdf2793a05a2569693d3b88b200159217', + '9292bb3a66ea6377899df5a7fc17857fa364477c', + '9fa7f81be038464d2aabef4752d2f50ea60ce561', + 'aba16bc2db714ba438f5480fd328c14ca92c42db', + ]; +} diff --git a/dashboard/lib/service/dev_cocoon.dart b/dashboard/lib/service/dev_cocoon.dart deleted file mode 100644 index abe056c10e..0000000000 --- a/dashboard/lib/service/dev_cocoon.dart +++ /dev/null @@ -1,773 +0,0 @@ -// Copyright 2019 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. - -import 'dart:async'; -import 'dart:math' as math; - -import 'package:cocoon_common/guard_status.dart'; -import 'package:cocoon_common/rpc_model.dart'; -import 'package:cocoon_common/task_status.dart'; - -import 'cocoon.dart'; - -class _PausedCommitStatus { - _PausedCommitStatus(CocoonResponse> status) - : _completer = Completer>>(), - _pausedStatus = status; - - final Completer>> _completer; - CocoonResponse>? _pausedStatus; - - bool get isComplete => _pausedStatus == null; - - Future>> get future => _completer.future; - - void update(CocoonResponse> newStatus) { - assert(_pausedStatus != null); - _pausedStatus = newStatus; - } - - void complete() { - assert(_pausedStatus != null); - _completer.complete(_pausedStatus!); - _pausedStatus = null; - } -} - -/// [CocoonService] for local development purposes. -/// -/// This creates fake data that mimicks what production will send. -class DevelopmentCocoonService implements CocoonService { - DevelopmentCocoonService(this.now, {this.simulateLoadingDelays = false}) - : _random = math.Random(now.millisecondsSinceEpoch); - - final math.Random _random; - - final DateTime now; - - final bool simulateLoadingDelays; - - _PausedCommitStatus? _pausedStatus; - bool _paused = false; - bool get paused => _paused; - set paused(bool pause) { - if (_paused == pause) { - return; - } - assert(_paused || _pausedStatus == null || _pausedStatus!.isComplete); - if (_pausedStatus != null && !_pausedStatus!.isComplete) { - _pausedStatus!.complete(); - _pausedStatus = null; - } - _paused = pause; - } - - @override - Future>> fetchCommitStatuses({ - CommitStatus? lastCommitStatus, - String? branch, - required String repo, - }) async { - final data = CocoonResponse>.data( - _createFakeCommitStatuses(lastCommitStatus, repo, branch: branch), - ); - if (_pausedStatus == null || _pausedStatus!.isComplete) { - _pausedStatus = _PausedCommitStatus(data); - } else { - _pausedStatus!.update(data); - } - - if (!_paused) { - if (simulateLoadingDelays) { - final delayedStatus = _pausedStatus; - Future.delayed(const Duration(seconds: 2), () { - if (!_paused && !delayedStatus!.isComplete) { - delayedStatus.complete(); - } - }); - } else { - _pausedStatus!.complete(); - } - } - - return _pausedStatus!.future; - } - - final _treeStatusChanges = >{}; - static final _defaultChanges = [ - TreeStatusChange( - createdOn: DateTime.now().subtract(const Duration(hours: 1)), - status: TreeStatus.success, - authoredBy: 'Joe Admin', - reason: 'Test', - ), - TreeStatusChange( - createdOn: DateTime.now().subtract(const Duration(hours: 2)), - status: TreeStatus.failure, - authoredBy: 'Joe Admin', - reason: 'Test', - ), - ]; - - @override - Future>> fetchTreeStatusChanges({ - required String idToken, - required String repo, - }) async { - return CocoonResponse>.data( - _treeStatusChanges.putIfAbsent(repo, () => [..._defaultChanges]), - ); - } - - final _suppressedTests = >{}; - - @override - Future>> fetchSuppressedTests({ - String? repo, - }) async { - final effectiveRepo = repo ?? 'flutter/flutter'; - // Initialize with a default suppressed test if the repo hasn't been accessed yet - if (!_suppressedTests.containsKey(effectiveRepo)) { - _suppressedTests[effectiveRepo] = [ - SuppressedTest( - name: 'Linux_android 0', - repository: effectiveRepo, - issueLink: 'https://github.com/flutter/flutter/issues/123', - createTimestamp: now.millisecondsSinceEpoch, - ), - ]; - } - return CocoonResponse.data(_suppressedTests[effectiveRepo]!); - } - - @override - Future> updateTestSuppression({ - required String idToken, - required String repo, - required String testName, - required bool suppress, - String? issueLink, - String? note, - }) async { - final list = _suppressedTests.putIfAbsent(repo, () => []); - if (suppress) { - if (!list.any((t) => t.name == testName)) { - list.add( - SuppressedTest( - name: testName, - repository: repo, - issueLink: - issueLink ?? 'https://github.com/flutter/flutter/issues/123', - createTimestamp: DateTime.now().millisecondsSinceEpoch, - updates: [ - SuppressionUpdate( - user: 'dev-user', - action: 'SUPPRESS', - updateTimestamp: DateTime.now().millisecondsSinceEpoch, - note: note, - ), - ], - ), - ); - } - } else { - list.removeWhere((t) => t.name == testName); - } - return const CocoonResponse.data(null); - } - - @override - Future> fetchPresubmitGuard({ - required String repo, - required String sha, - }) async { - if (sha == 'cafe5_1_mock_sha') { - return CocoonResponse.data( - PresubmitGuardResponse( - prNum: 123, - checkRunId: 456, - author: _authors[0], - guardStatus: GuardStatus.inProgress, - stages: [ - PresubmitGuardStage( - name: 'Engine', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Mac mac_host_engine': TaskStatus.infraFailure, - 'Mac mac_ios_engine': TaskStatus.cancelled, - 'Linux linux_android_aot_engine': TaskStatus.infraFailure, - }, - ), - ], - ), - ); - } else if (sha == 'face5_2_mock_sha') { - return CocoonResponse.data( - PresubmitGuardResponse( - prNum: 123, - checkRunId: 789, - author: _authors[1], - guardStatus: GuardStatus.failed, - stages: [ - PresubmitGuardStage( - name: 'Engine', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Mac mac_host_engine': TaskStatus.succeeded, - 'Mac mac_ios_engine': TaskStatus.cancelled, - 'Linux linux_android_aot_engine': TaskStatus.succeeded, - }, - ), - PresubmitGuardStage( - name: 'Framework', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Linux framework_tests': TaskStatus.succeeded, - 'Mac framework_tests': TaskStatus.failed, - 'Linux android framework_tests': TaskStatus.skipped, - 'Windows framework_tests': TaskStatus.failed, - }, - ), - ], - ), - ); - } else if (sha == 'decaf_3_mock_sha') { - return CocoonResponse.data( - PresubmitGuardResponse( - prNum: 123, - checkRunId: 1011, - author: _authors[2], - guardStatus: GuardStatus.failed, - stages: [ - PresubmitGuardStage( - name: 'Engine', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Mac mac_host_engine': TaskStatus.succeeded, - 'Mac mac_ios_engine': TaskStatus.cancelled, - 'Linux linux_android_aot_engine': TaskStatus.succeeded, - }, - ), - PresubmitGuardStage( - name: 'Framework', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Linux framework_tests': TaskStatus.succeeded, - 'Mac framework_tests': TaskStatus.waitingForBackfill, - 'Linux android framework_tests': TaskStatus.skipped, - 'Windows framework_tests': TaskStatus.inProgress, - }, - ), - ], - ), - ); - } else if (sha == 'deafcab_mock_sha') { - return CocoonResponse.data( - PresubmitGuardResponse( - prNum: 123, - checkRunId: 369, - author: _authors[3], - guardStatus: GuardStatus.succeeded, - stages: [ - PresubmitGuardStage( - name: 'Engine', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Mac mac_host_engine': TaskStatus.succeeded, - 'Mac mac_ios_engine': TaskStatus.cancelled, - 'Linux linux_android_aot_engine': TaskStatus.succeeded, - }, - ), - PresubmitGuardStage( - name: 'Framework', - createdAt: now.millisecondsSinceEpoch, - builds: { - 'Linux framework_tests': TaskStatus.succeeded, - 'Mac framework_tests': TaskStatus.succeeded, - 'Linux android framework_tests': TaskStatus.skipped, - 'Windows framework_tests': TaskStatus.succeeded, - }, - ), - ], - ), - ); - } - return CocoonResponse.error( - 'No presubmit guard data for sha $sha', - statusCode: 404, - ); - } - - @override - Future>> - fetchPresubmitCheckDetails({ - required int checkRunId, - required String buildName, - }) async { - return CocoonResponse.data([ - PresubmitCheckResponse( - attemptNumber: 1, - buildName: buildName, - creationTime: now.millisecondsSinceEpoch - 10000, - status: 'Succeeded', - buildNumber: 12345, - summary: - ''' -[INFO] Starting task $buildName... -[SUCCESS] Dependencies installed. -[INFO] Running build script... -[SUCCESS] All tests passed (452/452) -''', - ), - PresubmitCheckResponse( - attemptNumber: 2, - buildName: buildName, - creationTime: now.millisecondsSinceEpoch, - status: 'Failed', - buildNumber: 67890, - summary: - '[INFO] Starting task $buildName...\n[ERROR] Test failed: Unit Tests', - ), - ]); - } - - @override - Future>> - fetchPresubmitGuardSummaries({ - required String repo, - required String pr, - }) async { - return CocoonResponse.data([ - PresubmitGuardSummary( - commitSha: 'decaf_3_mock_sha', - creationTime: now.millisecondsSinceEpoch, - guardStatus: GuardStatus.inProgress, - ), - PresubmitGuardSummary( - commitSha: 'face5_2_mock_sha', - creationTime: now.millisecondsSinceEpoch - 100000, - guardStatus: GuardStatus.failed, - ), - PresubmitGuardSummary( - commitSha: 'cafe5_1_mock_sha', - creationTime: now.millisecondsSinceEpoch - 200000, - guardStatus: GuardStatus.failed, - ), - PresubmitGuardSummary( - commitSha: 'deafcab_mock_sha', - creationTime: now.millisecondsSinceEpoch - 300000, - guardStatus: GuardStatus.succeeded, - ), - ]); - } - - @override - Future> updateTreeStatus({ - required String idToken, - required String repo, - required TreeStatus status, - String? reason, - }) async { - // At most 10 per. - final list = _treeStatusChanges.putIfAbsent( - repo, - () => [..._defaultChanges], - ); - list.insert( - 0, - TreeStatusChange( - createdOn: DateTime.now(), - status: status, - authoredBy: 'Joe Widget', - reason: reason, - ), - ); - if (list.length > 10) { - list.removeLast(); - } - return const CocoonResponse.data(null); - } - - static const List _repos = ['flutter', 'cocoon']; - - @override - Future>> fetchRepos() async { - return const CocoonResponse>.data(_repos); - } - - @override - Future> fetchTreeBuildStatus({ - String? branch, - required String repo, - }) async { - final failed = _random.nextBool(); - final response = BuildStatusResponse( - buildStatus: failed ? BuildStatus.failure : BuildStatus.success, - failingTasks: [ - if (failed) ...['failed_task_1', 'failed_task_2'], - ], - ); - return CocoonResponse.data(response); - } - - @override - Future>> fetchFlutterBranches() async { - return CocoonResponse.data([ - Branch(channel: 'master', reference: 'master'), - Branch(channel: 'stable', reference: 'flutter-3.13-candidate.0'), - Branch(channel: 'beta', reference: 'flutter-3.15-candidate.5'), - Branch(channel: 'dev', reference: 'flutter-3.15-candidate.12'), - ]); - } - - @override - Future> vacuumGitHubCommits( - String idToken, { - required String repo, - required String branch, - }) async { - return const CocoonResponse.error( - 'Unable to vacuum against fake data. Try building the app to use prod data.', - statusCode: 501 /* Not implemented */, - ); - } - - @override - Future> rerunTask({ - required String? idToken, - required String taskName, - required String commitSha, - required String repo, - required String branch, - }) async { - return const CocoonResponse.error( - 'Unable to retry against fake data. Try building the app to use prod data.', - statusCode: 501 /* Not implemented */, - ); - } - - @override - Future> rerunCommit({ - required String? idToken, - required String commitSha, - required String repo, - required String branch, - Iterable? include, - }) async { - return const CocoonResponse.error( - 'Unable to schedule against fake data. Try building the app to use prod data.', - statusCode: 501 /* Not implemented */, - ); - } - - @override - Future>> fetchMergeQueueHooks({ - required String idToken, - }) async { - return const CocoonResponse>.data([]); - } - - @override - Future> replayGitHubWebhook({ - required String idToken, - required String id, - }) async { - return const CocoonResponse.data(null); - } - - static const int _commitGap = 2 * 60 * 1000; // 2 minutes between commits - - List _createFakeCommitStatuses( - CommitStatus? lastCommitStatus, - String repo, { - String? branch, - }) { - branch ??= defaultBranches[repo]!; - final baseTimestamp = lastCommitStatus != null - ? (lastCommitStatus.commit.timestamp.toInt()) - : now.millisecondsSinceEpoch; - final result = []; - for (var index = 0; index < 25; index += 1) { - final commitTimestamp = baseTimestamp - ((index + 1) * _commitGap); - final random = math.Random(commitTimestamp); - final commit = _createFakeCommit( - commitTimestamp, - random, - repo, - _commits[index], - branch, - ); - final status = CommitStatus( - commit: commit, - tasks: _createFakeTasks(commitTimestamp, commit, random), - ); - result.add(status); - } - return result; - } - - final List _authors = [ - 'matan', - 'yegor', - 'john', - 'jenn', - 'kate', - 'stuart', - ]; - final _avatars = [ - 'https://avatars.githubusercontent.com/u/168174?v=4', - 'https://avatars.githubusercontent.com/u/211513?v=4', - 'https://avatars.githubusercontent.com/u/1924313?v=4', - 'https://avatars.githubusercontent.com/u/682784?v=4', - 'https://avatars.githubusercontent.com/u/16964204?v=4', - 'https://avatars.githubusercontent.com/u/122189?v=4', - ]; - - final List _messagePrimes = [3, 11, 17, 23, 31, 41, 47, 67, 79]; - final List _words = [ - 'fixes', - 'issue', - 'crash', - 'developer', - 'blocker', - 'intermittent', - 'format', - ]; - final List _commits = [ - '2d22b5e85f986f3fa2cf1bfaf085905c2182c270', - '2fd76f920a38e4384248173d05ee482d5aeaf4c5', - '77238bc7bf35489df03bc00ce2b2231a1afe6b06', - '01d87b7a802e6ea388a066e773b1af3dace44053', - '754039ae0cc524db1052da0f22c9275e32fe4f54', - '1f5e006a398fa5d0e59f78cd5071e2532d2fe438', - 'a798b24044d567df62b8693b179932a8364c8dd8', - '4389a8a3dbe1ed4c6a643641e95d7759f2158d9e', - 'c05e886884ec9adff2f43b87dbcb02e3507d971b', - 'a2acc46447cdfcd6628a897dea27ff64849bfc99', - 'd31d67ffb38fbd09ecf0a11ad5f6fd433cec9c9f', - 'e303d2c71c956c9c1eb7bf81473aac20d756eb75', - '789f6bb335fe31de5d9c6adbab2fc169030a057f', - 'c97f0670658e04f096a3e57b20fa8241306ffcaa', - 'e8e31198861b5f53f04900bdf9a54e8bf6b7d597', - '434a0a7d3c4c3bc633e06de7707ef590c54c20c3', - 'e7fca29b3f0408c7c1726e270a5aba0e28e74090', - 'dd6f94d8573a77506a122899a0592a956ac57bec', - 'cb19ec23d79b9d422f577722e5a14253fdcaea71', - '4cb8c6498aedfd2ff0f89e34eb5da993a77392bd', - 'de892884aa089f22aced4d19a71b6a1d521c8db6', - '214470ceb026525fa225d52dfe7d27db2c4ddf31', - 'e0f4628b4379286c433bab020b9e193fdc437d05', - 'be5975cb0b7fcad7ab2c3122a8df3d541befdeab', - '06f7ab60d4914e00b342f098e1ef3e43e501b469', - 'e1005bea192673e54faa0c769d9f0fb7439a09b4', - 'e22d7f6bf2e1e1969dd963d39ad32c756fb0f20e', - 'f4b4b20bb27cbbd1c42eee7b17ce39c5819dc818', - 'd717ed969b6a477499eb3cf823c78dbe654ca709', - '6a8d6a42b4c9f4b72caf0a3b808e50909686a2b7', - 'afaa9bfa5d26ab419f791d5ca97d602ec52a30a5', - 'f553212d9bfbc6e70c0d6a4ac3fe71208bb77ca1', - 'c35f8b79f4a5103603ceaaa14d1df3857a166fa1', - '46447341838d480966926d0b32771e281af1c885', - '4e3330081d4e0a3e109cf1cfb514072a90b999d7', - '4199ef93c3184c29362520ea5292d854a8728494', - 'a0538938974c60cb9249acf8f0588c3df3c0e4b1', - '49cac0b6c1e0d7d1d04865c328c8cbe5c8e0cda2', - '97e3cc6295515f8292f5f57868506c70446594c3', - 'c94e577ef3b0ab48255633c63f0143d9e3eab6f8', - '17d9af726fb6e4a4a8cc4f1becfc11dc9d4db96c', - '4af6ec81ad538e3da23ee88cba65ed8687a72ea3', - '69cb45166d2f4f61069e1f1a975dab3f48bed832', - 'ae227082570f75b614bb29593911ada5137654ad', - '882b9fa44962df0b80d9a25b2553796bd4eba2ff', - 'e1f5c4c7178c34ce561c493b558df7450995a60c', - '56d7272cd497c73502ec5a09bdf69b4c7ecbfd74', - '36a99b302f7348848ec477ce867a8b78656d9c6c', - '48be7a01565289f44c2c9d4ff1436800c52acf75', - '422cb82e01ee0192256a05217102f45f2f74551d', - 'f8744d10460abae3d75e92336b3bb264bb78cc8c', - '5000f246c8c568547c551b11e4b72acd0179e73c', - '52c09522b288766a42900aa73f77216907d16b23', - '61adb59fc097335b45b23fc884a78362b71a3e9b', - 'b81c3c58e5a6c45bc8728024068291a7e5f19c1a', - 'dec394e5401b62024ed71253e900c25a06eb46f9', - 'fbe142d2cb60fb981521cfe72961642d69db8784', - '24a9c4557e0366945c179433fab8434c2c8ee59f', - 'ccc28f607ae11fe79c39c42d88798c19b1388af9', - 'd4d5ca665e56063fdd37d42d2192c64151915454', - '4273fc07c3e8a36726087becdf331f7d63fc7e66', - '5e0380895cc8e34a6a58f238b7fd33b9e0f027fe', - '146908e48a8a9f92f59fae86a7a4ff28c0ce9109', - '2779a449026423bc0f50a10eead2d9f3720b825c', - 'ff9b954908341360ffb39f5eee2857172a29c0e5', - 'b00b6d146c4f4af1d28260a3f28abd15f0105221', - '4ffd03df44741d73877a0848935eea0d6cbfc1e9', - 'c2c5b73aaae2583cc235319e53200e0e15cda438', - 'b7b370faf46f4c682827fbb3967e1ef117b3b0d1', - 'bc6c9ac81e5909408518568729c2c3a147402928', - 'ba1aa77c5bc5fe545b245f2b1883af3dfeeae6c0', - '97a7060a7e28ab1d13cb2f4ca90be624b417168e', - '3df1da69ffcb4e00cf13c65c9f0497a56413e5e9', - 'ebb13b4ed0cb41814839d4084c064e62526b2ec0', - '70b9d50722307f0f45ceed01d421d6a425e95291', - '3f81ca7b73f21ca9b449c147942fbe4fcd31450d', - '86d490939df232966dc6ba363ebc0baaac364701', - '6ba51f3f61025543d66e59c2c1ae3d1b37d5d8d6', - 'b728942e1c9a9046c1a5c8d8a25a644d0db7160c', - '920819252a398c0e3da9b6017b110ee047c1748e', - 'd7c114d803b1365ea3a975c9600fc8cfd9efb9d4', - '792aa82143bb12e97f396cb2a462ad617dbd22bc', - ]; - - Commit _createFakeCommit( - int commitTimestamp, - math.Random random, - String repo, - String commitSha, - String branch, - ) { - final author = random.nextInt(_authors.length); - final message = commitTimestamp % 37 + author; - final messageInc = _messagePrimes[message % _messagePrimes.length]; - return Commit( - author: CommitAuthor( - login: _authors[author], - avatarUrl: _avatars[author], - ), - message: List.generate( - 6, - (int i) => _words[(message + i * messageInc) % _words.length], - ).join(' '), - repository: 'flutter/$repo', - sha: commitSha, - timestamp: commitTimestamp, - branch: branch, - ); - } - - static const Map _repoTaskCount = { - 'flutter/cocoon': 3, - 'flutter/flutter': 100, - 'flutter/engine': 20, - }; - - List _createFakeTasks( - int commitTimestamp, - Commit commit, - math.Random random, - ) { - if (_repoTaskCount.containsKey(commit.repository) == false) { - throw Exception( - 'Add ${commit.repository} to _repoTaskCount in DevCocoonService', - ); - } - return List.generate( - _repoTaskCount[commit.repository]!, - (int i) => _createFakeTask(commitTimestamp, i, random), - ); - } - - static const _statuses = [ - TaskStatus.waitingForBackfill, - TaskStatus.inProgress, - TaskStatus.succeeded, - TaskStatus.failed, - TaskStatus.infraFailure, - TaskStatus.skipped, - TaskStatus.cancelled, - ]; - - static const _minAttempts = { - TaskStatus.waitingForBackfill: 0, - TaskStatus.inProgress: 1, - TaskStatus.succeeded: 1, - TaskStatus.failed: 1, - TaskStatus.infraFailure: 1, - TaskStatus.skipped: 0, - TaskStatus.cancelled: 1, - }; - - static const _maxAttempts = { - TaskStatus.waitingForBackfill: 0, - TaskStatus.inProgress: 2, - TaskStatus.succeeded: 1, - TaskStatus.failed: 2, - TaskStatus.infraFailure: 2, - TaskStatus.skipped: 0, - TaskStatus.cancelled: 1, - }; - - Task _createFakeTask(int commitTimestamp, int index, math.Random random) { - final age = (now.millisecondsSinceEpoch - commitTimestamp) ~/ _commitGap; - assert(age >= 0); - // The [statusesProbability] list is an list of proportional - // weights to give each of the values in _statuses when randomly - // determining the status. So e.g. if one is 150, another 50, and - // the rest 0, then the first has a 75% chance of being picked, - // the second a 25% chance, and the rest a 0% chance. - final statusesProbability = [ - // bigger = more probable - math.max(index % 2, 20 - age * 2), // TaskStatus.waitingForBackfill - math.max(0, 10 - age * 2), // TaskStatus.inProgress - math.min(10 + age * 2, 100), // TaskStatus.succeeded - math.min(1 + age ~/ 3, 30), // TaskStatus.failed - if (index % 15 == 0) // TaskStatus.infraFailure - 5 - else if (index % 25 == 0) - 15 - else - 1, - if (index % 20 == 0) 30, - 1, // TaskStatus.cancelled - ]; - // max is the sum of all the values in statusesProbability. - final max = statusesProbability.fold(0, (int c, int p) => c + p); - // weightedIndex is the random number in the range 0 <= weightedIndex < max. - var weightedIndex = random.nextInt(max); - // statusIndex is the actual index into _statuses that corresponds - // to the randomly selected weightedIndex. So if - // statusesProbability is 10,20,30 and weightedIndex is 15, then - // the statusIndex will be 1 (corresponding to the second entry, - // the one with weight 20, since lists are zero-indexed). - var statusIndex = 0; - while (weightedIndex > statusesProbability[statusIndex]) { - weightedIndex -= statusesProbability[statusIndex]; - statusIndex += 1; - } - // Finally we get the actual status using statusIndex as an index into _statuses. - final status = _statuses[statusIndex]; - final minAttempts = _minAttempts[status]!; - final maxAttempts = _maxAttempts[status]!; - final attempts = - minAttempts + random.nextInt(maxAttempts - minAttempts + 1); - - final buildNumberList = List.generate( - attempts > 1 - ? random.nextBool() - ? attempts - : attempts - 1 - : 1, - (i) => i, - ); - - return Task( - createTimestamp: commitTimestamp + index, - startTimestamp: commitTimestamp + (index * 1000 * 60), - endTimestamp: commitTimestamp + (index * 1000 * 60) + (index * 1000 * 60), - - builderName: 'Linux_android $index', - attempts: attempts, - currentBuildNumber: attempts == buildNumberList.length - ? buildNumberList.last - : null, - buildNumberList: buildNumberList, - isBringup: index == now.millisecondsSinceEpoch % 13, - - status: status, - - // Neither of these are strictly true from a domain perspective. - lastAttemptFailed: random.nextBool() ? attempts > 1 : false, - isFlaky: attempts > 1, - ); - } -} diff --git a/dashboard/lib/service/integration_server_adapter.dart b/dashboard/lib/service/integration_server_adapter.dart new file mode 100644 index 0000000000..168037341a --- /dev/null +++ b/dashboard/lib/service/integration_server_adapter.dart @@ -0,0 +1,168 @@ +// Copyright 2026 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. + +import 'dart:async'; +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:cocoon_common/rpc_model.dart'; +import 'package:cocoon_integration_test/cocoon_integration_test.dart'; +import 'package:cocoon_service/cocoon_service.dart'; +import 'package:http/http.dart' as http; +import 'package:http/testing.dart'; + +import 'appengine_cocoon.dart'; +import 'cocoon.dart'; +import 'data_seeder.dart'; +import 'scenarios.dart'; + +/// Adapter to wrap the [IntegrationServer] and expose it as a [CocoonService]. +/// +/// This adapter intercepts HTTP requests and routes them to the in-memory +/// [IntegrationServer] instance. +class IntegrationServerAdapter extends AppEngineCocoonService { + final DateTime _now; + IntegrationServerAdapter(this._server, {bool seed = true, DateTime? now}) + : _now = now ?? DateTime.utc(2020), + super( + client: MockClient((http.Request request) async { + final fakeRequest = _FakeRequest( + uri: request.url, + method: request.method, + body: request.body, + headers: request.headers, + ); + + await _server.server(fakeRequest); + final fakeResponse = fakeRequest.response; + + return http.Response( + fakeResponse.bodyString, + fakeResponse.statusCode, + headers: fakeResponse.contentType != null + ? { + HttpHeaders.contentTypeHeader: fakeResponse.contentType + .toString(), + } + : {}, + ); + }), + ) { + if (seed) { + DataSeeder(_server).seed(now: _now); + } + } + + final IntegrationServer _server; + + bool _paused = false; + + /// Whether requests to this adapter are paused. + /// + /// When true, [fetchCommitStatuses] will not complete until [paused] is set + /// back to false. + bool get paused => _paused; + set paused(bool value) { + _paused = value; + if (!_paused) { + _pauseCompleter?.complete(); + _pauseCompleter = null; + } + } + + Completer? _pauseCompleter; + + @override + Future>> fetchCommitStatuses({ + CommitStatus? lastCommitStatus, + String? branch, + required String repo, + }) async { + if (_paused) { + _pauseCompleter ??= Completer(); + await _pauseCompleter!.future; + } + return super.fetchCommitStatuses( + lastCommitStatus: lastCommitStatus, + branch: branch, + repo: repo, + ); + } + + @override + void resetScenario(Scenario scenario) { + _server.firestore.reset(); + DataSeeder(_server, scenario: scenario).seed(now: _now); + } +} + +class _FakeRequest implements Request { + _FakeRequest({ + required this.uri, + required this.method, + required this.body, + required Map headers, + }) : _headers = headers.map((k, v) => MapEntry(k.toLowerCase(), v)), + response = _FakeRequestResponse(); + + @override + final Uri uri; + + @override + final String method; + + final String body; + + final Map _headers; + + @override + final _FakeRequestResponse response; + + @override + String? header(String name) => _headers[name.toLowerCase()]; + + @override + Future readBodyAsBytes() async => + Uint8List.fromList(utf8.encode(body)); + + @override + Future readBodyAsString() async => body; + + @override + Future> readBodyAsJson() async => + jsonDecode(body) as Map; +} + +class _FakeRequestResponse implements RequestResponse { + final List _chunks = []; + + @override + int statusCode = HttpStatus.ok; + + @override + MediaType? contentType; + + String get bodyString => utf8.decode(_chunks.expand((x) => x).toList()); + + @override + Future addStream(Stream stream) async { + await for (final chunk in stream) { + _chunks.add(chunk); + } + } + + @override + Future flush() async {} + + @override + Future close() async {} + + @override + Future redirect( + Uri location, { + int status = HttpStatus.movedTemporarily, + }) async { + statusCode = status; + } +} diff --git a/dashboard/lib/service/scenarios.dart b/dashboard/lib/service/scenarios.dart new file mode 100644 index 0000000000..8363884775 --- /dev/null +++ b/dashboard/lib/service/scenarios.dart @@ -0,0 +1,21 @@ +// Copyright 2026 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. + +/// Definitions of data scenarios for development and testing. +enum Scenario { + /// Realistic distribution of task statuses. + realistic, + + /// All tasks succeeded for all commits. + allGreen, + + /// All non-bringup tasks failed for the most recent commit. + redTree, + + /// Many commits with many tasks, to test performance. + highLoad, + + /// No commits found. + empty, +} diff --git a/dashboard/lib/state/build.dart b/dashboard/lib/state/build.dart index 5cf9e04e40..63ac034aa1 100644 --- a/dashboard/lib/state/build.dart +++ b/dashboard/lib/state/build.dart @@ -12,6 +12,7 @@ import 'package:flutter_app_icons/flutter_app_icons.dart'; import '../logic/brooks.dart'; import '../service/cocoon.dart'; import '../service/firebase_auth.dart'; +import '../service/scenarios.dart'; /// State for the Flutter Build Dashboard. class BuildState extends ChangeNotifier { @@ -93,6 +94,18 @@ class BuildState extends ChangeNotifier { static const String errorMessageRefreshGitHubCommits = 'An error occurred refreshing GitHub commits.'; + /// Resets the data scenario for the dashboard. + /// + /// Only effective in debug mode when using fake data. + Future resetScenario(Scenario scenario) async { + cocoonService.resetScenario(scenario); + _moreStatusesExist = true; + _isTreeBuilding = null; + _failingTasks = []; + _statuses = []; + await _fetchStatusUpdates(); + } + /// How often to query the Cocoon backend for the current build state. @visibleForTesting final Duration? refreshRate = const Duration(seconds: 30); diff --git a/dashboard/pubspec.yaml b/dashboard/pubspec.yaml index 6d35c6afb9..48acf7e5d5 100644 --- a/dashboard/pubspec.yaml +++ b/dashboard/pubspec.yaml @@ -17,8 +17,11 @@ dependencies: cached_network_image_platform_interface: ^4.1.1 cocoon_common: path: ../packages/cocoon_common + cocoon_integration_test: + path: ../packages/cocoon_integration_test cocoon_service: ^0.0.0 collection: any # Match Flutter SDK + crypto: ^3.0.7 firebase_auth: ^6.0.0 firebase_core: ^4.4.0 # Rolled by dependabot firebase_crashlytics: 5.0.6 # Rolled by dependabot @@ -29,6 +32,7 @@ dependencies: google_sign_in: ^7.0.0 google_sign_in_platform_interface: ^3.0.0 google_sign_in_web: ^1.0.0 + googleapis: ^14.0.0 http: 1.6.0 # Rolled by dependabot intl: ^0.20.2 json_annotation: ^4.9.0 @@ -42,8 +46,7 @@ dependencies: dev_dependencies: build_runner: ^2.4.15 # Rolled by dependabot - cocoon_integration_test: - path: ../packages/cocoon_integration_test + cocoon_server_test: ^0.0.0 dart_flutter_team_lints: 3.5.2 flutter_test: sdk: flutter diff --git a/dashboard/test/build_dashboard_page_test.dart b/dashboard/test/build_dashboard_page_test.dart index 77cdc6b7fb..3f18570bd7 100644 --- a/dashboard/test/build_dashboard_page_test.dart +++ b/dashboard/test/build_dashboard_page_test.dart @@ -6,11 +6,12 @@ import 'dart:async'; import 'package:cocoon_common/rpc_model.dart'; import 'package:cocoon_common/task_status.dart'; +import 'package:cocoon_integration_test/cocoon_integration_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_app_icons/flutter_app_icons_platform_interface.dart'; import 'package:flutter_dashboard/service/cocoon.dart'; -import 'package:flutter_dashboard/service/dev_cocoon.dart'; import 'package:flutter_dashboard/service/firebase_auth.dart'; +import 'package:flutter_dashboard/service/integration_server_adapter.dart'; import 'package:flutter_dashboard/state/build.dart'; import 'package:flutter_dashboard/views/build_dashboard_page.dart'; import 'package:flutter_dashboard/widgets/commit_box.dart'; @@ -552,10 +553,9 @@ void main() { testWidgets('TaskGridContainer with default Settings property sheet', ( WidgetTester tester, ) async { - configureView(tester.view); await precacheTaskIcons(tester); final buildState = BuildState( - cocoonService: DevelopmentCocoonService(DateTime.utc(2020)), + cocoonService: IntegrationServerAdapter(IntegrationServer()), authService: fakeAuthService, ); void listener1() {} @@ -593,7 +593,7 @@ void main() { configureView(tester.view); await precacheTaskIcons(tester); final buildState = BuildState( - cocoonService: DevelopmentCocoonService(DateTime.utc(2020)), + cocoonService: IntegrationServerAdapter(IntegrationServer()), authService: fakeAuthService, ); void listener1() {} diff --git a/dashboard/test/goldens/build_dashboard.defaultPropertySheet.dark.png b/dashboard/test/goldens/build_dashboard.defaultPropertySheet.dark.png index 4508f09f222ca329d61f17bb7e54a0c3312f2f76..55dd7cf1a6ab724a4077f7391e90819b25a73443 100644 GIT binary patch literal 31470 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¥9riYH1 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 diff --git a/dashboard/test/goldens/build_dashboard.defaultPropertySheet.png b/dashboard/test/goldens/build_dashboard.defaultPropertySheet.png index c7f9e9756a545c8e5488fea0a168dead1f34dec2..1aeef59f394100ddea09684b1b9ee9492106b177 100644 GIT binary patch literal 24915 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 RlUpnYF+O8<8hy$s@;^*u6v_Yq literal 43242 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 d.name!.contains('tree_status_change')) + .toList(); + expect(changes, isNotEmpty); + }); + + test('DataSeeder seeds suppressed tests', () async { + final server = IntegrationServer(); + final seeder = DataSeeder(server); + seeder.seed(); + + final firestore = server.firestore; + final suppressed = firestore.documents + .where((d) => d.name!.contains('suppressed_tests')) + .toList(); + expect(suppressed, isNotEmpty); + }); +} diff --git a/dashboard/test/service/dev_cocoon_test.dart b/dashboard/test/service/dev_cocoon_test.dart deleted file mode 100644 index 232e652bed..0000000000 --- a/dashboard/test/service/dev_cocoon_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2019 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. - -import 'package:flutter_dashboard/service/dev_cocoon.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group('DevelopmentCocoonService', () { - late DevelopmentCocoonService service; - - setUp(() { - service = DevelopmentCocoonService(DateTime.now()); - }); - - test('fetchMergeQueueHooks returns empty list', () async { - final response = await service.fetchMergeQueueHooks(idToken: 'token'); - expect(response.error, isNull); - expect(response.data, isEmpty); - }); - - test('replayGitHubWebhook returns success', () async { - final response = await service.replayGitHubWebhook( - idToken: 'token', - id: '1', - ); - expect(response.error, isNull); - }); - }); -} diff --git a/dashboard/test/service/integration_server_adapter_test.dart b/dashboard/test/service/integration_server_adapter_test.dart new file mode 100644 index 0000000000..9f0fedbe2f --- /dev/null +++ b/dashboard/test/service/integration_server_adapter_test.dart @@ -0,0 +1,56 @@ +// Copyright 2026 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. + +import 'package:cocoon_common/task_status.dart'; +import 'package:cocoon_integration_test/cocoon_integration_test.dart'; +import 'package:cocoon_server_test/test_logging.dart'; +import 'package:flutter_dashboard/service/data_seeder.dart'; +import 'package:flutter_dashboard/service/integration_server_adapter.dart'; +import 'package:flutter_dashboard/service/scenarios.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + useTestLoggerPerTest(); + test('IntegrationServerAdapter fetches seeded data', () async { + final server = IntegrationServer(); + final adapter = IntegrationServerAdapter(server, seed: true); + final response = await adapter.fetchCommitStatuses(repo: 'flutter'); + + expect(response.error, isNull); + expect(response.data, isNotNull); + expect(response.data!.length, 25); + + final firstCommitStatus = response.data!.first; + expect(firstCommitStatus.commit.repository, 'flutter/flutter'); + expect(firstCommitStatus.tasks.length, 100); + }); + + test('IntegrationServerAdapter allGreen scenario', () async { + final server = IntegrationServer(); + final adapter = IntegrationServerAdapter(server, seed: false); + DataSeeder(server, scenario: Scenario.allGreen).seed(); + + final response = await adapter.fetchCommitStatuses(repo: 'flutter'); + final tasks = response.data!.first.tasks; + expect(tasks.every((t) => t.status == TaskStatus.succeeded), true); + }); + + test('IntegrationServerAdapter redTree scenario', () async { + final server = IntegrationServer(); + final adapter = IntegrationServerAdapter(server, seed: false); + DataSeeder(server, scenario: Scenario.redTree).seed(); + + final response = await adapter.fetchCommitStatuses(repo: 'flutter'); + final latestCommitTasks = response.data!.first.tasks; + // In redTree, the newest commit has all failed tasks + expect(latestCommitTasks.every((t) => t.status == TaskStatus.failed), true); + + // Older commits should have realistic distribution + final secondCommitTasks = response.data![1].tasks; + expect( + secondCommitTasks.any((t) => t.status == TaskStatus.succeeded), + true, + ); + }); +} diff --git a/dashboard/test/utils/fake_build.dart b/dashboard/test/utils/fake_build.dart index 6247e42587..ff23b82d65 100644 --- a/dashboard/test/utils/fake_build.dart +++ b/dashboard/test/utils/fake_build.dart @@ -9,6 +9,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_dashboard/logic/brooks.dart'; import 'package:flutter_dashboard/service/cocoon.dart'; import 'package:flutter_dashboard/service/firebase_auth.dart'; +import 'package:flutter_dashboard/service/scenarios.dart'; import 'package:flutter_dashboard/state/build.dart'; import 'package:flutter_dashboard/widgets/task_overlay.dart'; @@ -45,6 +46,9 @@ class FakeBuildState extends ChangeNotifier implements BuildState { @override Future refreshGitHubCommits() async => false; + @override + Future resetScenario(Scenario scenario) async {} + @override Future rerunTask(Task task, Commit commit) async { if (!rerunTaskResult) { diff --git a/dashboard/test/widgets/goldens/commit_box_test.idle.png b/dashboard/test/widgets/goldens/commit_box_test.idle.png index b1c2287b7d15269730936d942aef4ced05c08d1f..3d3aae8ffd0e13356be8a3875663861a93f427ae 100644 GIT binary patch delta 39 tcmaEIhw;fB#tAA?EX7WqAsj$Z!;#X#z`(#*9OUlAun{#42l2% delta 39 tcmaEIhw;fB#tAA?jKx9jP7LeL$-HD>U|=bB@(kesf*OvLj*WI|c>o&}42l2% diff --git a/dashboard/test/widgets/goldens/commit_box_test.open.png b/dashboard/test/widgets/goldens/commit_box_test.open.png index 28df7746645afb17972eae0ea1d98f538cf7b84b..0a4d94e8894095f658b9e70db503d2f5a8f9aab9 100644 GIT binary patch delta 39 tcmX@!%5=PyX@ZIrORyFd delta 39 tcmX@!%5=PyX@ZIrV{wqX6T`Z5GA|hz7+8v(JVQ8upoSx*W20SX69D?y3>yFd diff --git a/dashboard/test/widgets/goldens/sign_in_button.not_authenticated.png b/dashboard/test/widgets/goldens/sign_in_button.not_authenticated.png index 6b734c8df36e519a6c2a0e45b84b859eee234dae..7f350ddef0962cd330c4243872a510a1d0747e88 100644 GIT binary patch delta 39 tcmZqN!q~Wlae|5zORSNC5M}3;X~8 diff --git a/dashboard/test/widgets/goldens/task_grid_test.dev.mouse_scroll_x.png b/dashboard/test/widgets/goldens/task_grid_test.dev.mouse_scroll_x.png index 3973f8179d9165ec2fa16f4ae4d7868b70fc6bb4..30e03fd944283d26717d4a6eea095c8e4a5a9b66 100644 GIT binary patch literal 26388 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 Y- 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 literal 22532 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 z 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 jtyOa^9@kPLbGLlHofV)nB} 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 literal 29253 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 z zN6e7K2bRb)ZJ{LK|8fi_gHIx4?Jg9CV`F0IC{Hz2z8U{wwpcD~LOF&ob?(Ab5yGod zZp`5U>3Rk)7l(bhr2xTNLpfnHut~eMd%qQhYEo7-HtH@eE<)Nuw@QKB10%dm&*}|Z zS6x=3QEOI$8>N60Q#R#Jc_!aMCu2ow>xW6oxodCq*Z(9ar(zr z-pF%_Uz&P_0*P#2C`lhmU6x=e8qA?Ss7(dcI0?rE{q&O>sZ>@7^T6?dJ#gQm-)a-1 z0=me<$7yVYxbW$;(#Xa7#TOveKoWSE8mj-vwZGezau$!@B9Q6KW0(N+lfk11(j;Gtv_J+RlVjjP&vZ%Kfca_DmaT7Ph3 zYGb_vz7_?CDdH^thbI0AX5{C3P zSQDbU_}Ra=R_v)8u@=|(obWa#{V5GQ zVA(AIQPEP(2)>QpVn}zlK}oo~vO1nvpxrRDb(*?)j|5i>C+0LCaP`cHc%E}!!NlJt z1x7{j>7*qqyAALr(%DaVs3V>7-;KRFRI^nom8P4f$uffAMY7r(PB4z&SGI_g-6#Cm zYv;JmNQ!)d1pwjwpQe0u&FqR-B2-;hv1dS^fKmOwn1+Zpc)c$sx~V3QGv?Tu6uIAJ za4_){8{3>{$D<7U0Nzb*#$@~TViOX35f zor^tj_$TO$)aE?%H^W?I>B#$4hZHXhb6fV>7%%-i&-;hM)Gh`i&tGpouE?;LagpDU z_+S;Q)&xh!WTeC$5MnW#Zw4QAO$n!%@g9|uszPVtl`d3hH#cO+M3r%svdiWTq9dkDKwsp$%Z!Mb-$OSkDnT~aRK+iM2C&n2obmWB3lRtgBLG0 zYPK`|#pa{5H1Wx(Zo;=NPJX0Rq|Kz|_`>*#TK)A3=?SYKpC zWG9#2AVERtT5J^yfLQ1s>CM?D#qQoK3JoVOLPX3wni8+0Q0Y8bSe z)DCP;%Zkl`Mt4DcIyLEIi?k7DrC>7lww=|v@Wqa3kgq5K@ob3_g@L-;uk%p*17j02 z#>N%zkcp$+wrg+VM~CcjjSkOjVuPpGcBQqRXjQgtd0|R*gRze8Rez3~B42dL6fjcc zf~**naRmxmnYKOS=K|sP#!m`*E_#)@_cM!2 zn#Y;7?m-xz14Z3o&p7tU+8JELVuoM->Yb^UD*MGqe>HHwqv*5R((qnF$ZN_mIZ{W9 zCVv1CfItQx&1N%$eNN(p4JMnt8b*t>xZtRekPt6n#F4*`y8R@>>)BaB=Cz2Sc{P{i z98{!M(%bJ(xD>|02=BI2A)o|bkyivQG#^{H@OnEH^EPG-Rl*)^`

MU8xiXWo`8 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 K{hYgo&;AEr6OcCm diff --git a/dashboard/test/widgets/goldens/task_grid_test.dev.scroll_x.dark.png b/dashboard/test/widgets/goldens/task_grid_test.dev.scroll_x.dark.png index 84c46173ab30fad879f064ea632bcefd9b0b1569..b30c5fd417bcbf7154393e028a606da3d7086a0c 100644 GIT binary patch literal 26616 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%0D;$BRF;_~3sFpXxn^fYSf19fnXKy;Fnzq@0S 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 literal 22928 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

17vY%)u#v4 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 diff --git a/dashboard/test/widgets/goldens/task_grid_test.dev.scroll_x.png b/dashboard/test/widgets/goldens/task_grid_test.dev.scroll_x.png index 3973f8179d9165ec2fa16f4ae4d7868b70fc6bb4..30e03fd944283d26717d4a6eea095c8e4a5a9b66 100644 GIT binary patch literal 26388 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 Y- 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 literal 22532 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 DP}B@~ literal 27819 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 N`Npm5*>ZRN{|^!O$gBVW diff --git a/dashboard/test/widgets/goldens/task_grid_test.dev.scroll_y.png b/dashboard/test/widgets/goldens/task_grid_test.dev.scroll_y.png index 59822b8216ad68779b4020e8e7e23c695fbed7da..8df3110076dfa354abf1eada96391386ceb26461 100644 GIT binary patch literal 33476 zcmbSz1z1#D+xA8jj&J~v3J6H3gtT;rph%;1Bi-GNfk-zT?8-C3P{d1>e7se0KYDo$*rdoZTzl~5R`&Z_;TwG0q=FLNy#@lgWw1$}?U8!{ z55{6Qy}AQ$2xO%hHpKP5 z0iO}kBrG`L7fafw=K@RloHX|v9kRGL9b-IX%OxTL@IK82Sjx&4_Tf>mbb2y9uXi1+4%LL=2M-#0fZMj6k-{KTYVW^}shLKiOl7Pu1El+(AG2w(P=h&LO=O zDKmXU@@fT6{TAEq%7sAI*Ve!a+}ekH^~OY)aqM~4%il=qIifZN zs0sE6yz^_4A;EHd)52OY58Rg?CWWDe+zxU~eY4(t+zZVZ0mvVo6+ETT)?Y${Mvt^k z^9xZ`5QE!ox#mlUEc{~z8TtIIMzU7<_Ma##zb0$9G6)c6A zJ_%V$M+sFB;$96DEF`S$$N6oZ=HcXvEyuZH1MRN|L_GnUy@ihAI@cpK51Ep(SzRm! z#*O`bl@f!r`-qe?bLxs4-}!2`-DAS)Wms14Z^K>-b=^bx<(D>|fu=)kH_}bZL5e#9 zM5cg_gBW|rAy;lG?MIK(zS2AeTo!THGdI}ASS%k;oiPl%!I~})2Gr`$j8VIv(AIfu zwd|5iy-HGa1*YemUT|0P2NdM(mfl^*{unt-kVW&6{OiDeR(Zk`Z6T51xmJ!KF&ya~ zMs~pPnd4BGj{*w0m;(hR*_?p!_KBvZL&#C|mXN~fckIU95sX;%6>kby_`US!>=$rD# zzI(JW`sW$1v(L7hwI)1@l|p+n4R;?Vyn)(#yBus!+? zedugI$pxin1zAYXdf$oO5Yvw?wS(N-^F*aDC(pe%l zwM(>86Z7Ufdmq-y+Lz%`K~l866TxgN1@?*1dtNwS3TiV&#j?I)(hU0DQK=K^4`g(W z!Uwjke_VOlgxbGnMOASr{#L9iwm8DZQXJIJXN@W!o&Zt&-6vO1uEJ87d1_#kuYz+VN2;+sk5cj z380<#suM?b_}|*sQ!Eu9%8WM;3K^z%6G!U^Y^#i&C>R`X-JLM>mXjhz)-F<$PhLOV z-@fA;#H4-aDWN>`%djDjTwyAl@|?w~hODgf%2>z3hcqF18$~H=`5rHqI&<#E9z2iP zjqZww?7EA?v+r!`zY*G8jOF>tZe*g^wb)_o(dU^TP1<~mdP_{zgkeI(d=ponTh>^Q zG)g}4^{EIg!YG_UO~G7p?4?|Z>t|PsX?|dAE5AgM(n>GU%|_Czd$|F`QSbs>8Ef5M zI)h^Z$YnpIu#zzuxoP~%3yu%s1vs;vWk~cMwcXW+KZu?%jwoND>%b*XS z(U9n(F7m)YzO9va&qI8RW_~j3J1Zb)crB>zD(ph?bZCeZ1ipcPbNh7qD zi(w$tNd2mPBP8)mm5!kgAMY%@b&6kT_U&}RpayHTD1IP=Y)iN7bAI2oI(+`2 znjBcx{4rJi!aU(fIev(QI#0cNR~y?&;^udeV`XNu%&uRGo@*oiCDhfo&}M-g-SIHJcqr z-O*872M@phi5_OmEiD;&t-d!tV}#$})eiWIx%KK;Yb#U|qeKUXFt^snBegwN!H@SM zK#zqRk$9w@6C6rOPn;tr(VEWcd*bzlx99jMr)*tddXR@!U}avRnr>+vcFo4uv@P27 zr1As&8?G&&Gm?+h74Nil%0p@(uAoXh29LG9P{}k}A*gZKR4_O{6;*xuh7Lb=SHT-! zJ{|wtJ@0K*a@X4D{Ysh#G;CCrib+fr>gi$d#wgvNTYaoE zgF-M?Ey^5?7~PIEg!f^PB7k_jSi7>l`u#H!fr&!xcO*{V-@G5^U}ZfxcAc)M&)JGf z@vE=v8RTVYDT7ByQ4ia9xlRj8Q6**Jcs|XD<+0O~u;})l{i#vv$^~sX8$>c#q20_E zHSEEodBL8o7ajnI_tGSTck}d(?k+i_;k@aVt|udFEZR+vW2`VL`VqG}SqLu_C*lsVcc2O3}c8r3NHhy}I0Myu_Oac4I%C80iHor}!2o$}{f5S31+lm*zn@i^EbrZnVFy=sfCMc5RCDt5Bh01Y z>08R%!_ru}jExVL#@FRssW;!g36#X{j-6F?7nxL!9gtYY?|s3=L>pxa&LfK7=TZ14 zWft{7jKYgu6xa>UN4#g0Gdjy(OWi$&sUk;HEE$d{@Edf|Tgo=V8tVbWPfXxFf`id1ZhZ^3U(%r%1*~QM%vGZYGWyio+!dwjTiG^d(9vLN>*)q8(qH&AP4#1;nC#2&!3;it%Xv?43u&o5rQrp4oYNaKv2>4Mubi`KeH>$tS6C= zCvUW$_|Uk_@r~)B@%S*IZM8b%9@lAWQR#S1<5gD%F^=q6V;zb~ZlioGTGx|OAgg=P z49OU``}+Q7RS9n2HWE!Wv&p&^PLy2qffWk0ydO>y|6PJVkn0KXqjP_+%^-p}gi)c6 z&e#xe-)5J?H^=%++QEVfyXB^?ofyZYnE4h+!LK#;Q z4x@Z?MzZKi2e+!IU{i3QT(ATKm=p(!0eC+4XPicr(Ac)Le1`374))Z0-ypUA(b`~O zPRPJqxOEj$S+e1z=VK*KF+VR5>dG6&PE?GV+xr?JQwHKtZqj+w-V$`2OvJLlA)V&Y z`~~HN%@Fc5XLk~Wwd!TP)<~!3Rru9NJd`$ji2s~Vi2CnN!NG8K<=p5#{eU7^USwpk zLrJQTSn(m7=ApAHyB!F&yv*?27oR^D7su6n8KW5A?g^yIqKsb z_(^klQkxdNkziESdfFrRsb?M!csT#(NOf~(cxFV&I8Cu?5sdKfjP*8H`{KwOgsGR; zUQ)KE3FFH;liv%RkjbinKYgB<2SO|=C)uPjh)Wb?i)wl#-E#Y-lA7aydChor*>3&j z`2G+-WY0SAYSOuDS=F|^aEIeLQrNMit=&-JxdLNR-S=7ScMC3ejg_boXqjH}m&3R_ zmU0bTtL$T)W$^oxL%B0Oh;Zz>sAKwF;R0f*YN>LYpJGzS|Kyk9lkOpk_04js3~E9b z&4J3h2xpn%{ho;IDe7``n?ybb`6(z)r@C{bPlZ zzbzLv2bl|1k+w2;yvbT$E22E-U@e&@PCZwG(nC@B1J1zbus7fatxL@9T&O|6eJ&++ z*aoeAl)Sq)Mi&h(Gfr1FZ}N&rU@`1f8Al#7OLn-Y zCd!Hr5}6&m3zx}O&yhi*HI7Qr4?kUNALk~PAo=PBpp!PGS)w`>OSy_iAQdXlusV6W zsV9t&&YQjKnU-w38Pf>et`!M067Y=C&7!n(EyZRth{g4uBk$6^-nY2lBu4)4pRc}# zPm)x9(J?HBiiX7(fkYgz70+SIe8ebCLb5++4eA<3ah>Xm_ouu^>tJ4-Jw1stWD=!3pGIG2sa|s(hiDP8nI~weSOOGPZJq z#@A!(c|uwx#o?}u&oV{C4i#OBgk4fP<%@1TK>m(82Bn=+Ey3}n{*mfxa;9X}-Tk1> zPbHq|1gqz7Wan8NS{~t=WG856*YNe+2Y)X(T=gAD9ar>e&2&5WDeekjWsiv#36N)q ziG5dnaBgVUgM(+XTM)pM$QxJgxIIn1TFOXGJ*K3tJ~{WC!7Bp|pBmhJghr&Ivp}rm z=1bmDem|V=Ao+{s`K$gsOYw|x<^*alJL}rEWo7q0|2=u868T3KG=tAm{N*`w1wm9_ zDona9kcL{ozS@^=U|+s#nJ;Z+cF`oDZUr!_>N|>-4~u#mAFxOd3_>!~IdL^{_F zh?3J5F=63a6${l%K;_*$A3wO)ySex-L8V6C-$>EH=I5tZzcujQGGL&#dNupgE0?Aj zp9-*;TWU#;g6D%EI8(R+X93-77o{@wjuk4^gZ^H^AAU6^a!l`m#Jt6nfucl+@f74DJ1Lm!$dQtzFzg!Qa!xB_#tmkqyXJTOocTdHR! z?vMBDqqM8muumr6fh2e?&ojtHD!zb>B5|3~ zT^EBq4Ogfei$Iv-OR_F+12=`)8K9O`k z#^i=hCO=a9glNUd-xR1U)C^YQ(@!FN2;S#Anv*yW^Pdx3AW$an#@g20#dgJi!YGrh zQsIJ+<7IeN;X8N%VK*~&?#Yk}Ig89U@DG$Yt#p)~q2mv)W48m(Ey7vpyy_*s5IW_g zW}vQMTKQEuWeUk<9G*C9Xe6`-1-h?$p6o5EmKaENL%`!5ztTsU^KGf*0|U*wBuS=+ z1j_24{fOWm&b&}J8jHsYvxV0Z_*=V`HEqls!53t!F_7oS>%RvSuLcx<+(Y8I5eEU=OpH1?0l6rZ5tFdE%*Wcytw=q5IB? z0ya`qjGWib(Ar$xf}m6b1U+^bq91e-G7P?KfH7FbJFmfZZQQ&tfEH4zy8C01Ip5#j ztx`-1!n{x#6SFfPe^MI#3pK;=D)?6B5-aGg0xkthGOjPXUmEXO1I8{ z{40Q^$?`M6LjO(=!b@<09V{RIG`Q#z3Yp~yN`sQrUDk$a%WKp=EDPhye&JUTS~-Bw zY6G`j6@+GcRz1Tc8xGi5jTBeS_(5Y)B#EGrCE8w&X&vew*6*0={DVp_mbuxONqPAl)W6A2*G27u&)_QElEBG7obE16fpZJF+jZNJMqXu}vf! zR)f>1|93ov-pF!Q1#^M1_0<3ckjq;0JT`>PB~y*SNY$0Qjhz~jTh`s{F^gT3vs9OL z-5Q-iWM_YInvvMD?r}P!rxxUbhvVgljDTAH;4{uVIEY!L4uiLL>5}Mi8ggJu*neCt zSEW!dpeSdvv$Jr+K+HSrARuoy8#1VvTvLmIrdP5;%Sae$#rm82&8STq2oH24+jqcP66POAhT8iQ-SP_oqa=$ zA8Zn@nXF4!n=7eRuuoTLxF(J-tMGq>fD_u?zvebvBYo`#?GNZw&TNYp+tL6d!wZr7 zSIP<*9}tjVgiqB9toE7u3WV9Nl%Wf6>> zIL7?{p(dQJ6=2Noa&fcG&Jrftp2#1_@yRx`DPo8@R>30R7kwv=CLT5(Y`?P5?iGykix6oA$T_)lUB)D!+>wWLRU+*}_1 zB;u$;sMPY?KHb0sOA~w@rirfS8c4iT1U*a+sW-@@B+8mh)cDvZ+M{R^A#a(A@1M$% zpT$h~3@Q2uiW>mMS>sDtl1JrYI0Pv+uCNcCCr1jotRjZzk|hIY=CbpxxUk;_Q^yIQ z=@UMuNFb;eiis_lonvm~Qnl1&5|dig!K-YLW}_>w%K(ZXxkUn>>XjRqTlEgcSUF!? zg@PLbwcV6mj9(~oOSEX1Sr^loFewdui4=DVo^F>-KNw^1%;QxejX{*jH!1yUBfC%x zA6!vzq#ah~&ob=3Ln(>JhjM$_TMxj_eNIqIQu7_qbBWmsQOHaED$i3i!1;);E=vSS zUJ;^?_57EhXy!B4-rTjK{?SS(kzQdOyRb9S#>MrpI1bH5tVhD(4%lr9&SI0z= zovz1J1D~5ZDo9zCopH`YXA5TN2@DMbr4vFa&yI>>PXzM&y}qO_zwi4&MX?pF*<#CN zV*vnjXVH4mCna9fk#Vc(n|y|lnti4enz~+g=;;|W_^Xj9Bv-?2~RhJy+z>Ei#rRTNMJH$N0fV+lLtvlo}gqW+0u; zcUo(J5!g`U&k54jS6+aJhviHjcnhDsP(<@P8QXhDQEo1~me)#uElaXQd%9}0Yk6zY@Uk%VIuie~ zTiW5NpYiUz2EtM{>W}or;T~Tt{=x%v5w@+Kg6R*($>3vjG-K^A}{fxr=L zHUU{6GAmd@f^5LpZw8RWys;9)3|yY-6#hIIgV7HPXwCLGP}jH&)DfzhpkRlsd*w>d z#_7F3bbIao;H3xl?G4xlsTV7pQ*?&~RLI*&@->4G3B4v?rbSb1N^)df-$*QKHv_pH zJujq8mcai9wKM)hNJI607Z(d1b{gNW1nYo^P|seq!esI)lcYuTtPs04SjoYmLX z_849(ML(1|?XGbmDBq-Vcxy-y z1**@r&fLdO4yta=2DBJNhi*yN`0U@KHVMR=E^V)!*H^Ek-!sdrj&_$Z5r}k~hshxY zrqD77JT&%>gTQV*ySuAT^>}r-#RPOXFYw5G1f*|{C^*3D6Y*A&xRwuxtIy@X_YjVB zZc^=GyVT6eMQjZi*pXPHSkkU*eNDCaWk0;fw<2pM-Y(9}9^}+KIJRZD4^-zWSaIqc zSXaSO{Cr`v=t8&jNO?J~>RYborWlXZ13t?%>nuB+)T1wo`-X}!Q`Gvt@vno46&w%W zF)L}N^`$a)1~jOr=c=bWjmALK)bxVyN0}e{f2o;{ni_0~^5udKC4)6qT7?QLuvaNZ zOP=O__?0yEDFrHp*k&8I-QMdO)#Yg=Ll{K!Z z-6c=J>@q68=v&Gnn^NX7#BL1jHVHr7r)U>*fG|9Vk9~hg(8Hrjpbl=BTKan~bjct- z>EUGYQm(3N&9?|oS6RgqlM9fyNRv$>*WxjjEys|B726svqi z4Y38cYmG4WgtJSX?502BHaGHr|9pM+WQvjg%*bNcn+w8=E5k$XOmA6Cmq>P8MSfek z4SiBM5tSip(ief+MLT!(E<@<@h(2qQE720S2I=0auiKn0A89Xy?^V+ArFNEK*5jj6 zh%D(k<*L2l1}qlEZ+u-}SSx%(FF^&j?qH*>CyY>EfpPWu;wqM{6fWj(NRLWL7=hQQ z6x5ke-l5=&i|BBK1k-kAKq#w-$RPPtK_=nmFmCXQom^hbtEo-nCFJFcd%@lvR`ikA z;@4_r2xn!7Ri+fQ(nK?{5!$VumDew!$JQPzwce9Sl$xk<+>WptkB*4gpk-jN*nNmk zZv5Y%3?bS724$QFqO`ljCxJY@7ZrmWx}Mq?F>|@1tTy3UK=?uFnkhF$p3Ecc;!nss zU`Gb|<0URx507mKtw^VQfc#3ARwy?QuCsC77t@jUM57+j`m?FVxohs){Q}05n~&}? ztejPkf~=2S|H?y!ZaRg9@XTq~S>d`GlO*mS&#+K8P_f^)bsIw8Q3Q#X&Ed$3j##a9 zu47Kakbsjwchi;xl5av$Kk+WLKk+Vh*G>KxT@0s@_^NqF{|7F^ukV7Xc~aTuOR^xB>DhRKGpe`I&;@{0k?U?cCGP z!AdOv=bNh*N_C@r)Tm*nvz@Ej-*)>%tzc}gw{F^dW|;gX*>GdLOeyAM|B>+x?|mVb zdgMLT!P|Q&I~x9a!4;3;o&K6>AMUkI+QcC5qBL(k(y*W5EaPxo0bK*Nmqd&JNE8DX z-|A7Bi|s@87>E z6&)tZfP3^~)*VGL8T3B3$bwF4HEkc0Sx1qsk?ATjE_8aV*k~Hh+t5exuiZ`bkW*~k zDiE1bPmDwwfUZVQD;=Fo9|h(O#4sgwb&j4vkN?7-|9Bfn%!fVW>S&lGk4RWSD2hCqA$Ei$A! z#ebbbKNoC;jQko0L)QOQHm83?xd} z>qZD?I4Su!n;J%e_@=AwDLCRG)5>;H8R!Mz)8^?6E zokf;i?RhQ-nX?yw>5fIEB(@04Ad5dsapm=|Se$i)UZIoe+0*-^hbX7G>lAhby1DMA z`f0gSbXhOM%-jQ&+!Ld)rWO^RRMLZ!)Gs1}ruH*)9%m?&_U_biv7z&W@}Gc-rNHp# zhGAkD2u!BuudX_{EcD)BZ%!j@3s%{XnX6)y&fwBEUumWMpFBF>3K70XWvdfBL(t&_ zyNUdA3-emb8qlc(iJk{iOYkrHqojQ3yqcX}bauSgqRnMj+slVYm%>ZV`|tj~pia2{d~^)a$#JT0(x z6xir1dnJL#wu=fFQt&U`$6flJo%()02`9B>&tdJ_V;>qGSFf9o@zLE07t4s{E(L`y znmU)vPD=dsFyAC-$m~1TOuf(KS!c>V(j;a|T{WI^a%a|T+poQ~$keWaZo2wAXum<4 z7fR!@3tnogqzNr)t3*=WoyvSQ%%2TQS1=H<--FnaQH}A{+?`#BXNz?#Wv&F^H?JB& z^q&=>&VMRGJjgBj|D*`1G$g1cbeyj*<*oN${DegwCMBvv{=^@!_KeNe4uYPH6&y=0 z4N_3vHTR^vbWvW~RzX-YQZHj_YRVETqpz#zV4NRzVb(;i`Xlo8%V7lUs8xz)qKQvmyL#_$Z{uu3t<==x^7P@zGgDGsXdKsY;hlmN1#x4)?)SjJSel6Zg_weLrSclg#E=DA>y5V7?bhQ4vdRSqtn>Ku7f}JL2;G^C7`rBv_K(a{+Ic1v zxas4*p{**bt5CMJh*Ewiryv6nNU1Z@!Kngk+~0q_QKtn#5+_Ip5NHPSbGr?7WpvAQ zRN9nl+m&(aX#1~75qMaz>7g|}Dc}{Sj^MX{3L=msRb$KWe#Supw|EeNc*xa!onC!P zN0#wxlI9oCX~U-7l=%t2Bngk<7vrxSBF36ib_(5(>%MPO(XuY8VksZSf3@BE=v=%( zA)qx|%- zE+x{oJrtm_qikEQ?b|7uM$Pbt3F#Fi(vVk7I}*@R+dongzz}}GSK^RYXL9a#M~wDy z$l?{Ekb*(8WtavOjsoReZGHHa9UtetOeWA$aC)jAd-4}6jwEfwUpov0H0>RV^voic zUK=X4GSPucw~gYZSd%n5Z%D*$)`yD28}btI;ll?K&m{N`zFl^e@Qd=&)Cd`)0ca

Q5LFCCi@=Z7XvF01KN<#L)9Pk^+}CYMyWR==W=Mbr0H0f+rxyQ#jwVK^IiV z`?{Ju!Ye~fRz=dK)DsoFw|6(z-n6qvBPZDO1OO%%#*ec6L352SlKQx|QnL{LrdnZO z5ar+or~VJajQ&D(HFqE}5#m+SVpp_jPb?dgK+Ycq8XFe+7=IrcQ14tmd7myFPM}IR z;li8c2Ku1>C?E$Z=_n#4oub%FNe8shtU)B&MW}m<_44bclcFaBLdCT4a7NbVRrvvc zqYCD}mi<>NjqX9uVtoq<6Uzza_|8F`TL%Sn^wLywIX}WpXEO3Tf49-7^G-L6Br(L; zSr3?Ze}bHZNn{tD<;u_$Y5WmnxTe5uBm?pbJPnCL)}3zgG&Baw%LZ-!2*t;3U?{e5 zkcQ|!Oz4-)=#$G(V^pqD1lJ)HfU~n`d(iG1p%?3oQO^)}l-?Di-EHzPaWf=1VcYN> zPMxT{`sHP~Dg6#h23dfo4MXEQMQG9Zu#=Nql@i&Yv;On))QM5|?XHM}vuAqTCmqQr5jsb)*A0&f9W`ObxRD|&708mTvi~(o z6pDsXRPg1ODRYHsIph~7Oq1WTd;(NM&e>hKEw0GW0k*!qK|m`H&w1w~9u{4f(o$sFklM45BN+PD_1mw=dLF#FH2!$iX&nVgro zvby9bjfsmLaiLx+_MY&eOrR~ZW4qKs|)WGvpIni;7-^cm=-`X^km89#ASNcthr zEUW*B(^%t{mKMJAX%MCy(XrPA*j2Qhy~ykTT7w^RWptU6sV$J2nNH3x-%6cuD6==6 zcb_N&AqqIL|CLd3i3-L)9NQnNkMH??O}y<$ap0QWjaeK^n>F>WUb@SumjgczbQ^;f z&VR8RhiCr7_2O&uV=K9wDj$*F7Mkc!hv3pWC@BgdGFGQaP+sLz>A5h797~Xm5)`od z{}Ek0m7bNg1!aRCo*3E!S)&1b{Z=goIYkCJ-i_|%Jo@4n*j?6RY?Cj z%in_90r~25nt`ExS)I} z%}4sfU&5O;{5GMN=)f4tx6W9?8g7|bgH*NN{7;%!W|m^^+z|E`DK6AHrD-Ov-BD3;0jk(Rt6%Q;^KizyG#CZ^GOEPNCp1M z!888dP#HJhrDo#GT&Fi;@V}!OyoV8l6i~I*7K_!ulJyVBnhG-0CQsD*F;AJM`g{>t zq=aE5G8tY-vJ9M|rnZjb!a{N4jP)16 zM;48&MLX52x}&c?E{;%s`}-HNzKl$2KHA#{3E7WTO6oaX$ToaoTf+ zZV4N;Dj_|9nzwZC)|-ZI?BYGwa_-L=0v0%X1pq6Ne+4)@8kc%a?J`y*77_c(8*~!U zOm|^n;ot_DKb$FU&K&hKfATJAC3SoChZ^=3_Z1E{%@dbyk{wx{qj-6)96CYeWX2w} z8pX^I6Q#UJbf5HS-S#+Ty)+EFIDY8G|J^VwER)PtAu(I%h_a7FI602Hzycju$sL@! zZLeo`aj8h-@Lq@D6wT@?0N?=FNGzMFj)$VPa26;z zt{gBKwC;udVQtBtp#6)Z7=x?=S;fSkk&PzN4_itIsN|e9s=Kwe<(RP9kxO^8Md3x#f6=dd)c>)N201FTC22Z+T zQh1^Lb2DNykkPY9zS$W%CfKtaFq=zH0PL|oxm@pG;>d55-FrTc8WK(=6SX;2!?E+C z>dIU4m0utU^qq7T35?G~*{FRpII3fm8#uBE>xC7gb3vVzcnd8-17QD9zU>jg=;9-|7n{huj z|2ti>LM^*rIRstQXuQNOF@FXbQ^xGsNQ>&FMfXTP#-6_w=NqUZ$zQCHK<3Pyk2OFt z(g_cTZ|u(`s9n!+bFMW|-Kp~5#{o`-{|%o> zX{8q$OmN)~j}jMekR2g|gaxktaVPOo&OwqVY^qL25BL9zSA+uWuTI8=0C#UGLIqka-a z4?r&PuY|yaDQ+GwWfeJHrDd_f0K2ZSD|^W8S`|ef+<_${dB*1fo(I|Z2Cg#56OucYN(*7o-8Bnr}9@sI4}u*4g*k4rpw zD!9YXMnE%d$^}TOm?F;2FOb&Sd3WNy)z!ZujN90z zhN$XgMl#CF*;7vB6%{E<>nc%^Y7N;Fu^E)Cq6u{6NDWfi6;nlrV!bX3TZaci6Lc{m z9YYfR_-W}J+1+fvdqzws>`eDN?T$4&c=b|ka%>&tdm9FIT15#TjTwhkX;qh6dz-tZ zibW4A5)E!T!;pMH4 zku;1YxI~2NS2s?g=m=0Vq2foTHQo1$$lArGg^JTirX*R1IaiAWUZpkd1pK#>%~R0A ziOiC^gsp4d+=5(03V+(p{<4BhlU-BM$sZcN-@RIki{?EjQ*ypEFmn6|YYF7zn z6_yQ;@7!eLcRWuBrm}G%RyqyA^&l!EGIgv*R+egP^ zAFzlH8c}h`hw77)liOzY|GLY^Q2*P5SyNVZ?BkS0S}pCGSS<$Ng7tR%=*5DOA7}D1Jc3~h4HU_ zBqkX^kpCs+?K(db>apv0#Fc(G_ z(7ATs>r?S}xR9s8pRQD%$3OTEaHwI1<@h!?e*`(0b7bmvo%8W);H}pJzMkR6=S%kC z9|0y*tFCuzC5c<0!w${j-$Huvr8^QIyj`D08^wpSAlZyZe`cV+eX+% z1Q~b5Kt359WrK$&?Oq9@JCRQf6j`Kc9qeAXt8Qw1N74#yY?ndeWmkyQc;>)#Dc>UO zkHa^h&dM(Q$T2u^?i=46^ArM;dj4gSeghNPB^N+tooFpE@YT z>@|`cUbBN~QT(o^oLd&tzu@zaHclK_E+WlPxLOVnEEAYj?|;m#szT+G*B$qCmBxi5 z6%CLHI^e?&>elw{MEjB6Qu0SX(GwTh3J1^`*QjV(-WLluNs z@6z8xZm^<~Hd!fVmQmR_Kh*&T&TX!@Ovk=>X&a6D2ls%?xcQgxxyrDK`qVWnV2mS! znGnP5sP1=GYpA~rUb#lj49BULgeM#Hwd&{BiYJR{MG$yaNvc#y?iR8nRg|}raM4Zd z;6Hb)qp!*Eq*uFK`TsEzb(h<_M2|jCPF~#?$rm(%8_i*zcLHXN^hwPJ^mDQUSEU&h z8c8oL8cj`!H2*q@Pki2^k%ieg07b>E7FzU?QsF`s@hVJHQ4;9~-Iikpw6>h&=0Tmc zdP9}^zE!Qw&h5x8POs!WI@z*(0>Mi&ZUi#h8MuviL}7>guoKo{humoan~|J?dK1V6 zkE0;+>)#(t@+sA@38S+kj#3HCqIpnI4^6pHNYXMy?)6g>Pb%6F+#n9%NI4nmQG3B} z9U|klaEJ8wM^gNpPy-&0&O5O}zj|~^7?|u^*NVMTT0Q;#fK5fJT(&AyoT5X#N94*9 zy8kbhP%OH^I*kG0)=YIn%glJsq!v+KyCn!K?bHkfn}vopDc96LJfUV~SkP$G`Z85Y zW3#Z`uDn-0ji6q#1nMP>jKj$68G$%F5=Gh1V-xPr4Wov&KGunvn`M=VXbyD0QCmW`sQC)}<{KfCVH*(XnUeebb zOtiG?%*)-XD&Qk)2!xf_kIp<|_K(z5w3hRV`s)?;EsUnN*WR`Td2BgsSuxu(%UjL= zqG4y7*h`v_vZ1XKmKv3k$9>XIy*Z;?@Gg#UXjoDP4KOx;9TfldA=ij>B=tS&a31+E zJ)+L6TT3MjAb+(8Wh^Q~r8qkxB0(_GTEwM1UC2CanDSOexL{M} zn>WSV8itgT@tK03*Bch!HVOCKc;^$#q}#^Bvc2}CjK^Vo@#0)$r*THQN};(5zHG3% zzTc2;?WmqAs5sJPimc-Pi{;Gkt-oP-kPNsoy609XZOE-#Yr!7^f?-eI`LtKr=3lFj zjAmx3sn>iWoBldA-ZVdaeEhDPex8s*j-Cwbp?DqeJ^dqovZb1ZWpqF0O?FbPd#?jM zD(qwG2ECOrCOt+f1E`evjq16KZAO<;y1WEMUe7Ib5Xj`aJ<)|tN=#{sJoX~zXKEb4JpA8fsfRpC>(F(^{0feny}afN4O&iFwwB$IHjqTwY)+(Af&vsRoX0&LZ2>_k0i^s6!k-VcwqzSTRG83LMi{$d zD!wN%pC`49@C0FAus)JHjxMU+oheXkh#%cHnPj9A9`xXPr4*$xdGeMJ5S-BoxaJs5 zqq{pl;Ps{`nDog@g5c94JU&|OBR=wcQr`MEG=E#v%5>D-z-%>Dn&msB6Y%Qw+67b3eE|>V(z%ZDXF7pZhdHrUp1IMj zZdGKf+32lVX~_ztxm=%==>S1ln{;=HH(Y7HVD``(*QG8JOL?PamkM!IK+D@)5F?gV zOC;L)(~;j>%AV*_x~QkUc`PpsyQ^K{Rh~+q69lAKp0S-bp_6VL7_#U(h>0|Zh7+%Q zAhhZ1-5yxlaaOM5b?pV}vw7(qkx0(T=&0a4lB_r9IS z=fT`(8V?&7nMqFHa1#d891J@stzQQO?6}ZZdkiH}&oDXoN=v~_)Mss8iXq{mjD02e57QRb12xDBI#QYTcAmf<*Xb#0I zxcWZI&Fl6xsoMMtBo>Hub}@*^{t`0W4Gu=C>zqz`W=?`^Y;BwCVes_=Q%EA8wiZiD zgM--Xp%I(6o)h?keAtL(gRJi#wirnY^7DsBi)LkdRIBZ>6!TPZVP$WLL>{{;M@f^; z_bLN@_@A1D7w+QOBV1}57{MtS^Ps9&s!byY7dY)ZGR7fS|0j=6mBDn6g6M_g_DE18%laWMrkFdVrDA2)=lQLizc_kQb8 za#DD~Tl8WkY+H(nqzw%?rhRf~0MW5k(*&|Im56RVT6}&so!p$_VcBi}?Kjt*<4+7) zVzHwD;2Fb&?}|48Zfu4{D2=qUgts8|E1ofd6iTc(L;*_oi%?@M_(@tomk5xg-+JDj zo%#_AAeoKJC%^HIxK871)m!uAX$BM^1Y^8X`=-~>oqUw6Bibroijmc*Pg}CM;Zbr- zZ5HMSTf#G4$l}KCOi!hCCK~P0u>(#NlUXkg!`z(jc?Tw=6ulr?lj{AvU*me_jj#E! zAt-&GN#LX)YbzCP$-d5!1bC;u8=^o1}9hJK1@JA_k6=KJZfv!}VbYZV;cbs838V!q(> zm~Lk;_r^< zIle=K**M< zJ-_aW_`1D`zMT-@c$z`Vma|k;XAzl_=Rcz;A)I5n3wpwvNJa~Ss63ZcYlEoHrOJ0R z!J~~b+N6z!0Y!1q6S8e4{;6hSo3x3!J@?q>-Zt6~rc=s3+bL7J zxaU@`BlD1neDxh0I@=QgwL4p+aWCU5JYHqs_FN^a<6mwpMNr8$LI)J413Jw=?F451l4Kpt6il2y8no zdFF2&kLg-c$~IRy2pod$V9Sj0I9<;~ZBRhhbbajumrA+QhOK6W|q`G!;P!Mel*cn#r=!#|AU_bOx> zNF3;zlz-zz1Hu$WWRl~J@@|X*wRO+#)Kc^EO~s8iajCQ5^9RG z(f83;ID&&(Nw}a^@Eybb&nV4^BMQ4ys2r_IGKxn-KP>5*}x5E(z&6&xs{&VoUwzp%u2=^D`YsHQ^kX)GpSOqmUy z-^+fh%Tazbl2|r0(jt;|O#DQIFqx%d*gORKVBSdLajH^rK)GgJU!~K`QzSagqFX~- zz*LHkaX_YkBaa9UJ=A=Ujr?T6T&ID2_o_FYZw*W!dEEZnrGizTd`V(`Cjw_D_^S6k zVNmusfgVS9xw2fGUhtL3o#RI57ELuwxE?`!R_yAe_oc#J$`a!R&eP=hS{NZKP?v1O ze6cl`F!OWr37A;9i?UV%1>*cmVsBU-$*_`PM}0$P2Fsc+-M9L^=9pF^9|Nr2XBB{I*>X68a6OwF^l_X@Z>~W0jdC*iLqYy$Ova?sm-aC7b zY{x#1J^uGWz3T1v|MkEA*X6p(@wh$rc%IMa`}uzE?;ZD9vN21+fKa@4^h6+CccorB zfsm3hI`Z$HY*pU&8Ciknj8o$zw0a1f0UZPmLf)6S8f1|Sl9}lZs=~@8N0OFjY6-KX z)Tk`q!Kk*f&_}ek7uHaP943=DNv~+`us*yHBDzUZbB=d309~nl&GL5Duz8jJ+?HxT z6~jt6|Ckc-#B^lX$JD0X(8_)*e_T~fSSpXZ?JF$Xd_*O|xaK4|k6cb0&`Og{u0l?E z)el{;o_m*A%-Z^~zCI{cd>L1Ua{^m9C-Y2j6^!U7*15d4qjHFIu9Ovc)!)W9td}n$ zOKfs|U#47h&HW?=ifG{kifD2(e>)b9((Y#QX=e_ee=}BXJoYkfmiya@q3fX=yNHoz zFLqbg3f|pjU>RQwxzoX2$UPUC;=V=o-x%oS5XK|RD!y_l=q5^9fx?vv45b*I(q1IgTrmM`{NEo&$S zB28D!NWHll6-izpt=ojgWo2T{=y{6|1_&jOO-?X4Y^@e`TsjS}Pu6aKvZ;r>I$nn_ zr7Upe4l8l;#{GtpCn7wpg&&LGwfu!*C+y?YUU7^Tq3U2bLv)J1ck6~esD;Cq1fxMb zF&7qux47!rhIl%qg8F)BdR8xk<~2TvSB2jOQe}iz=clKqGj+7TYIj<+s>LRlLJEUq~eqR)?wk3U1qVmh@uBLrMZ z3++pCZv-EwaL~Hb>cXIx@2S1pcbTlOdAp*hy}cde8MorOq=VVo6BH9m3zZ&}9W@}S zYnjqZ>+h~U4yBFzT#a%5!BO=R2>cHZ{I)Gm==~&%1(v)tX73f`$lT@JHpd5YA?)IM z^NeSyQMq0gl*0{TMdDWd?bWyQ2EqWD^&d{5O_4s-sf}Y;>Pn54*sj=3RCuO2taxg% z9Ey-Gn|tL8s2&d#8;rYrfTcfIc-btH|fT)>_5YPZlzo_5s0s{bip+bbloK%c^=T&r(GfJ zLZ|6@bmQV4Lo@klXO^jvS~B|KEfBdWxhZ^Vdr$Bnm$0!sTVnthx__~550eNzs-1Ht$S5a|18*U0Qq-=ghd$$A-) zOhGkw#_=vsfvo^?Su>cB{_F|C;{G5rG=YCwA!Pn@p~rITN1Szw?<9CW+%j8ibG)pV zl1ga(vr}ZR*t<`Bst&fR43Xu$bFIFic8(dF+RG=*Oz)zHTiJax2v%H{ESI`2z!J5_uxsp7+A$?xG6ihF3M>9*rNR;Vb9R`u0s>c;;TV`gDC@6j9q8s z8;S}^ch_Dr#H`qNPRqFzJd)k+Lpn~<9Uepa8FR;?0%5p-AYuCE00${LUduCw>ssOF z)?h+E^S5xL)osvVWW;ZXF}!bN_Tl!l3YgIXJ zsyPh)X9Jc?LLXDUjZ8ka>MO(8s9yA`)wA96G^<1uF^cS*pa=-uk5wE?(THt^r(V(^ zp|yeU%(!hJX4PGqv+_?u_whrLx?k}5!T^43ha_5~kvv`8W}<=n7-G?Vo1kE4xdVpM zI-d1Z*KO#=C)VZlSCK^p8$Q&tZk+y8z*FJD=6MeiF?5yp<;{#Q4SJ^C& z32Mi`q8ECjcBeuxckB&sEw$3;X{XNV8~PUYk^QpBc`5VBmj{oQ=W|(+qMZ6KbcqxJ zY8uscYT~WCP7l|UiPDx=IH}vVbq0ds1f6y>RzI9a*K9^2S3RB7Bb<%KJmq{}bUc(H z-q@}eLJgt5QZEUtZG3%Ob(19%L!1SBmw2}!XtJu!?1j_uKL0~Yun;!Gq%y&*Y212oLz5cDw7Box-?O`Bf3G{ zc&^RTk1mVL!L`Hr%WOHr<{c>Sm#oF;RriTm(ieBybEdNh?2XIIFVu#;NsLm~dVhob zM6<{6HoX*Ul^Uk|;Tf*N?HAMVSBW}tIkLuBXIk`@P6$g%0OxQR#|Z3oOqa!w@iNIdOgnj(37()BgX|4wdhLU39`Is5f zRx~|gQF7vl>iK|Z)+j%%W0dBs>c$#hQlWrqdfYo>hqv@Jouie_q_vwG%RZm0m3uW~ zbHc?ku{qe?{g7q{^S<1)Ry=&31L}K~2K%wA=w2chFyTS`Iv8NljPng!?VO#qwc1-t z$9uO6kjer!GI1!oJ?8A~OdB0hU8o`ZgL>1)=QO>P?pQVz0HplByO`e$Dlt7hT^Ys1 z%4)E4vv@*B|7!~Dl?V23Ey&bM2s4|B6+KMvROcDYPJf-x|NJiR<@m~5DD{urb+;)< zXtAm@O+|}`S^5|S!5fFjK z4&d5(tPYio?kiR4(x3)Y5P|1eCT$Kfg5^NZhzv5Jh(!D%_R8hyJQE0nnz-IyL4|Ij zC!PcUA_$yr1(=PncR!|P$y}EuH1E9}ZaO!6%SFua&ND)bb5ULvjjij^Hg5zjO9!-B zXDTuX@qXNP;ttuKL`wki z!~G*}i|&EZyyy1Qn^)Xv^)_wE7HO9i?bm0;$MNYqTwQfM{MY+a zXVdvKpW|ayyHTd;9NjG3R->oe2EAg2vACRu@jyg1a>H4*`dM@R4f{%t8W&$ zkiR{;nYG;>sAL~l=TK|yU0Z1U%!MRVS=xlDYi+5C<(# zRFgkzgHq-i-bn*GX^SF>w*t^b1XXOVMBV*9RSfB$i6s+5$EC+PNYGkVmpp@<-r_-q zNR3Kw8o2ICgzs4N=i8}e8q3`q0mZd>w|PcNs6Rz7eiE@XcgSiS2;k;X?qoxzw+_;$ zBMATDp&FRa-v=tfjt4nSu~|=3b9qrP%W2tZv)pN50te#Q5aQ(gM;oLEHR8k1vGWcq}XJ47%wQc7UH0+n)&w<_ z%PV5sl>;6>MrHCzK}Cus@$(pdY8xB~|NTmhcL8bJ9FAWcg85E_U%5Wc{$qxCfxJ^r@ppI+IT2z%dyf2?t% z%Sq328wImmHP=o5G*3YPfWo~zkJTvG^zRlSnPz6K`?~}^2l&sR&;B!rSK{t>bGgxz zFfM%11}?RMg{9yR{r($84@j!M(m7IueSgevVr9#m+5_2g{u(-G-49s5FSy(DQVB!1TuOO9oDR9B*?Im-a zp1`ikUTXKwc0MKiUXg_LPKR%Y7UdZrPCCF#_Qgqftt($UST(HR26!X3Lg0(MZi@=t zmC-2`DDz0SwxrOimHac7y#Yv56JsA2{!OA6_jhhqu1u-s7VIaj$3Eh8V|msTkNU7u zW2;i5fCWAtgwC`18HVr#brgs(pM3jEnN49bOIb6KMb-85_3p9|f2{QA((p)43d^53IBX_D)?GAS5kVwzOD0&_(?&hz>*Biza^A^Htd|ig z3CxR`Na?I9fCAsE_6bN(FE|Yp!E~N|c)n-5Z8N34?E7NNCtsABTz#7!oHTP>ij{4Y z*W4hsiHpb$B?1yN0fgoV(OIGi=6f0R8|+-_y3p4NfF?K3gCiOUw0(EpynLKW?c;Pi z^T%W7s3Tj#+sU8tU^aEORZP6mE1WJ2H~-zHQco3C*Z;_)37nwT!&i08KfzJ=_qCA?ae zEDkT9H`EQ+S;uZeq0sT) zD9hJ~O``+)KunBv#z6*~J+S`(HsMgRB)wS2S?j{-j;ZGgU*aCTT4TR!F+aAo2n$c? zWO8#7Pwh|;up!3W6c+GD{a)?1R@L;T3H@Hd8YPm=#0;2aWNmG&R&rcs z=GFKdSqIF6zpz}y!%|leH$A#^1)h;VaD5{?>5?kb;5)?0s6a|@TNQa9{|+NbOD#=9 z$Aj{bK}Ylz@){;1<2HLfN_fi^HbU?6tX}u>ubixx^$&!a2A{B0H>4KOOszE;i!FP+ zf#qm1eo(5D>K5Ult_|5r(xBcqyIUbw!sITH3O@p=Fcg2ohdoxgNd{d}e2(X-m~~1x zv%(emOAeptYOX{>4R-SCVUJRi z6hD~;&b)}#iYJ$(|5vj~K+-KV&qHd8!|1xOl!I%dzr$eV4!JJILY3!OK&SB31-mX*m_~eRMX8P^%Du=pRT`F>(YKMkwaXa4Mel#AEH?h5Y05a zy9>Pklj8N35#-LF{MwSFFi`0e63mJtnx}1iT{RSfx<>9?e!4YU-jdhDn6Rw(`{cx?h1>zCweec8DPn@hLvRj#_X{Y#nR{3$6a ze+tEtzQ4-kiO>vL05(3c#VI4#z0cD{(?=LxbGGdzUEyy+J68Wf4e;d8{^nODgmG{5 zvzfdl$@A>p$(L!#5FE7*|Ah}YuxfqJadH6-*ibUXtktU16kneB*9M24rI5c>?;ldO z)>E8RX3GiLOJ2UgCNFVKUi~_{4@7hMG<=p=@&YS21MAEm#&gH%o6(ScE~G^-4W4W= zXYbyl6`+qp&$P^iz28h=n`9?Hbk&e|5&r?qV`m<;c%(chwm9|y-iP|6HgDn>+zw^^ znr!flLSxR1%bM!Am*86n>YubQ+5D2j0@+~u^~WE5utJY^jgN0$pP{UyL+}xo4>cKG z!p!#(VnJrT4BgW=Om%i*&a9C4ot(Sz1QQ^>;olc)jh7Bi@EGooyrHC_an5}PZ*v4n zw2c4j5`RQ>I9aJCwB%T_hwSRNe?oRgn)b9pTIuZB*Jc=+tSj#FM4Lnwlh%Yv)uuj{ zHF(ZnQ#CBm*8W}RFAK+T|Js2PVogdvc2j%ZtH8A_U3UFbA{UqwFH6D|Vo7^A36wXZ8jg|dG2 zjqg5V zf;vIBFTu1gIdp||hEW>$o(o9cOccqoteKPPu6hqC{MX3qw(H^1N-4~77hDVMt;;~) z1ND-mYkfI(bW{a8)KbY>Yh@&KKgOQG=H1Sa4;}k;nOso&t_u`Km!{14y-c!AjHywo z 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 delta 37 rcmZn_ZWW%OBE?u7bAO diff --git a/dashboard/test/widgets/goldens/task_grid_test.withoutL.png b/dashboard/test/widgets/goldens/task_grid_test.withoutL.png index a49f1cb341a7268f01535ceb69722085c7320b50..dd49c249a93a76d0faa7423f056cab83de5d2e12 100644 GIT binary patch delta 37 rcmX>pa8h7`iWEz+lV=DA5Y%v_bTBY5Fct^7J29*~C-ZWn9XAI6zAg$m delta 37 rcmX>pa8h7`iWFmUkh>GZx^prw85kH?ik&<|IDnvrBc)@b9XAI6)qn~) diff --git a/dashboard/test/widgets/goldens/task_overlay_test.flaky_overlay_closed.png b/dashboard/test/widgets/goldens/task_overlay_test.flaky_overlay_closed.png index 28fc41a9ea7dd1953da4f4f78bc583754ef5cf74..05784bc4faacfbe262808850614a1d149335a36e 100644 GIT binary patch delta 39 tcmexxgz>`>#tAA?EX7WqAsj$Z!;#X#z`(#*9OUlAu`>#tAA?jKx9jP7LeL$-HD>U|=bB@(kesf*OvLj*WIkNdOnj3~~Sf diff --git a/dashboard/test/widgets/goldens/task_overlay_test.flaky_overlay_open.png b/dashboard/test/widgets/goldens/task_overlay_test.flaky_overlay_open.png index 65867770311f0384c8b93b336b7f68f873cbc8eb..e9cf636249c03ebcc136851827e8bd8128d1785d 100644 GIT binary patch delta 39 tcmey`$@I08X@ZIrORn761w346gtH diff --git a/dashboard/test/widgets/goldens/task_overlay_test.nondevicelab_closed.png b/dashboard/test/widgets/goldens/task_overlay_test.nondevicelab_closed.png index f362f56bb1de6dcffdceef8dd0bea485921afb4a..b77ccf9f22877111f807b2be7070be9a22a3f49a 100644 GIT binary patch delta 39 tcmaENgz?=G#tAA?EX7WqAsj$Z!;#X#z`(#*9OUlAuU|=bB@(kesf*OvLj*WH(NdOlz3~T@Z diff --git a/dashboard/test/widgets/goldens/task_overlay_test.nondevicelab_open.png b/dashboard/test/widgets/goldens/task_overlay_test.nondevicelab_open.png index b91347fddeb42f8019dc359758f2fb30d598106d..1263504083586d896aa428ebb5aa89054bcd1ed4 100644 GIT binary patch delta 39 tcmbRGmT~G^#tAA?EX7WqAsj$Z!;#X#z`(#*9OUlAuU|=bB@(kesf*OvLj*WKVWdI2>3`YO} diff --git a/dashboard/test/widgets/goldens/task_overlay_test.normal_overlay_closed.png b/dashboard/test/widgets/goldens/task_overlay_test.normal_overlay_closed.png index 52f84b7eeb7f9c874384ab67bd4079a9f6f54ccd..873412df1305739ec97810ee3b9d4758f7786674 100644 GIT binary patch delta 39 tcmX?eiSf)O#tAA?EX7WqAsj$Z!;#X#z`(#*9OUlAuU|=bB@(kesf*OvLj*WJFnE(*|3@HEr diff --git a/dashboard/test/widgets/goldens/task_overlay_test.normal_overlay_open.png b/dashboard/test/widgets/goldens/task_overlay_test.normal_overlay_open.png index 194a90827e5d2a473e7c61fd8c12777e60f393b1..b3baf7969e6816f45442b1452b46c51d3ae75fe0 100644 GIT binary patch delta 39 tcmcaIh3U!^rU@!iEX7WqAsj$Z!;#X#z`(#*9OUlAu$F73+Mm< delta 39 tcmcaIh3U!^rU@!ijKx9jP7LeL$-HD>U|=bB@(kesf*OvLj*WI=T>t_f3+Mm< diff --git a/dashboard/test/widgets/task_grid_test.dart b/dashboard/test/widgets/task_grid_test.dart index bb3b7b0a43..bef8a61713 100644 --- a/dashboard/test/widgets/task_grid_test.dart +++ b/dashboard/test/widgets/task_grid_test.dart @@ -6,12 +6,13 @@ import 'dart:typed_data'; import 'package:cocoon_common/rpc_model.dart'; import 'package:cocoon_common/task_status.dart'; +import 'package:cocoon_integration_test/cocoon_integration_test.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_app_icons/flutter_app_icons_platform_interface.dart'; import 'package:flutter_dashboard/logic/task_grid_filter.dart'; -import 'package:flutter_dashboard/service/dev_cocoon.dart'; +import 'package:flutter_dashboard/service/integration_server_adapter.dart'; import 'package:flutter_dashboard/state/build.dart'; import 'package:flutter_dashboard/widgets/commit_box.dart'; import 'package:flutter_dashboard/widgets/lattice.dart'; @@ -51,11 +52,11 @@ void main() { }, ); - testWidgets('TaskGridContainer with DevelopmentCocoonService', ( + testWidgets('TaskGridContainer with IntegrationServerAdapter', ( WidgetTester tester, ) async { await precacheTaskIcons(tester); - final service = DevelopmentCocoonService(DateTime.utc(2020)); + final service = IntegrationServerAdapter(IntegrationServer()); final buildState = BuildState( cocoonService: service, authService: MockFirebaseAuthService(), @@ -122,7 +123,7 @@ void main() { WidgetTester tester, ) async { await precacheTaskIcons(tester); - final service = DevelopmentCocoonService(DateTime.utc(2020)); + final service = IntegrationServerAdapter(IntegrationServer()); final buildState = BuildState( cocoonService: service, authService: MockFirebaseAuthService(), @@ -208,11 +209,11 @@ void main() { buildState.dispose(); }); - testWidgets('TaskGridContainer with DevelopmentCocoonService - dark', ( + testWidgets('TaskGridContainer with IntegrationServerAdapter - dark', ( WidgetTester tester, ) async { await precacheTaskIcons(tester); - final service = DevelopmentCocoonService(DateTime.utc(2020)); + final service = IntegrationServerAdapter(IntegrationServer()); final buildState = BuildState( cocoonService: service, authService: MockFirebaseAuthService(), @@ -282,7 +283,7 @@ void main() { int cols, ) async { final buildState = BuildState( - cocoonService: DevelopmentCocoonService(DateTime.utc(2020)), + cocoonService: IntegrationServerAdapter(IntegrationServer()), authService: MockFirebaseAuthService(), ); void listener1() {} @@ -334,7 +335,7 @@ void main() { await testGrid( tester, TaskGridFilter()..authorFilter = RegExp('yegor'), - 8, + 4, 100, ); await testGrid( @@ -346,8 +347,8 @@ void main() { await testGrid( tester, TaskGridFilter() - ..hashFilter = RegExp('2d22b5e85f986f3fa2cf1bfaf085905c2182c270'), - 4, + ..hashFilter = RegExp('fb75b2b671c7702b549a80a420144097f4fab5a9'), + 2, // codefu: these are magic numbers and this test is bad. 100, ); }); diff --git a/packages/cocoon_integration_test/investigation_report.md b/packages/cocoon_integration_test/investigation_report.md new file mode 100644 index 0000000000..2596955af1 --- /dev/null +++ b/packages/cocoon_integration_test/investigation_report.md @@ -0,0 +1,45 @@ +# Investigation Report: FakeHttpRequest Type Mismatch + +## Objective +Investigate reported type mismatch errors in `packages/cocoon_integration_test/lib/src/fakes/fake_http.dart`, specifically concerning `FakeHttpRequest`, `FakeInbound`, and `HttpRequest` interfaces regarding `Stream` vs `Stream>`. + +## Findings + +1. **`HttpRequest` Interface:** + - Verified via `packages/cocoon_integration_test/test_http_request_type.dart` and documentation. + - `HttpRequest` from `dart:io` implements `Stream`. + - Since `Stream` is covariant, `Stream` is a subtype of `Stream>`. + +2. **`FakeInbound` Definition:** + - File: `packages/cocoon_integration_test/lib/src/fakes/fake_http.dart` + - Definition: `abstract class FakeInbound extends FakeTransport implements Stream` + - This correctly aligns with `HttpRequest`'s requirement of `Stream`. + +3. **Method Overrides in `FakeInbound`:** + - `FakeInbound` overrides `Stream` methods using `Uint8List` types. + - Example: `StreamSubscription listen(void Function(Uint8List event)? onData, ...)` + - This is a valid implementation of `Stream`. + +4. **`FakeHttpRequest` Definition:** + - Definition: `class FakeHttpRequest extends FakeInbound implements HttpRequest` + - Since `FakeInbound` implements `Stream` and `HttpRequest` implements `Stream`, there is no type mismatch. + +5. **Static Analysis:** + - Ran `dart analyze packages/cocoon_integration_test/lib/src/fakes/fake_http.dart`. + - Result: `No issues found!`. + - Ran `dart analyze .` in `packages/cocoon_integration_test`. + - Result: `No issues found!`. + +## Conclusion +The current codebase appears to be correct and free of the reported type mismatch errors. `FakeInbound` correctly implements `Stream`, matching `dart:io`'s `HttpRequest` definition. + +The reported errors might have stemmed from: +- An older version of `FakeInbound` that implemented `Stream>`. +- A misunderstanding of the error message. +- A different environment where `dart:io` definitions differ (unlikely for standard SDK). + +## Recommendation +If errors persist, please ensure: +1. You are using the latest version of the file. +2. You are running `dart analyze` or `flutter test` on the correct package. +3. The SDK version matches `^3.10.8` as specified in `pubspec.yaml`. diff --git a/packages/cocoon_integration_test/lib/src/fakes/fake_config.dart b/packages/cocoon_integration_test/lib/src/fakes/fake_config.dart index c3dca0682f..391f2b5446 100644 --- a/packages/cocoon_integration_test/lib/src/fakes/fake_config.dart +++ b/packages/cocoon_integration_test/lib/src/fakes/fake_config.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:cocoon_service/cocoon_service.dart'; -import 'package:cocoon_service/src/service/flags/dynamic_config.dart'; import 'package:cocoon_service/src/service/github_service.dart'; import 'package:cocoon_service/src/service/luci_build_service/cipd_version.dart'; import 'package:github/github.dart' as gh; @@ -53,8 +52,7 @@ class FakeConfig implements Config { this.issueAndPRLimitValue, this.githubRequestDelayValue, DynamicConfig? dynamicConfig, - }) : dynamicConfig = - dynamicConfig ?? DynamicConfig.fromJson({}); + }) : dynamicConfig = dynamicConfig ?? DynamicConfig.fromLocalFileSystem(); gh.GitHub? githubClient; GraphQLClient? githubGraphQLClient; @@ -235,10 +233,13 @@ class FakeConfig implements Config { CipdVersion get defaultRecipeBundleRef => const CipdVersion(branch: 'main'); @override - List get releaseBranches => releaseBranchesValue!; + List get releaseBranches => + releaseBranchesValue ?? const ['beta', 'stable']; @override - String get releaseCandidateBranchPath => releaseCandidateBranchPathValue!; + String get releaseCandidateBranchPath => + releaseCandidateBranchPathValue ?? + 'bin/internal/release-candidate-branch.version'; @override Future> get releaseAccounts async => [ diff --git a/packages/cocoon_integration_test/lib/src/fakes/fake_dashboard_authentication.dart b/packages/cocoon_integration_test/lib/src/fakes/fake_dashboard_authentication.dart index 38d8721273..cf44b4f91c 100644 --- a/packages/cocoon_integration_test/lib/src/fakes/fake_dashboard_authentication.dart +++ b/packages/cocoon_integration_test/lib/src/fakes/fake_dashboard_authentication.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/src/request_handling/exceptions.dart'; @@ -18,7 +16,7 @@ class FakeDashboardAuthentication implements DashboardAuthentication { FakeClientContext clientContext; @override - Future authenticate(HttpRequest request) async { + Future authenticate(Request request) async { if (authenticated) { return FakeAuthenticatedContext(clientContext: clientContext); } else { diff --git a/packages/cocoon_integration_test/lib/src/fakes/fake_firestore_service.dart b/packages/cocoon_integration_test/lib/src/fakes/fake_firestore_service.dart index fd241fc3e3..bcd6c4a1a2 100644 --- a/packages/cocoon_integration_test/lib/src/fakes/fake_firestore_service.dart +++ b/packages/cocoon_integration_test/lib/src/fakes/fake_firestore_service.dart @@ -26,6 +26,14 @@ abstract base class _FakeInMemoryFirestoreService Iterable get documents => _documents.values; final _documents = {}; + void reset() { + _documents.clear(); + _transactions.clear(); + _failOnWriteDocument.clear(); + _failOnWriteCollection.clear(); + rollbacks.clear(); + } + @protected String get expectedProjectId => Config.flutterGcpProjectId; @@ -499,7 +507,11 @@ abstract base class _FakeInMemoryFirestoreService Transaction? transaction, }) async { var results = documents.where((document) { - final collection = p.basename(p.dirname(document.name!)); + // Manual parsing of the collection ID from the document name. + // Expected format: projects/.../databases/.../documents// + final parts = document.name!.split('/'); + if (parts.length < 2) return false; + final collection = parts[parts.length - 2]; return collectionId == collection; }); diff --git a/packages/cocoon_integration_test/lib/src/fakes/fake_http.dart b/packages/cocoon_integration_test/lib/src/fakes/fake_http.dart index f822f16b42..fc3f7fc395 100644 --- a/packages/cocoon_integration_test/lib/src/fakes/fake_http.dart +++ b/packages/cocoon_integration_test/lib/src/fakes/fake_http.dart @@ -61,7 +61,7 @@ abstract class FakeTransport { } // TODO(tvolkert): `implements Stream` once HttpClientResponse does the same -abstract class FakeInbound extends FakeTransport { +abstract class FakeInbound extends FakeTransport implements Stream { FakeInbound(String? body) : _body = body == null ? _Body.empty() : _Body.utf8(body); @@ -122,6 +122,7 @@ abstract class FakeInbound extends FakeTransport { _body = _Body.rawBytes(value); } + @override StreamSubscription listen( void Function(Uint8List event)? onData, { Function? onError, @@ -137,11 +138,13 @@ abstract class FakeInbound extends FakeTransport { ); } + @override Future any(bool Function(Uint8List element) test) { _isStreamExposed = true; return _body.stream.any(test); } + @override Stream asBroadcastStream({ void Function(StreamSubscription subscription)? onListen, void Function(StreamSubscription subscription)? onCancel, @@ -153,26 +156,31 @@ abstract class FakeInbound extends FakeTransport { ); } + @override Stream asyncExpand(Stream? Function(Uint8List event) convert) { _isStreamExposed = true; return _body.stream.asyncExpand(convert); } + @override Stream asyncMap(FutureOr Function(Uint8List event) convert) { _isStreamExposed = true; return _body.stream.asyncMap(convert); } + @override Stream cast() { _isStreamExposed = true; return _body.stream.cast(); } + @override Future contains(Object? needle) { _isStreamExposed = true; return _body.stream.contains(needle); } + @override Stream distinct([ bool Function(Uint8List previous, Uint8List next)? equals, ]) { @@ -180,42 +188,46 @@ abstract class FakeInbound extends FakeTransport { return _body.stream.distinct(equals); } + @override Future drain([E? futureValue]) { _isStreamExposed = true; return _body.stream.drain(futureValue); } + @override Future elementAt(int index) { _isStreamExposed = true; return _body.stream.elementAt(index); } + @override Future every(bool Function(Uint8List element) test) { _isStreamExposed = true; return _body.stream.every(test); } + @override Stream expand(Iterable Function(Uint8List element) convert) { _isStreamExposed = true; return _body.stream.expand(convert); } + @override Future get first { _isStreamExposed = true; return _body.stream.first; } + @override Future firstWhere( bool Function(Uint8List element) test, { - List Function()? orElse, + Uint8List Function()? orElse, }) { _isStreamExposed = true; - return _body.stream.firstWhere( - test, - orElse: () => Uint8List.fromList(orElse!()), - ); + return _body.stream.firstWhere(test, orElse: orElse); } + @override Future fold( S initialValue, S Function(S previous, Uint8List element) combine, @@ -224,11 +236,13 @@ abstract class FakeInbound extends FakeTransport { return _body.stream.fold(initialValue, combine); } + @override Future forEach(void Function(Uint8List element) action) { _isStreamExposed = true; return _body.stream.forEach(action); } + @override Stream handleError( Function onError, { bool Function(dynamic error)? test, @@ -237,100 +251,105 @@ abstract class FakeInbound extends FakeTransport { return _body.stream.handleError(onError, test: test); } + @override bool get isBroadcast { _isStreamExposed = true; return _body.stream.isBroadcast; } + @override Future get isEmpty { _isStreamExposed = true; return _body.stream.isEmpty; } + @override Future join([String separator = '']) { _isStreamExposed = true; return _body.stream.join(separator); } + @override Future get last { _isStreamExposed = true; return _body.stream.last; } + @override Future lastWhere( bool Function(Uint8List element) test, { Uint8List Function()? orElse, }) { _isStreamExposed = true; - return _body.stream.lastWhere( - test, - orElse: () => Uint8List.fromList(orElse!()), - ); + return _body.stream.lastWhere(test, orElse: orElse); } + @override Future get length { _isStreamExposed = true; return _body.stream.length; } + @override Stream map(S Function(Uint8List event) convert) { _isStreamExposed = true; return _body.stream.map(convert); } + @override Future pipe(StreamConsumer streamConsumer) { _isStreamExposed = true; - return _body.stream - .map((Uint8List list) => list.toList()) - .pipe(streamConsumer); + return _body.stream.pipe(streamConsumer); } + @override Future reduce( - List Function(Uint8List previous, Uint8List element) combine, + Uint8List Function(Uint8List previous, Uint8List element) combine, ) { _isStreamExposed = true; - return _body.stream.reduce( - (Uint8List previous, Uint8List element) => - Uint8List.fromList(combine(previous, element)), - ); + return _body.stream.reduce(combine); } + @override Future get single { _isStreamExposed = true; return _body.stream.single; } + @override Future singleWhere( bool Function(Uint8List element) test, { - List Function()? orElse, + Uint8List Function()? orElse, }) { _isStreamExposed = true; - return _body.stream.singleWhere( - test, - orElse: () => Uint8List.fromList(orElse!()), - ); + return _body.stream.singleWhere(test, orElse: orElse); } + @override Stream skip(int count) { _isStreamExposed = true; return _body.stream.skip(count); } + @override Stream skipWhile(bool Function(Uint8List element) test) { _isStreamExposed = true; return _body.stream.skipWhile(test); } + @override Stream take(int count) { _isStreamExposed = true; return _body.stream.take(count); } + @override Stream takeWhile(bool Function(Uint8List element) test) { _isStreamExposed = true; return _body.stream.takeWhile(test); } + @override Stream timeout( Duration timeLimit, { void Function(EventSink sink)? onTimeout, @@ -339,23 +358,25 @@ abstract class FakeInbound extends FakeTransport { return _body.stream.timeout(timeLimit, onTimeout: onTimeout); } + @override Future> toList() { _isStreamExposed = true; return _body.stream.toList(); } + @override Future> toSet() { _isStreamExposed = true; return _body.stream.toSet(); } - Stream transform(StreamTransformer, S> streamTransformer) { + @override + Stream transform(StreamTransformer streamTransformer) { _isStreamExposed = true; - return _body.stream - .map((Uint8List list) => list.toList()) - .transform(streamTransformer); + return _body.stream.transform(streamTransformer); } + @override Stream where(bool Function(Uint8List event) test) { _isStreamExposed = true; return _body.stream.where(test); diff --git a/packages/cocoon_integration_test/lib/src/integration_http_client.dart b/packages/cocoon_integration_test/lib/src/integration_http_client.dart index cf0373f31c..b9a76d7f71 100644 --- a/packages/cocoon_integration_test/lib/src/integration_http_client.dart +++ b/packages/cocoon_integration_test/lib/src/integration_http_client.dart @@ -4,6 +4,7 @@ import 'dart:convert'; +import 'package:cocoon_service/src/request_handling/http_io.dart'; import 'package:http/http.dart' as http; import '../testing.dart'; @@ -32,7 +33,7 @@ class IntegrationHttpClient extends http.BaseClient { fakeRequest.headers.add(key, value); }); - await server.server(fakeRequest); + await server.server(fakeRequest.toRequest()); final responseHeaders = {}; fakeResponse.headers.forEach((name, values) { diff --git a/packages/cocoon_integration_test/lib/src/server.dart b/packages/cocoon_integration_test/lib/src/server.dart index db03e8fa8d..786ae9166a 100644 --- a/packages/cocoon_integration_test/lib/src/server.dart +++ b/packages/cocoon_integration_test/lib/src/server.dart @@ -4,7 +4,9 @@ import 'package:cocoon_service/cocoon_service.dart'; import 'package:cocoon_service/server.dart'; +import 'package:cocoon_service/src/service/build_status_service.dart'; import 'package:cocoon_service/src/service/commit_service.dart'; +import 'package:retry/retry.dart'; import '../testing.dart'; @@ -20,7 +22,7 @@ class IntegrationServer { FakeLuciBuildService? luciBuildService, FakeScheduler? scheduler, FakeCiYamlFetcher? ciYamlFetcher, - FakeBuildStatusService? buildStatusService, + BuildStatusService? buildStatusService, FakeContentAwareHashService? contentAwareHashService, CacheService? cache, }) { @@ -43,7 +45,9 @@ class IntegrationServer { bigQuery: this.bigQuery, ); this.ciYamlFetcher = ciYamlFetcher ?? FakeCiYamlFetcher(); - this.buildStatusService = buildStatusService ?? FakeBuildStatusService(); + this.buildStatusService = + buildStatusService ?? + BuildStatusService(firestore: this.firestore, config: this.config); this.contentAwareHashService = contentAwareHashService ?? FakeContentAwareHashService(config: this.config); @@ -59,6 +63,7 @@ class IntegrationServer { branchService: BranchService( config: this.config, gerritService: this.gerritService, + retryOptions: const RetryOptions(maxAttempts: 1), ), buildBucketClient: this.buildBucketClient, luciBuildService: this.luciBuildService, @@ -86,7 +91,7 @@ class IntegrationServer { late final FakeLuciBuildService luciBuildService; late final FakeScheduler scheduler; late final FakeCiYamlFetcher ciYamlFetcher; - late final FakeBuildStatusService buildStatusService; + late final BuildStatusService buildStatusService; late final FakeContentAwareHashService contentAwareHashService; late final CacheService cache; } From f02a7ebae22582be8012e4d00234e7e2cff588ad Mon Sep 17 00:00:00 2001 From: John McDole Date: Fri, 27 Feb 2026 11:08:20 -0800 Subject: [PATCH 2/3] review --- app_dart/hook/build.dart | 6 +++--- app_dart/lib/src/request_handling/http_io.dart | 2 +- app_dart/lib/src/request_handling/http_utils.dart | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app_dart/hook/build.dart b/app_dart/hook/build.dart index 48d0281f37..7de23c08be 100644 --- a/app_dart/hook/build.dart +++ b/app_dart/hook/build.dart @@ -1,4 +1,4 @@ -// Copyright 2025 The Flutter Authors. All rights reserved. +// Copyright 2026 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. @@ -17,13 +17,13 @@ void main(List args) async { final outputFile = File('lib/src/generated_config.dart'); // 3. Write the file as a raw string constant - await outputFile.writeAsString(''' + await outputFile.writeAsString(""" // GENERATED CODE - DO NOT MODIFY BY HAND // Generated by build.dart hook const String configFileContent = r\'\'\'$content\'\'\'; -'''); +"""); // 4. (Optional) Tell Dart that this hook depends on the config file // This ensures that if config.yaml changes, the hook runs again. diff --git a/app_dart/lib/src/request_handling/http_io.dart b/app_dart/lib/src/request_handling/http_io.dart index 653e247bfa..6630df7711 100644 --- a/app_dart/lib/src/request_handling/http_io.dart +++ b/app_dart/lib/src/request_handling/http_io.dart @@ -1,4 +1,4 @@ -// Copyright 2019 The Flutter Authors. All rights reserved. +// Copyright 2026 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. diff --git a/app_dart/lib/src/request_handling/http_utils.dart b/app_dart/lib/src/request_handling/http_utils.dart index f9f72e70e1..b564b8655f 100644 --- a/app_dart/lib/src/request_handling/http_utils.dart +++ b/app_dart/lib/src/request_handling/http_utils.dart @@ -1,4 +1,4 @@ -// Copyright 2019 The Flutter Authors. All rights reserved. +// Copyright 2026 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. From d95e1d6f6276391bbf18b4328320d19d75d183bd Mon Sep 17 00:00:00 2001 From: John McDole Date: Fri, 27 Feb 2026 11:12:32 -0800 Subject: [PATCH 3/3] Remove investigation md --- .../investigation_report.md | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 packages/cocoon_integration_test/investigation_report.md diff --git a/packages/cocoon_integration_test/investigation_report.md b/packages/cocoon_integration_test/investigation_report.md deleted file mode 100644 index 2596955af1..0000000000 --- a/packages/cocoon_integration_test/investigation_report.md +++ /dev/null @@ -1,45 +0,0 @@ -# Investigation Report: FakeHttpRequest Type Mismatch - -## Objective -Investigate reported type mismatch errors in `packages/cocoon_integration_test/lib/src/fakes/fake_http.dart`, specifically concerning `FakeHttpRequest`, `FakeInbound`, and `HttpRequest` interfaces regarding `Stream` vs `Stream>`. - -## Findings - -1. **`HttpRequest` Interface:** - - Verified via `packages/cocoon_integration_test/test_http_request_type.dart` and documentation. - - `HttpRequest` from `dart:io` implements `Stream`. - - Since `Stream` is covariant, `Stream` is a subtype of `Stream>`. - -2. **`FakeInbound` Definition:** - - File: `packages/cocoon_integration_test/lib/src/fakes/fake_http.dart` - - Definition: `abstract class FakeInbound extends FakeTransport implements Stream` - - This correctly aligns with `HttpRequest`'s requirement of `Stream`. - -3. **Method Overrides in `FakeInbound`:** - - `FakeInbound` overrides `Stream` methods using `Uint8List` types. - - Example: `StreamSubscription listen(void Function(Uint8List event)? onData, ...)` - - This is a valid implementation of `Stream`. - -4. **`FakeHttpRequest` Definition:** - - Definition: `class FakeHttpRequest extends FakeInbound implements HttpRequest` - - Since `FakeInbound` implements `Stream` and `HttpRequest` implements `Stream`, there is no type mismatch. - -5. **Static Analysis:** - - Ran `dart analyze packages/cocoon_integration_test/lib/src/fakes/fake_http.dart`. - - Result: `No issues found!`. - - Ran `dart analyze .` in `packages/cocoon_integration_test`. - - Result: `No issues found!`. - -## Conclusion -The current codebase appears to be correct and free of the reported type mismatch errors. `FakeInbound` correctly implements `Stream`, matching `dart:io`'s `HttpRequest` definition. - -The reported errors might have stemmed from: -- An older version of `FakeInbound` that implemented `Stream>`. -- A misunderstanding of the error message. -- A different environment where `dart:io` definitions differ (unlikely for standard SDK). - -## Recommendation -If errors persist, please ensure: -1. You are using the latest version of the file. -2. You are running `dart analyze` or `flutter test` on the correct package. -3. The SDK version matches `^3.10.8` as specified in `pubspec.yaml`.