From 319c97b3d6846c2b5d75dd0565c6267593e54e97 Mon Sep 17 00:00:00 2001 From: Ricardo-M-L Date: Fri, 17 Apr 2026 16:22:57 +0800 Subject: [PATCH] fix(volcengine): rethrow errors in catch blocks instead of silently returning them All five VolcengineProvider methods (createSandbox, deleteSandbox, getSandbox, setSandboxTimeout, listSandboxes) caught errors and then did `return error`, treating the caught Error as a success value. The caller's `await provider.createSandbox(...)` would resolve with an Error instance instead of rejecting, which means try/catch at the call site never triggers and consumers can't distinguish success from failure without explicit `instanceof Error` checks on every response. Changed all catch blocks to `throw error` so promise rejections propagate naturally. Co-Authored-By: Claude Opus 4.7 (1M context) --- sdk/js/__test__/providers/volcengine.test.ts | 58 ++++++++++++++++++++ sdk/js/src/providers/volcengine.ts | 10 ++-- 2 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 sdk/js/__test__/providers/volcengine.test.ts diff --git a/sdk/js/__test__/providers/volcengine.test.ts b/sdk/js/__test__/providers/volcengine.test.ts new file mode 100644 index 00000000..dcdb28c3 --- /dev/null +++ b/sdk/js/__test__/providers/volcengine.test.ts @@ -0,0 +1,58 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; + +// Mock the sign module before importing VolcengineProvider +vi.mock('../../src/providers/sign', () => ({ + request: vi.fn(), +})); + +import { VolcengineProvider } from '../../src/providers/volcengine.js'; +import { request } from '../../src/providers/sign'; + +const mockedRequest = vi.mocked(request); + +describe('VolcengineProvider error handling', () => { + let provider: VolcengineProvider; + + beforeEach(() => { + vi.clearAllMocks(); + provider = new VolcengineProvider({ + accessKey: 'test-access-key', + secretKey: 'test-secret-key', + }); + }); + + it('createSandbox should throw errors instead of returning them', async () => { + const testError = new Error('API connection failed'); + mockedRequest.mockRejectedValue(testError); + + await expect(provider.createSandbox('func-123', 60)).rejects.toThrow('API connection failed'); + }); + + it('deleteSandbox should throw errors instead of returning them', async () => { + const testError = new Error('Sandbox not found'); + mockedRequest.mockRejectedValue(testError); + + await expect(provider.deleteSandbox('func-123', 'sb-123')).rejects.toThrow('Sandbox not found'); + }); + + it('getSandbox should throw errors instead of returning them', async () => { + const testError = new Error('Network error'); + mockedRequest.mockRejectedValue(testError); + + await expect(provider.getSandbox('func-123', 'sb-123')).rejects.toThrow('Network error'); + }); + + it('setSandboxTimeout should throw errors instead of returning them', async () => { + const testError = new Error('Invalid timeout'); + mockedRequest.mockRejectedValue(testError); + + await expect(provider.setSandboxTimeout('func-123', 'sb-123', 120)).rejects.toThrow('Invalid timeout'); + }); + + it('listSandboxes should throw errors instead of returning them', async () => { + const testError = new Error('Permission denied'); + mockedRequest.mockRejectedValue(testError); + + await expect(provider.listSandboxes('func-123')).rejects.toThrow('Permission denied'); + }); +}); diff --git a/sdk/js/src/providers/volcengine.ts b/sdk/js/src/providers/volcengine.ts index 27ea2622..5d0c91f7 100644 --- a/sdk/js/src/providers/volcengine.ts +++ b/sdk/js/src/providers/volcengine.ts @@ -86,7 +86,7 @@ export class VolcengineProvider extends BaseProvider { return response; } catch (error) { - return error; + throw error; } } @@ -124,7 +124,7 @@ export class VolcengineProvider extends BaseProvider { return response; } catch (error) { - return error; + throw error; } } @@ -202,7 +202,7 @@ export class VolcengineProvider extends BaseProvider { return response; } catch (error) { - return error; + throw error; } } @@ -241,7 +241,7 @@ export class VolcengineProvider extends BaseProvider { return response; } catch (error) { - return error; + throw error; } } @@ -301,7 +301,7 @@ export class VolcengineProvider extends BaseProvider { return response; } catch (error) { - return error; + throw error; } }