Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion packages/next/src/server/image-optimizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,10 @@ export async function fetchExternalImage(
'"url" parameter is valid but upstream response timed out'
)
}
throw err
throw new ImageError(
502,
'"url" parameter is valid but upstream request failed'
)
}

const locationHeader = res.headers.get('Location')
Expand Down
17 changes: 17 additions & 0 deletions test/unit/image-optimizer/fetch-external-image.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,4 +233,21 @@ describe('fetchExternalImage', () => {
expect(result.buffer.length).toBe(maximumResponseBody)
})
})
describe('upstream fetch errors', () => {
it('should throw a 502 ImageError when the upstream fetch fails', async () => {
global.fetch = jest.fn().mockRejectedValue(new Error('fetch failed'))

const error = await fetchExternalImage(
'https://example.com/image.jpg',
false,
50_000_000
).catch((e) => e)

expect(error).toBeInstanceOf(ImageError)
expect((error as ImageError).statusCode).toBe(502)
expect((error as ImageError).message).toBe(
'"url" parameter is valid but upstream request failed'
)
})
})
})