From 59d7e810705a86bee4570bff4926da05eebc1085 Mon Sep 17 00:00:00 2001 From: Daz DeBoer Date: Tue, 17 Dec 2024 17:58:41 -0700 Subject: [PATCH] Attempt to limit failures in wrapper-validation tests (#490) - Reduce requests involved in checksums.retryTest - Reduce requests involved in validate test - Fetch checksum values in batches --- sources/src/wrapper-validation/checksums.ts | 25 ++++++++++++++----- .../jest/wrapper-validation/checksums.test.ts | 6 ++--- .../jest/wrapper-validation/validate.test.ts | 19 ++++++++++++-- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/sources/src/wrapper-validation/checksums.ts b/sources/src/wrapper-validation/checksums.ts index dd51011f..f6bcc143 100644 --- a/sources/src/wrapper-validation/checksums.ts +++ b/sources/src/wrapper-validation/checksums.ts @@ -1,5 +1,6 @@ import * as httpm from 'typed-rest-client/HttpClient' import * as cheerio from 'cheerio' +import * as core from '@actions/core' import fileWrapperChecksums from './wrapper-checksums.json' @@ -59,12 +60,7 @@ export async function fetchUnknownChecksums( } const wrapperChecksums = new WrapperChecksums() - await Promise.all( - checksumUrls.map(async ([version, url]) => { - const checksum = await httpGetText(url) - wrapperChecksums.add(version, checksum) - }) - ) + await fetchAndStoreChecksums(checksumUrls, wrapperChecksums) return wrapperChecksums } @@ -94,3 +90,20 @@ async function addDistributionSnapshotChecksumUrls(checksumUrls: [string, string } }) } + +async function fetchAndStoreChecksums( + checksumUrls: [string, string][], + wrapperChecksums: WrapperChecksums +): Promise { + const batchSize = 10 + for (let i = 0; i < checksumUrls.length; i += batchSize) { + const batch = checksumUrls.slice(i, i + batchSize) + await Promise.all( + batch.map(async ([version, url]) => { + const checksum = await httpGetText(url) + wrapperChecksums.add(version, checksum) + }) + ) + core.info(`Fetched ${i + batch.length} of ${checksumUrls.length} checksums`) + } +} diff --git a/sources/test/jest/wrapper-validation/checksums.test.ts b/sources/test/jest/wrapper-validation/checksums.test.ts index af138e73..b9dc7200 100644 --- a/sources/test/jest/wrapper-validation/checksums.test.ts +++ b/sources/test/jest/wrapper-validation/checksums.test.ts @@ -2,7 +2,7 @@ import * as checksums from '../../../src/wrapper-validation/checksums' import nock from 'nock' import {afterEach, describe, expect, test, jest} from '@jest/globals' -jest.setTimeout(30000) +jest.setTimeout(60000) const CHECKSUM_8_1 = 'ed2c26eba7cfb93cc2b7785d05e534f07b5b48b5e7fc941921cd098628abca58' @@ -70,8 +70,8 @@ describe('retry', () => { code: 'ECONNREFUSED' }) - const validChecksums = await checksums.fetchUnknownChecksums(false, new checksums.WrapperChecksums) - expect(validChecksums.checksums.size).toBeGreaterThan(10) + const validChecksums = await checksums.fetchUnknownChecksums(false, knownChecksumsWithout8_1()) + expect(validChecksums.checksums.size).toBeGreaterThan(0) nock.isDone() }) }) diff --git a/sources/test/jest/wrapper-validation/validate.test.ts b/sources/test/jest/wrapper-validation/validate.test.ts index 0639b092..54d9d6de 100644 --- a/sources/test/jest/wrapper-validation/validate.test.ts +++ b/sources/test/jest/wrapper-validation/validate.test.ts @@ -2,7 +2,7 @@ import * as path from 'path' import * as fs from 'fs' import * as validate from '../../../src/wrapper-validation/validate' import {expect, test, jest} from '@jest/globals' -import { WrapperChecksums } from '../../../src/wrapper-validation/checksums' +import { WrapperChecksums, KNOWN_CHECKSUMS } from '../../../src/wrapper-validation/checksums' import { ChecksumCache } from '../../../src/wrapper-validation/cache' import exp from 'constants' @@ -11,6 +11,21 @@ jest.setTimeout(30000) const baseDir = path.resolve('./test/jest/wrapper-validation') const tmpDir = path.resolve('./test/jest/tmp') +const CHECKSUM_3888 = '3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce' + +function knownChecksumsWithout3888(): WrapperChecksums { + const knownChecksums = new WrapperChecksums() + // iterate over all known checksums and add them to the knownChecksums object + for (const [checksum, versions] of KNOWN_CHECKSUMS.checksums) { + if (checksum !== CHECKSUM_3888) { + for (const version of versions) { + knownChecksums.add(version, checksum) + } + } + } + return knownChecksums +} + test('succeeds if all found wrapper jars are valid', async () => { const result = await validate.findInvalidWrapperJars(baseDir, false, [ 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' @@ -47,7 +62,7 @@ test('succeeds if all found wrapper jars are previously valid', async () => { }) test('succeeds if all found wrapper jars are valid (and checksums are fetched from Gradle API)', async () => { - const knownValidChecksums = new WrapperChecksums() + const knownValidChecksums = knownChecksumsWithout3888() const result = await validate.findInvalidWrapperJars( baseDir, false,