blob: 21e815c80ba32019ef6f8b6d8973c0bcd491cc34 [file] [log] [blame]
// Copyright 2021 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_service/src/foundation/github_checks_util.dart';
import 'package:cocoon_service/src/foundation/utils.dart';
import 'package:cocoon_service/src/model/ci_yaml/ci_yaml.dart';
import 'package:cocoon_service/src/model/proto/protos.dart' as pb;
import 'package:cocoon_service/src/service/build_bucket_client.dart';
import 'package:cocoon_service/src/service/cache_service.dart';
import 'package:cocoon_service/src/service/config.dart';
import 'package:cocoon_service/src/service/get_files_changed.dart';
import 'package:cocoon_service/src/service/github_checks_service.dart';
import 'package:cocoon_service/src/service/luci_build_service.dart';
import 'package:cocoon_service/src/service/scheduler.dart';
import 'package:cocoon_service/src/service/scheduler/ci_yaml_fetcher.dart';
import 'package:github/github.dart';
import 'fake_ci_yaml_fetcher.dart';
import 'fake_fusion_tester.dart';
import 'fake_get_files_changed.dart';
import 'fake_luci_build_service.dart';
/// Fake for [Scheduler] to use for tests that rely on it.
class FakeScheduler extends Scheduler {
FakeScheduler({
LuciBuildService? luciBuildService,
BuildBucketClient? buildbucket,
GetFilesChanged? getFilesChanged,
required super.config,
GithubChecksUtil? githubChecksUtil,
FusionTester? fusionTester,
CiYamlFetcher? ciYamlFetcher,
}) : super(
cache: CacheService(inMemory: true),
githubChecksService: GithubChecksService(
config,
githubChecksUtil: githubChecksUtil,
),
getFilesChanged: getFilesChanged ?? FakeGetFilesChanged(),
luciBuildService:
luciBuildService ??
FakeLuciBuildService(
config: config,
buildBucketClient: buildbucket,
githubChecksUtil: githubChecksUtil,
),
fusionTester: fusionTester ?? FakeFusionTester(),
ciYamlFetcher: ciYamlFetcher ?? FakeCiYamlFetcher(),
);
int cancelPreSubmitTargetsCallCnt = 0;
int get cancelPreSubmitTargetsCallCount => cancelPreSubmitTargetsCallCnt;
void resetCancelPreSubmitTargetsCallCount() =>
cancelPreSubmitTargetsCallCnt = 0;
@override
Future<void> cancelPreSubmitTargets({
required PullRequest pullRequest,
String reason = 'Newer commit available',
}) async {
await super.cancelPreSubmitTargets(pullRequest: pullRequest);
cancelPreSubmitTargetsCallCnt++;
}
int triggerPresubmitTargetsCnt = 0;
int get triggerPresubmitTargetsCallCount => triggerPresubmitTargetsCnt;
void resetTriggerPresubmitTargetsCallCount() =>
triggerPresubmitTargetsCnt = 0;
@override
Future<void> triggerPresubmitTargets({
required PullRequest pullRequest,
String reason = 'Newer commit available',
List<String>? builderTriggerList,
}) async {
await super.triggerPresubmitTargets(pullRequest: pullRequest);
triggerPresubmitTargetsCnt++;
}
int addPullRequestCallCnt = 0;
int get addPullRequestCallCount {
return addPullRequestCallCnt;
}
void resetAddPullRequestCallCount() {
addPullRequestCallCnt = 0;
}
@override
Future<void> addPullRequest(PullRequest pr) async {
await super.addPullRequest(pr);
addPullRequestCallCnt++;
}
}
final emptyConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(name: 'Linux A', scheduler: pb.SchedulerSystem.luci),
],
),
},
);
final exampleConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(name: 'Linux A', scheduler: pb.SchedulerSystem.luci),
pb.Target(name: 'Mac A', scheduler: pb.SchedulerSystem.luci),
pb.Target(name: 'Windows A', scheduler: pb.SchedulerSystem.luci),
pb.Target(
name: 'Google Internal Roll',
presubmit: false,
postsubmit: true,
scheduler: pb.SchedulerSystem.google_internal,
),
],
),
},
);
final exampleNaughtyConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(name: 'Windows A', scheduler: pb.SchedulerSystem.luci),
pb.Target(name: 'Windows A', scheduler: pb.SchedulerSystem.luci),
],
),
},
);
final exampleFlakyConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(
name: 'Flaky 1',
scheduler: pb.SchedulerSystem.luci,
properties: {'flakiness_threshold': '0.04'},
),
pb.Target(
name: 'Flaky Skip',
scheduler: pb.SchedulerSystem.luci,
properties: {'ignore_flakiness': 'true'},
),
],
),
},
);
final exampleBackfillConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(
name: 'Linux A',
scheduler: pb.SchedulerSystem.luci,
postsubmit: true,
properties: {'backfill': 'true'},
),
pb.Target(
name: 'Mac A',
scheduler: pb.SchedulerSystem.luci,
postsubmit: true,
),
pb.Target(
name: 'Windows A',
scheduler: pb.SchedulerSystem.luci,
postsubmit: true,
properties: {'backfill': 'false'},
),
],
),
},
);
final examplePresubmitRescheduleConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(name: 'Linux A'),
pb.Target(
name: 'Linux B',
postsubmit: true,
properties: {'presubmit_retry': '1'},
),
pb.Target(
name: 'Linux presubmit_max_attempts=2',
properties: {'presubmit_max_attempts': '2'},
),
],
),
},
);
final batchPolicyConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(name: 'Linux_android A'),
pb.Target(name: 'Linux_android B'),
pb.Target(name: 'Linux_android C'),
],
),
},
);
final unsupportedPostsubmitCheckrunConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[pb.Target(name: 'Linux flutter')],
),
},
);
final nonBringupPackagesConfig = CiYamlSet(
slug: Config.packagesSlug,
branch: Config.defaultBranch(Config.packagesSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.packagesSlug)],
targets: <pb.Target>[pb.Target(name: 'Linux nonbringup')],
),
},
);
final bringupPackagesConfig = CiYamlSet(
slug: Config.packagesSlug,
branch: Config.defaultBranch(Config.packagesSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.packagesSlug)],
targets: <pb.Target>[pb.Target(name: 'Linux bringup', bringup: true)],
),
},
);
final totCiYaml = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[
pb.Target(name: 'Linux_android B'),
pb.Target(name: 'Linux_android C'),
],
),
},
);
final notInToTConfig = CiYamlSet(
slug: Config.flutterSlug,
branch: Config.defaultBranch(Config.flutterSlug),
yamls: {
CiType.any: pb.SchedulerConfig(
enabledBranches: <String>[Config.defaultBranch(Config.flutterSlug)],
targets: <pb.Target>[pb.Target(name: 'Linux_android A')],
),
},
totConfig: totCiYaml,
);