mirror of https://github.com/actions/toolkit
PR feedback
parent
46174ed573
commit
208dbe2131
|
@ -49,17 +49,17 @@ afterEach(() => {
|
||||||
|
|
||||||
test('save with missing input should fail', async () => {
|
test('save with missing input should fail', async () => {
|
||||||
const paths: string[] = []
|
const paths: string[] = []
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
|
|
||||||
await expect(saveCache(paths, primaryKey)).rejects.toThrowError(
|
await expect(saveCache(paths, key)).rejects.toThrowError(
|
||||||
`Path Validation Error: At least one directory or file path is required`
|
`Path Validation Error: At least one directory or file path is required`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('save with large cache outputs should fail using', async () => {
|
test('save with large cache outputs should fail using', async () => {
|
||||||
const filePath = 'node_modules'
|
const paths = 'node_modules'
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
const cachePaths = [path.resolve(filePath)]
|
const cachePaths = [path.resolve(paths)]
|
||||||
|
|
||||||
const createTarMock = jest.spyOn(tar, 'createTar')
|
const createTarMock = jest.spyOn(tar, 'createTar')
|
||||||
const logWarningMock = jest.spyOn(core, 'warning')
|
const logWarningMock = jest.spyOn(core, 'warning')
|
||||||
|
@ -73,16 +73,14 @@ test('save with large cache outputs should fail using', async () => {
|
||||||
.spyOn(cacheUtils, 'getCompressionMethod')
|
.spyOn(cacheUtils, 'getCompressionMethod')
|
||||||
.mockReturnValueOnce(Promise.resolve(compression))
|
.mockReturnValueOnce(Promise.resolve(compression))
|
||||||
|
|
||||||
const cacheId = await saveCache([filePath], primaryKey)
|
const cacheId = await saveCache([paths], key)
|
||||||
expect(cacheId).toBe(-1)
|
expect(cacheId).toBe(-1)
|
||||||
expect(logWarningMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(logWarningMock).toHaveBeenCalledWith(
|
expect(logWarningMock).toHaveBeenCalledWith(
|
||||||
'Failed to save: Cache size of ~11264 MB (11811160064 B) is over the 10GB limit, not saving cache.'
|
'Failed to save: Cache size of ~11264 MB (11811160064 B) is over the 10GB limit, not saving cache.'
|
||||||
)
|
)
|
||||||
|
|
||||||
const archiveFolder = '/foo/bar'
|
const archiveFolder = '/foo/bar'
|
||||||
|
|
||||||
expect(createTarMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(createTarMock).toHaveBeenCalledWith(
|
expect(createTarMock).toHaveBeenCalledWith(
|
||||||
archiveFolder,
|
archiveFolder,
|
||||||
cachePaths,
|
cachePaths,
|
||||||
|
@ -93,7 +91,7 @@ test('save with large cache outputs should fail using', async () => {
|
||||||
|
|
||||||
test('create cache entry failure', async () => {
|
test('create cache entry failure', async () => {
|
||||||
const paths = ['node_modules']
|
const paths = ['node_modules']
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
const infoLogMock = jest.spyOn(core, 'info')
|
const infoLogMock = jest.spyOn(core, 'info')
|
||||||
|
|
||||||
const createCacheEntryMock = jest
|
const createCacheEntryMock = jest
|
||||||
|
@ -120,16 +118,14 @@ test('create cache entry failure', async () => {
|
||||||
} as BlobUploadCommonResponse)
|
} as BlobUploadCommonResponse)
|
||||||
)
|
)
|
||||||
|
|
||||||
const cacheId = await saveCache(paths, primaryKey)
|
const cacheId = await saveCache(paths, key)
|
||||||
expect(cacheId).toBe(-1)
|
expect(cacheId).toBe(-1)
|
||||||
expect(infoLogMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(infoLogMock).toHaveBeenCalledWith(
|
expect(infoLogMock).toHaveBeenCalledWith(
|
||||||
`Failed to save: Unable to reserve cache with key ${primaryKey}, another job may be creating this cache.`
|
`Failed to save: Unable to reserve cache with key ${key}, another job may be creating this cache.`
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(createCacheEntryMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(createCacheEntryMock).toHaveBeenCalledWith({
|
expect(createCacheEntryMock).toHaveBeenCalledWith({
|
||||||
key: primaryKey,
|
key,
|
||||||
version: cacheVersion
|
version: cacheVersion
|
||||||
})
|
})
|
||||||
expect(createTarMock).toHaveBeenCalledTimes(1)
|
expect(createTarMock).toHaveBeenCalledTimes(1)
|
||||||
|
@ -139,9 +135,9 @@ test('create cache entry failure', async () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('finalize save cache failure', async () => {
|
test('finalize save cache failure', async () => {
|
||||||
const filePath = 'node_modules'
|
const paths = 'node_modules'
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
const cachePaths = [path.resolve(filePath)]
|
const cachePaths = [path.resolve(paths)]
|
||||||
const logWarningMock = jest.spyOn(core, 'warning')
|
const logWarningMock = jest.spyOn(core, 'warning')
|
||||||
const signedUploadURL = 'https://blob-storage.local?signed=true'
|
const signedUploadURL = 'https://blob-storage.local?signed=true'
|
||||||
|
|
||||||
|
@ -167,7 +163,7 @@ test('finalize save cache failure', async () => {
|
||||||
.spyOn(cacheUtils, 'getCompressionMethod')
|
.spyOn(cacheUtils, 'getCompressionMethod')
|
||||||
.mockReturnValueOnce(Promise.resolve(compression))
|
.mockReturnValueOnce(Promise.resolve(compression))
|
||||||
|
|
||||||
const cacheVersion = cacheUtils.getCacheVersion([filePath], compression)
|
const cacheVersion = cacheUtils.getCacheVersion([paths], compression)
|
||||||
const archiveFileSize = 1024
|
const archiveFileSize = 1024
|
||||||
jest
|
jest
|
||||||
.spyOn(cacheUtils, 'getArchiveFileSizeInBytes')
|
.spyOn(cacheUtils, 'getArchiveFileSizeInBytes')
|
||||||
|
@ -177,46 +173,41 @@ test('finalize save cache failure', async () => {
|
||||||
.spyOn(CacheServiceClientJSON.prototype, 'FinalizeCacheEntryUpload')
|
.spyOn(CacheServiceClientJSON.prototype, 'FinalizeCacheEntryUpload')
|
||||||
.mockReturnValue(Promise.resolve({ok: false, entryId: ''}))
|
.mockReturnValue(Promise.resolve({ok: false, entryId: ''}))
|
||||||
|
|
||||||
const cacheId = await saveCache([filePath], primaryKey)
|
const cacheId = await saveCache([paths], key)
|
||||||
|
|
||||||
expect(createCacheEntryMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(createCacheEntryMock).toHaveBeenCalledWith({
|
expect(createCacheEntryMock).toHaveBeenCalledWith({
|
||||||
key: primaryKey,
|
key,
|
||||||
version: cacheVersion
|
version: cacheVersion
|
||||||
})
|
})
|
||||||
|
|
||||||
const archiveFolder = '/foo/bar'
|
const archiveFolder = '/foo/bar'
|
||||||
const archiveFile = path.join(archiveFolder, CacheFilename.Zstd)
|
const archiveFile = path.join(archiveFolder, CacheFilename.Zstd)
|
||||||
expect(createTarMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(createTarMock).toHaveBeenCalledWith(
|
expect(createTarMock).toHaveBeenCalledWith(
|
||||||
archiveFolder,
|
archiveFolder,
|
||||||
cachePaths,
|
cachePaths,
|
||||||
compression
|
compression
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(uploadCacheMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(uploadCacheMock).toHaveBeenCalledWith(signedUploadURL, archiveFile)
|
expect(uploadCacheMock).toHaveBeenCalledWith(signedUploadURL, archiveFile)
|
||||||
expect(getCompressionMock).toHaveBeenCalledTimes(1)
|
expect(getCompressionMock).toHaveBeenCalledTimes(1)
|
||||||
|
|
||||||
expect(finalizeCacheEntryMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(finalizeCacheEntryMock).toHaveBeenCalledWith({
|
expect(finalizeCacheEntryMock).toHaveBeenCalledWith({
|
||||||
key: primaryKey,
|
key,
|
||||||
version: cacheVersion,
|
version: cacheVersion,
|
||||||
sizeBytes: archiveFileSize.toString()
|
sizeBytes: archiveFileSize.toString()
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(cacheId).toBe(-1)
|
expect(cacheId).toBe(-1)
|
||||||
expect(logWarningMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(logWarningMock).toHaveBeenCalledWith(
|
expect(logWarningMock).toHaveBeenCalledWith(
|
||||||
`Failed to save: Unable to finalize cache with key ${primaryKey}, another job may be finalizing this cache.`
|
`Failed to save: Unable to finalize cache with key ${key}, another job may be finalizing this cache.`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('save with uploadCache Server error will fail', async () => {
|
test('save with uploadCache Server error will fail', async () => {
|
||||||
const filePath = 'node_modules'
|
const paths = 'node_modules'
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
const logWarningMock = jest.spyOn(core, 'warning')
|
const logWarningMock = jest.spyOn(core, 'warning')
|
||||||
const signedUploadURL = 'https://signed-upload-url.com'
|
const signedUploadURL = 'https://blob-storage.local?signed=true'
|
||||||
jest
|
jest
|
||||||
.spyOn(CacheServiceClientJSON.prototype, 'CreateCacheEntry')
|
.spyOn(CacheServiceClientJSON.prototype, 'CreateCacheEntry')
|
||||||
.mockReturnValue(
|
.mockReturnValue(
|
||||||
|
@ -227,9 +218,8 @@ test('save with uploadCache Server error will fail', async () => {
|
||||||
.spyOn(uploadCacheModule, 'uploadCacheFile')
|
.spyOn(uploadCacheModule, 'uploadCacheFile')
|
||||||
.mockReturnValueOnce(Promise.reject(new Error('HTTP Error Occurred')))
|
.mockReturnValueOnce(Promise.reject(new Error('HTTP Error Occurred')))
|
||||||
|
|
||||||
const cacheId = await saveCache([filePath], primaryKey)
|
const cacheId = await saveCache([paths], key)
|
||||||
|
|
||||||
expect(logWarningMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(logWarningMock).toHaveBeenCalledWith(
|
expect(logWarningMock).toHaveBeenCalledWith(
|
||||||
`Failed to save: HTTP Error Occurred`
|
`Failed to save: HTTP Error Occurred`
|
||||||
)
|
)
|
||||||
|
@ -237,9 +227,9 @@ test('save with uploadCache Server error will fail', async () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('save with valid inputs uploads a cache', async () => {
|
test('save with valid inputs uploads a cache', async () => {
|
||||||
const filePath = 'node_modules'
|
const paths = 'node_modules'
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
const cachePaths = [path.resolve(filePath)]
|
const cachePaths = [path.resolve(paths)]
|
||||||
const signedUploadURL = 'https://blob-storage.local?signed=true'
|
const signedUploadURL = 'https://blob-storage.local?signed=true'
|
||||||
const createTarMock = jest.spyOn(tar, 'createTar')
|
const createTarMock = jest.spyOn(tar, 'createTar')
|
||||||
|
|
||||||
|
@ -269,28 +259,25 @@ test('save with valid inputs uploads a cache', async () => {
|
||||||
const getCompressionMock = jest
|
const getCompressionMock = jest
|
||||||
.spyOn(cacheUtils, 'getCompressionMethod')
|
.spyOn(cacheUtils, 'getCompressionMethod')
|
||||||
.mockReturnValue(Promise.resolve(compression))
|
.mockReturnValue(Promise.resolve(compression))
|
||||||
const cacheVersion = cacheUtils.getCacheVersion([filePath], compression)
|
const cacheVersion = cacheUtils.getCacheVersion([paths], compression)
|
||||||
|
|
||||||
const finalizeCacheEntryMock = jest
|
const finalizeCacheEntryMock = jest
|
||||||
.spyOn(CacheServiceClientJSON.prototype, 'FinalizeCacheEntryUpload')
|
.spyOn(CacheServiceClientJSON.prototype, 'FinalizeCacheEntryUpload')
|
||||||
.mockReturnValue(Promise.resolve({ok: true, entryId: cacheId.toString()}))
|
.mockReturnValue(Promise.resolve({ok: true, entryId: cacheId.toString()}))
|
||||||
|
|
||||||
const expectedCacheId = await saveCache([filePath], primaryKey)
|
const expectedCacheId = await saveCache([paths], key)
|
||||||
|
|
||||||
const archiveFolder = '/foo/bar'
|
const archiveFolder = '/foo/bar'
|
||||||
const archiveFile = path.join(archiveFolder, CacheFilename.Zstd)
|
const archiveFile = path.join(archiveFolder, CacheFilename.Zstd)
|
||||||
expect(uploadCacheMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(uploadCacheMock).toHaveBeenCalledWith(signedUploadURL, archiveFile)
|
expect(uploadCacheMock).toHaveBeenCalledWith(signedUploadURL, archiveFile)
|
||||||
expect(createTarMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(createTarMock).toHaveBeenCalledWith(
|
expect(createTarMock).toHaveBeenCalledWith(
|
||||||
archiveFolder,
|
archiveFolder,
|
||||||
cachePaths,
|
cachePaths,
|
||||||
compression
|
compression
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(finalizeCacheEntryMock).toHaveBeenCalledTimes(1)
|
|
||||||
expect(finalizeCacheEntryMock).toHaveBeenCalledWith({
|
expect(finalizeCacheEntryMock).toHaveBeenCalledWith({
|
||||||
key: primaryKey,
|
key,
|
||||||
version: cacheVersion,
|
version: cacheVersion,
|
||||||
sizeBytes: archiveFileSize.toString()
|
sizeBytes: archiveFileSize.toString()
|
||||||
})
|
})
|
||||||
|
@ -301,11 +288,11 @@ test('save with valid inputs uploads a cache', async () => {
|
||||||
|
|
||||||
test('save with non existing path should not save cache using v2 saveCache', async () => {
|
test('save with non existing path should not save cache using v2 saveCache', async () => {
|
||||||
const path = 'node_modules'
|
const path = 'node_modules'
|
||||||
const primaryKey = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
const key = 'Linux-node-bb828da54c148048dd17899ba9fda624811cfb43'
|
||||||
jest.spyOn(cacheUtils, 'resolvePaths').mockImplementation(async () => {
|
jest.spyOn(cacheUtils, 'resolvePaths').mockImplementation(async () => {
|
||||||
return []
|
return []
|
||||||
})
|
})
|
||||||
await expect(saveCache([path], primaryKey)).rejects.toThrowError(
|
await expect(saveCache([path], key)).rejects.toThrowError(
|
||||||
`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`
|
`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue