2024-04-10 20:43:44 -06:00
|
|
|
|
import * as path from 'path'
|
2024-08-01 09:39:30 -06:00
|
|
|
|
import * as fs from 'fs'
|
2024-04-10 20:43:44 -06:00
|
|
|
|
import * as validate from '../../../src/wrapper-validation/validate'
|
|
|
|
|
import {expect, test, jest} from '@jest/globals'
|
2024-07-16 13:04:57 -06:00
|
|
|
|
import { WrapperChecksums } from '../../../src/wrapper-validation/checksums'
|
2024-08-01 09:39:30 -06:00
|
|
|
|
import { ChecksumCache } from '../../../src/wrapper-validation/cache'
|
|
|
|
|
import exp from 'constants'
|
2024-04-10 20:43:44 -06:00
|
|
|
|
|
|
|
|
|
jest.setTimeout(30000)
|
|
|
|
|
|
|
|
|
|
const baseDir = path.resolve('./test/jest/wrapper-validation')
|
2024-08-01 09:39:30 -06:00
|
|
|
|
const tmpDir = path.resolve('./test/jest/tmp')
|
2024-04-10 20:43:44 -06:00
|
|
|
|
|
|
|
|
|
test('succeeds if all found wrapper jars are valid', async () => {
|
2024-08-02 14:40:16 -06:00
|
|
|
|
const result = await validate.findInvalidWrapperJars(baseDir, false, [
|
2024-04-10 20:43:44 -06:00
|
|
|
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
expect(result.isValid()).toBe(true)
|
|
|
|
|
// Only hardcoded and explicitly allowed checksums should have been used
|
|
|
|
|
expect(result.fetchedChecksums).toBe(false)
|
|
|
|
|
|
|
|
|
|
expect(result.toDisplayString()).toBe(
|
|
|
|
|
'✓ Found known Gradle Wrapper JAR files:\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradle-wrapper.jar\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradlе-wrapper.jar\n' + // homoglyph
|
|
|
|
|
' 3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce data/valid/gradle-wrapper.jar'
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
2024-08-01 09:39:30 -06:00
|
|
|
|
test('succeeds if all found wrapper jars are previously valid', async () => {
|
2024-08-02 14:40:16 -06:00
|
|
|
|
const result = await validate.findInvalidWrapperJars(baseDir, false, [], [
|
2024-08-01 09:39:30 -06:00
|
|
|
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
|
|
|
|
|
'3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce'
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
expect(result.isValid()).toBe(true)
|
|
|
|
|
// Only hardcoded and explicitly allowed checksums should have been used
|
|
|
|
|
expect(result.fetchedChecksums).toBe(false)
|
|
|
|
|
|
|
|
|
|
expect(result.toDisplayString()).toBe(
|
|
|
|
|
'✓ Found known Gradle Wrapper JAR files:\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradle-wrapper.jar\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradlе-wrapper.jar\n' + // homoglyph
|
|
|
|
|
' 3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce data/valid/gradle-wrapper.jar'
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
2024-04-10 20:43:44 -06:00
|
|
|
|
test('succeeds if all found wrapper jars are valid (and checksums are fetched from Gradle API)', async () => {
|
2024-07-16 13:04:57 -06:00
|
|
|
|
const knownValidChecksums = new WrapperChecksums()
|
2024-04-10 20:43:44 -06:00
|
|
|
|
const result = await validate.findInvalidWrapperJars(
|
|
|
|
|
baseDir,
|
|
|
|
|
false,
|
|
|
|
|
['e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'],
|
2024-08-01 09:39:30 -06:00
|
|
|
|
[],
|
2024-04-10 20:43:44 -06:00
|
|
|
|
knownValidChecksums
|
|
|
|
|
)
|
2024-07-16 13:04:57 -06:00
|
|
|
|
console.log(`fetchedChecksums = ${result.fetchedChecksums}`)
|
2024-04-10 20:43:44 -06:00
|
|
|
|
|
|
|
|
|
expect(result.isValid()).toBe(true)
|
|
|
|
|
// Should have fetched checksums because no known checksums were provided
|
|
|
|
|
expect(result.fetchedChecksums).toBe(true)
|
|
|
|
|
|
|
|
|
|
expect(result.toDisplayString()).toBe(
|
|
|
|
|
'✓ Found known Gradle Wrapper JAR files:\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradle-wrapper.jar\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradlе-wrapper.jar\n' + // homoglyph
|
|
|
|
|
' 3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce data/valid/gradle-wrapper.jar'
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
test('fails if invalid wrapper jars are found', async () => {
|
2024-08-02 14:40:16 -06:00
|
|
|
|
const result = await validate.findInvalidWrapperJars(baseDir, false, [])
|
2024-04-10 20:43:44 -06:00
|
|
|
|
|
|
|
|
|
expect(result.isValid()).toBe(false)
|
|
|
|
|
|
|
|
|
|
expect(result.valid).toEqual([
|
|
|
|
|
new validate.WrapperJar(
|
|
|
|
|
'data/valid/gradle-wrapper.jar',
|
|
|
|
|
'3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce'
|
|
|
|
|
)
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
expect(result.invalid).toEqual([
|
|
|
|
|
new validate.WrapperJar(
|
|
|
|
|
'data/invalid/gradle-wrapper.jar',
|
|
|
|
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
|
|
|
|
|
),
|
|
|
|
|
new validate.WrapperJar(
|
|
|
|
|
'data/invalid/gradlе-wrapper.jar', // homoglyph
|
|
|
|
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
|
|
|
|
|
)
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
expect(result.toDisplayString()).toBe(
|
|
|
|
|
'✗ Found unknown Gradle Wrapper JAR files:\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradle-wrapper.jar\n' +
|
|
|
|
|
' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/invalid/gradlе-wrapper.jar\n' + // homoglyph
|
|
|
|
|
'✓ Found known Gradle Wrapper JAR files:\n' +
|
|
|
|
|
' 3888c76faa032ea8394b8a54e04ce2227ab1f4be64f65d450f8509fe112d38ce data/valid/gradle-wrapper.jar'
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
2024-08-01 09:39:30 -06:00
|
|
|
|
test('can save and load checksums', async () => {
|
|
|
|
|
const cacheDir = path.join(tmpDir, 'wrapper-validation-cache')
|
|
|
|
|
fs.rmSync(cacheDir, {recursive: true, force: true})
|
|
|
|
|
|
|
|
|
|
const checksumCache = new ChecksumCache(cacheDir)
|
|
|
|
|
|
|
|
|
|
expect(checksumCache.load()).toEqual([])
|
|
|
|
|
|
|
|
|
|
checksumCache.save(['123', '456'])
|
|
|
|
|
|
|
|
|
|
expect(checksumCache.load()).toEqual(['123', '456'])
|
|
|
|
|
expect(fs.existsSync(cacheDir)).toBe(true)
|
|
|
|
|
})
|