diff --git a/__tests__/e2e/rpc-disconnected.test.ts b/__tests__/e2e/rpc-disconnected.test.ts new file mode 100644 index 0000000..e94ea73 --- /dev/null +++ b/__tests__/e2e/rpc-disconnected.test.ts @@ -0,0 +1,40 @@ +import { RPCError, RPCErrorCode } from "@/core/RPCError"; +import { RPCHandler } from "@/index" +import { getRandomAvailablePort } from "@/utils/utils"; + +type serverProvider = { test: () => Promise }; + +describe('Rpc disconnected test', () => { + test('main', async () => { + const port = await getRandomAvailablePort(); + + const server = new RPCHandler(); + server.setProvider({ + test() { + return new Promise((resolve) => setTimeout(() => resolve('ok'), 1000)) + }, + }) + await server.listen({ + port, + }); + + const client = new RPCHandler(); + const session = await client.connect({ + url: `http://localhost:${port}`, + }); + const api = session.getAPI(); + + const callPromise = api.test() + + await session.connection.close(); + await expect(api.test()).rejects.toMatchObject( + expect.objectContaining({ + constructor: RPCError, + errorCode: RPCErrorCode.CONNECTION_DISCONNECTED + }) + ); + await expect(callPromise).rejects.toBeInstanceOf(RPCError); + await expect(callPromise).rejects + .toHaveProperty('errorCode', RPCErrorCode.CONNECTION_DISCONNECTED); + }) +})