import { DownloadOptions, UploadOptions, getDownloadOptions, getUploadOptions } from '../src/options' const useAzureSdk = false const concurrentBlobDownloads = true const downloadConcurrency = 8 const timeoutInMs = 30000 const segmentTimeoutInMs = 600000 const lookupOnly = false test('getDownloadOptions sets defaults', async () => { const actualOptions = getDownloadOptions() expect(actualOptions).toEqual({ useAzureSdk, concurrentBlobDownloads, downloadConcurrency, timeoutInMs, segmentTimeoutInMs, lookupOnly }) }) test('getDownloadOptions overrides all settings', async () => { const expectedOptions: DownloadOptions = { useAzureSdk: true, concurrentBlobDownloads: false, downloadConcurrency: 14, timeoutInMs: 20000, segmentTimeoutInMs: 3600000, lookupOnly: true } const actualOptions = getDownloadOptions(expectedOptions) expect(actualOptions).toEqual(expectedOptions) }) test('getUploadOptions sets defaults', async () => { const expectedOptions: UploadOptions = { uploadConcurrency: 4, uploadChunkSize: 32 * 1024 * 1024, useAzureSdk: false } const actualOptions = getUploadOptions() expect(actualOptions).toEqual(expectedOptions) }) test('getUploadOptions overrides all settings', async () => { const expectedOptions: UploadOptions = { uploadConcurrency: 2, uploadChunkSize: 16 * 1024 * 1024, useAzureSdk: true } const actualOptions = getUploadOptions(expectedOptions) expect(actualOptions).toEqual(expectedOptions) }) test('env variables override all getUploadOptions settings', async () => { const expectedOptions: UploadOptions = { uploadConcurrency: 16, uploadChunkSize: 64 * 1024 * 1024, useAzureSdk: true } process.env.CACHE_UPLOAD_CONCURRENCY = '16' process.env.CACHE_UPLOAD_CHUNK_SIZE = '64' const actualOptions = getUploadOptions(expectedOptions) expect(actualOptions).toEqual(expectedOptions) }) test('env variables override all getUploadOptions settings but do not exceed caps', async () => { const expectedOptions: UploadOptions = { uploadConcurrency: 32, uploadChunkSize: 128 * 1024 * 1024, useAzureSdk: true } process.env.CACHE_UPLOAD_CONCURRENCY = '64' process.env.CACHE_UPLOAD_CHUNK_SIZE = '256' const actualOptions = getUploadOptions(expectedOptions) expect(actualOptions).toEqual(expectedOptions) }) test('getDownloadOptions overrides download timeout minutes', async () => { const expectedOptions: DownloadOptions = { useAzureSdk: false, downloadConcurrency: 14, timeoutInMs: 20000, segmentTimeoutInMs: 3600000, lookupOnly: true } process.env.SEGMENT_DOWNLOAD_TIMEOUT_MINS = '10' const actualOptions = getDownloadOptions(expectedOptions) expect(actualOptions.useAzureSdk).toEqual(expectedOptions.useAzureSdk) expect(actualOptions.downloadConcurrency).toEqual( expectedOptions.downloadConcurrency ) expect(actualOptions.timeoutInMs).toEqual(expectedOptions.timeoutInMs) expect(actualOptions.segmentTimeoutInMs).toEqual(600000) expect(actualOptions.lookupOnly).toEqual(expectedOptions.lookupOnly) })