Skip to content

Commit

Permalink
Attempt to limit failures in wrapper-validation tests (#490)
Browse files Browse the repository at this point in the history
- Reduce requests involved in checksums.retryTest
- Reduce requests involved in validate test
- Fetch checksum values in batches
  • Loading branch information
bigdaz authored Dec 18, 2024
1 parent bc78598 commit 59d7e81
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 11 deletions.
25 changes: 19 additions & 6 deletions sources/src/wrapper-validation/checksums.ts
Original file line number Diff line number Diff line change
@@ -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'

Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -94,3 +90,20 @@ async function addDistributionSnapshotChecksumUrls(checksumUrls: [string, string
}
})
}

async function fetchAndStoreChecksums(
checksumUrls: [string, string][],
wrapperChecksums: WrapperChecksums
): Promise<void> {
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`)
}
}
6 changes: 3 additions & 3 deletions sources/test/jest/wrapper-validation/checksums.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down Expand Up @@ -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()
})
})
Expand Down
19 changes: 17 additions & 2 deletions sources/test/jest/wrapper-validation/validate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand All @@ -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'
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 59d7e81

Please sign in to comment.