From 0cae20033c2359b09f30557b7fe9eaa51f74565f Mon Sep 17 00:00:00 2001 From: Jonathan Jogenfors Date: Tue, 18 Feb 2025 01:04:38 +0100 Subject: [PATCH] fix(server): more e2e library flakiness cleanup (#16176) --- e2e/src/api/specs/library.e2e-spec.ts | 93 +++++---------------------- e2e/src/utils.ts | 10 ++- 2 files changed, 21 insertions(+), 82 deletions(-) diff --git a/e2e/src/api/specs/library.e2e-spec.ts b/e2e/src/api/specs/library.e2e-spec.ts index 141b23d099..19160fec88 100644 --- a/e2e/src/api/specs/library.e2e-spec.ts +++ b/e2e/src/api/specs/library.e2e-spec.ts @@ -312,7 +312,7 @@ describe('/libraries', () => { importPaths: [`${testAssetDirInternal}/temp/directoryA`], }); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { originalPath: `${testAssetDirInternal}/temp/directoryA/assetA.png`, @@ -332,7 +332,7 @@ describe('/libraries', () => { exclusionPatterns: ['**/directoryA'], }); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -346,7 +346,7 @@ describe('/libraries', () => { importPaths: [`${testAssetDirInternal}/temp/directoryA`, `${testAssetDirInternal}/temp/directoryB`], }); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -365,7 +365,7 @@ describe('/libraries', () => { utils.createImageFile(`${testAssetDir}/temp/folder, a/assetA.png`); utils.createImageFile(`${testAssetDir}/temp/folder, b/assetB.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -387,7 +387,7 @@ describe('/libraries', () => { utils.createImageFile(`${testAssetDir}/temp/folder{ a/assetA.png`); utils.createImageFile(`${testAssetDir}/temp/folder} b/assetB.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -439,7 +439,7 @@ describe('/libraries', () => { utils.createImageFile(`${testAssetDir}/temp/folder${char}1/asset1.png`); utils.createImageFile(`${testAssetDir}/temp/folder${char}2/asset2.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -464,14 +464,11 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/reimport/asset.jpg`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); cpSync(`${testAssetDir}/albums/nature/tanners_ridge.jpg`, `${testAssetDir}/temp/reimport/asset.jpg`); await utimes(`${testAssetDir}/temp/reimport/asset.jpg`, 447_775_200_001); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, @@ -503,12 +500,11 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/reimport/asset.jpg`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); cpSync(`${testAssetDir}/albums/nature/tanners_ridge.jpg`, `${testAssetDir}/temp/reimport/asset.jpg`); await utimes(`${testAssetDir}/temp/reimport/asset.jpg`, 447_775_200_000); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, @@ -539,14 +535,13 @@ describe('/libraries', () => { utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); expect(assets.count).toBe(1); utils.removeImageFile(`${testAssetDir}/temp/offline/offline.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const trashedAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); expect(trashedAsset.originalPath).toBe(`${testAssetDirInternal}/temp/offline/offline.png`); @@ -565,7 +560,6 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); expect(assets.count).toBe(1); @@ -576,7 +570,7 @@ describe('/libraries', () => { importPaths: [`${testAssetDirInternal}/temp/another-path/`], }); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const trashedAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); expect(trashedAsset.originalPath).toBe(`${testAssetDirInternal}/temp/offline/offline.png`); @@ -597,7 +591,6 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, @@ -608,7 +601,6 @@ describe('/libraries', () => { await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: ['**/directoryB/**'] }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const trashedAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); expect(trashedAsset.isTrashed).toBe(true); @@ -631,12 +623,11 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets: assetsBefore } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); expect(assetsBefore.count).toBeGreaterThan(1); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -655,10 +646,6 @@ describe('/libraries', () => { await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); - const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); expect(newAssets.items).toEqual([ @@ -681,9 +668,6 @@ describe('/libraries', () => { cpSync(`${testAssetDir}/formats/raw/Nikon/D80/glarus.nef`, `${testAssetDir}/temp/xmp/glarus.nef`); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -708,9 +692,6 @@ describe('/libraries', () => { cpSync(`${testAssetDir}/formats/raw/Nikon/D80/glarus.nef`, `${testAssetDir}/temp/xmp/glarus.nef`); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -735,18 +716,12 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); cpSync(`${testAssetDir}/metadata/xmp/dates/2010.xmp`, `${testAssetDir}/temp/xmp/glarus.nef.xmp`); unlinkSync(`${testAssetDir}/temp/xmp/glarus.xmp`); await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_001); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -770,17 +745,11 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); cpSync(`${testAssetDir}/metadata/xmp/dates/2000.xmp`, `${testAssetDir}/temp/xmp/glarus.xmp`); await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_001); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -804,17 +773,11 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); cpSync(`${testAssetDir}/metadata/xmp/dates/2000.xmp`, `${testAssetDir}/temp/xmp/glarus.nef.xmp`); await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_001); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -839,18 +802,12 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); cpSync(`${testAssetDir}/metadata/xmp/dates/2010.xmp`, `${testAssetDir}/temp/xmp/glarus.xmp`); unlinkSync(`${testAssetDir}/temp/xmp/glarus.nef.xmp`); await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_001); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -875,17 +832,11 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); unlinkSync(`${testAssetDir}/temp/xmp/glarus.nef.xmp`); await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_001); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -910,17 +861,11 @@ describe('/libraries', () => { await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_000); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); unlinkSync(`${testAssetDir}/temp/xmp/glarus.xmp`); await utimes(`${testAssetDir}/temp/xmp/glarus.nef`, 447_775_200_001); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); - await utils.waitForQueueFinish(admin.accessToken, 'sidecar'); - await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); const { assets: newAssets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); @@ -944,13 +889,12 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const offlineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); expect(offlineAsset.isTrashed).toBe(true); @@ -964,7 +908,7 @@ describe('/libraries', () => { utils.renameImageFile(`${testAssetDir}/temp/offline.png`, `${testAssetDir}/temp/offline/offline.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const backOnlineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); @@ -987,13 +931,12 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); { const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, withDeleted: true }); @@ -1014,7 +957,7 @@ describe('/libraries', () => { importPaths: [`${testAssetDirInternal}/temp/another-path`], }); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const stillOfflineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); @@ -1039,13 +982,12 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); { const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, withDeleted: true }); @@ -1062,7 +1004,7 @@ describe('/libraries', () => { await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: ['**/offline/**'] }); - await utils.scan(admin.accessToken, library.id, true); + await utils.scan(admin.accessToken, library.id); const stillOfflineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); @@ -1183,7 +1125,6 @@ describe('/libraries', () => { }); await utils.scan(admin.accessToken, library.id); - await utils.waitForQueueFinish(admin.accessToken, 'library'); const { status, body } = await request(app) .delete(`/libraries/${library.id}`) diff --git a/e2e/src/utils.ts b/e2e/src/utils.ts index e55fe720c1..ecd002a8b9 100644 --- a/e2e/src/utils.ts +++ b/e2e/src/utils.ts @@ -555,14 +555,12 @@ export const utils = { return key.secret; }, - scan: async (accessToken: string, id: string, wait = false) => { + scan: async (accessToken: string, id: string) => { await scanLibrary({ id }, { headers: asBearerAuth(accessToken) }); - if (wait) { - await utils.waitForQueueFinish(accessToken, 'library'); - await utils.waitForQueueFinish(accessToken, 'sidecar'); - await utils.waitForQueueFinish(accessToken, 'metadataExtraction'); - } + await utils.waitForQueueFinish(accessToken, 'library'); + await utils.waitForQueueFinish(accessToken, 'sidecar'); + await utils.waitForQueueFinish(accessToken, 'metadataExtraction'); }, };