Skip to content

Commit

Permalink
Verify severe and shout log messages in tests. (dart-lang#8425)
Browse files Browse the repository at this point in the history
  • Loading branch information
isoos authored Dec 19, 2024
1 parent a499a1f commit 5e698cc
Show file tree
Hide file tree
Showing 14 changed files with 238 additions and 50 deletions.
5 changes: 4 additions & 1 deletion app/test/admin/exported_api_sync_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ void main() {
});
});

testWithProfile('deleted files + full sync', fn: () async {
testWithProfile('deleted files + full sync', expectedLogMessages: [
// TODO: review why we have unhandled errors here
RegExp(r'^SEVERE Unhandled error in API handler \(incidentId: .*\)'),
], fn: () async {
await syncExportedApi();
final oldRoot = await listExportedApi();

Expand Down
47 changes: 40 additions & 7 deletions app/test/admin/moderate_package_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@ void main() {
);
}

testWithProfile('update state', fn: () async {
testWithProfile('update state', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('neon');

await expectModerationActions(mc.caseId, actions: []);
Expand Down Expand Up @@ -104,7 +108,11 @@ void main() {
);
});

testWithProfile('clear moderation flag', fn: () async {
testWithProfile('clear moderation flag', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('oxygen');
await expectModerationActions(mc.caseId, actions: []);
final r1 = await _moderate('oxygen', caseId: mc.caseId);
Expand Down Expand Up @@ -189,7 +197,11 @@ void main() {
});
});

testWithProfile('API endpoints return not found', fn: () async {
testWithProfile('API endpoints return not found', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final jsonUrls = [
'/api/packages/oxygen',
'/api/packages/oxygen/versions/1.0.0',
Expand All @@ -215,7 +227,11 @@ void main() {
});

testWithProfile('public pages are displaying moderation notice',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final htmlUrls = [
'/packages/oxygen',
'/packages/oxygen/changelog',
Expand Down Expand Up @@ -256,7 +272,11 @@ void main() {
actions: [ModerationAction.apply, ModerationAction.revert]);
});

testWithProfile('not included in search', fn: () async {
testWithProfile('not included in search', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
await searchBackend.doCreateAndUpdateSnapshot(
FakeGlobalLockClaim(clock.now().add(Duration(seconds: 3))),
concurrency: 2,
Expand Down Expand Up @@ -295,7 +315,12 @@ void main() {
expect(docs3!.where((d) => d.package == 'oxygen'), isNotEmpty);
});

testWithProfile('archives are removed from public buckets', fn: () async {
testWithProfile('archives are removed from public buckets',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final publicUrls = [
'${activeConfiguration.storageBaseUrl}'
'/${activeConfiguration.publicPackagesBucketName}'
Expand Down Expand Up @@ -339,6 +364,11 @@ void main() {
testWithProfile(
'analysis results are cleared',
processJobsWithFakeRunners: true,
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
],
fn: () async {
final score1 =
await scoreCardBackend.getScoreCardData('oxygen', '1.2.0');
Expand Down Expand Up @@ -386,7 +416,10 @@ void main() {

testWithProfile(
'cleanup deletes datastore entities and canonical archive file',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
// delete old version
await accountBackend.withBearerToken(siteAdminToken, () async {
await adminBackend.removePackageVersion('oxygen', '1.0.0');
Expand Down
56 changes: 44 additions & 12 deletions app/test/admin/moderate_package_version_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ void main() {
);
}

testWithProfile('update state', fn: () async {
testWithProfile('update state', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
final mc = await _report('oxygen', '1.0.0');
final r1 = await _moderate('oxygen', '1.0.0');
expect(r1.output, {
Expand Down Expand Up @@ -109,7 +111,9 @@ void main() {
expect(mc2!.getActionLog().entries, hasLength(1));
});

testWithProfile('clear moderation flag', fn: () async {
testWithProfile('clear moderation flag', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
final r1 = await _moderate('oxygen', '1.0.0', state: true);
expect(r1.output, {
'package': 'oxygen',
Expand Down Expand Up @@ -143,7 +147,11 @@ void main() {
expect(optionsUpdates.isRetracted, true);
});

testWithProfile('cannot moderate last visible version', fn: () async {
testWithProfile('cannot moderate last visible version',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.2.0', state: true);
final p1 = await packageBackend.lookupPackage('oxygen');
expect(p1!.latestVersion, '1.0.0');
Expand All @@ -164,7 +172,9 @@ void main() {
);
});

testWithProfile('can publish new version', fn: () async {
testWithProfile('can publish new version', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.0.0', state: true);

final pubspecContent = generatePubspecYaml('oxygen', '3.0.0');
Expand All @@ -174,7 +184,10 @@ void main() {
expect(message.success.message, contains('Successfully uploaded'));
});

testWithProfile('cannot re-publish moderated version', fn: () async {
testWithProfile('cannot re-publish moderated version',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.0.0', state: true);

final pubspecContent = generatePubspecYaml('oxygen', '1.0.0');
Expand All @@ -189,7 +202,9 @@ void main() {
});

testWithProfile('archive file is removed from public buckets',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
Future<Uint8List?> expectStatusCode(int statusCode,
{String version = '1.0.0'}) async {
final publicUrls = [
Expand Down Expand Up @@ -232,7 +247,9 @@ void main() {
});

testWithProfile('versions file is updated in exported bucket',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
Future<void> expectIncluded(String version, bool isIncluded) async {
final prefixes = ['latest', runtimeVersion];
for (final prefix in prefixes) {
Expand All @@ -257,7 +274,9 @@ void main() {
await expectIncluded('1.0.0', true);
});

testWithProfile('search is updated with new version', fn: () async {
testWithProfile('search is updated with new version', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
await searchBackend.doCreateAndUpdateSnapshot(
FakeGlobalLockClaim(clock.now().add(Duration(seconds: 3))),
concurrency: 2,
Expand Down Expand Up @@ -298,7 +317,10 @@ void main() {

testWithProfile(
'moderated version is not visible in API (other version is)',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.0.0', state: true);
final rs1 = await packageBackend.listVersionsCached('oxygen');
expect(rs1.latest.version, '1.2.0');
Expand All @@ -325,7 +347,9 @@ void main() {
});

testWithProfile('moderated versions are not displayed on versions tab',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
await _moderate('oxygen', '1.2.0', state: true);
await expectHtmlResponse(
await issueGet('/packages/oxygen/versions'),
Expand All @@ -339,7 +363,10 @@ void main() {
);
});

testWithProfile('moderated version pages are not displayed', fn: () async {
testWithProfile('moderated version pages are not displayed',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
], fn: () async {
List<String> pagePaths(String version) {
return [
'/packages/oxygen/versions/$version',
Expand Down Expand Up @@ -415,6 +442,9 @@ void main() {
testWithProfile(
'moderated version trigger new analysis',
processJobsWithFakeRunners: true,
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
],
fn: () async {
final score1 =
await scoreCardBackend.getScoreCardData('oxygen', '1.2.0');
Expand Down Expand Up @@ -468,7 +498,9 @@ void main() {

testWithProfile(
'cleanup deletes datastore entities and canonical archive file',
fn: () async {
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
], fn: () async {
// canonical file is present
expect(
await packageBackend.tarballStorage
Expand Down
24 changes: 20 additions & 4 deletions app/test/admin/moderation_case_resolve_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,11 @@ void main() {
expect(await _close(mc.caseId), 'no-action');
});

testWithProfile('notification: apply moderation', fn: () async {
testWithProfile('notification: apply moderation', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _prepare(apply: true);
expect(
await _close(
Expand All @@ -87,7 +91,11 @@ void main() {
);
});

testWithProfile('appeal no action: revert', fn: () async {
testWithProfile('appeal no action: revert', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc1 = await _prepare(apply: null);
await _close(mc1.caseId);

Expand All @@ -108,7 +116,11 @@ void main() {
expect(await _close(mc.caseId), 'no-action-upheld');
});

testWithProfile('appeal moderation: revert', fn: () async {
testWithProfile('appeal moderation: revert', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc1 = await _prepare(apply: true);
await _close(
mc1.caseId,
Expand All @@ -119,7 +131,11 @@ void main() {
expect(await _close(mc.caseId), 'moderation-reverted');
});

testWithProfile('appeal moderation: upheld', fn: () async {
testWithProfile('appeal moderation: upheld', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc1 = await _prepare(apply: true);
await _close(
mc1.caseId,
Expand Down
12 changes: 10 additions & 2 deletions app/test/admin/moderation_transparency_metrics_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,11 @@ void main() {
expect(text, contains('Total number of actions taken,0\r\n'));
});

testWithProfile('moderated package', fn: () async {
testWithProfile('moderated package', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('oxygen');
await _moderatePkg('oxygen', caseId: mc.caseId, state: true);
await _resolve(
Expand Down Expand Up @@ -222,7 +226,11 @@ void main() {
]));
});

testWithProfile('appeal', fn: () async {
testWithProfile('appeal', expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/oxygen-1.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-1.2.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/oxygen-2.0.0-dev.tar.gz".',
], fn: () async {
final mc = await _report('oxygen');
await _moderatePkg('oxygen', caseId: mc.caseId, state: true);
await _resolve(
Expand Down
12 changes: 10 additions & 2 deletions app/test/package/api_export/api_exporter_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,12 @@ final _testProfile = TestProfile(
);

void main() {
testWithFakeTime('synchronizeExportedApi()', testProfile: _testProfile,
(fakeTime) async {
testWithFakeTime('synchronizeExportedApi()',
testProfile: _testProfile,
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/bar-2.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/bar-3.0.0.tar.gz".',
], (fakeTime) async {
await storageService.createBucket('bucket');
final bucket = storageService.bucket('bucket');
final apiExporter =
Expand All @@ -59,6 +63,10 @@ void main() {

testWithFakeTime(
'apiExporter.start()',
expectedLogMessages: [
'SHOUT Deleting object from public bucket: "packages/bar-2.0.0.tar.gz".',
'SHOUT Deleting object from public bucket: "packages/bar-3.0.0.tar.gz".',
],
testProfile: _testProfile,
(fakeTime) async {
await storageService.createBucket('bucket');
Expand Down
Loading

0 comments on commit 5e698cc

Please sign in to comment.