From 5c319202896ec0b0fb781f1a5a74069cdf73b2a6 Mon Sep 17 00:00:00 2001 From: Katalina T Date: Wed, 5 Jun 2019 05:27:32 -0500 Subject: [PATCH] [rpc/nats]: fix tests to properly hook handlers, handle encodings --- .../roleypoly-rpc/src/utils/NATSTransport.ts | 25 ++++++++++++------- .../src/utils/__test__/NATSTransport.test.ts | 6 ++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/roleypoly-rpc/src/utils/NATSTransport.ts b/packages/roleypoly-rpc/src/utils/NATSTransport.ts index 2872428..c964756 100644 --- a/packages/roleypoly-rpc/src/utils/NATSTransport.ts +++ b/packages/roleypoly-rpc/src/utils/NATSTransport.ts @@ -1,5 +1,9 @@ import NATS, { connect, NatsError } from 'nats' import Bento, { Transport, IBentoSerializer } from '@kayteh/bento' +import console = require('console') + +const txtEnc = new TextEncoder() +const txtDec = new TextDecoder() export default class NATSTransport extends Transport { NATS: NATS.Client @@ -7,8 +11,8 @@ export default class NATSTransport extends Transport { constructor ( bento: Bento, serializer: IBentoSerializer, - addr: string = 'nats://localhsot:4222/', - private prefix: string = '' + addr: string = 'nats://localhost:4222/', + private prefix: string = 'roleypoly' ) { super(bento, serializer) @@ -19,22 +23,25 @@ export default class NATSTransport extends Transport { } public hookHandlers = () => { - for (const svc in this.bento.serviceRegistry.keys) { - this.NATS.subscribe(`${this.prefix}-rpc:${svc}`, this.rpcHandler) + for (let service of this.bento.serviceRegistry.keys()) { + this.NATS.subscribe(`rp:${this.prefix}:${service}`, this.rpcHandler) } } - rpcHandler = async (request: ArrayBuffer, replyTo: string) => { - this.NATS.publish(replyTo, await this.receiver({ + rpcHandler = async (request: string, replyTo: string) => { + // console.log('rpcHandler', { request, replyTo }) + const output = await this.receiver({ ctx: {}, - buffer: request - })) + buffer: txtEnc.encode(request) + }) + this.NATS.publish(replyTo, txtDec.decode(output)) } sender (data: ArrayBuffer, { service }: { service: string }): Promise { return new Promise((resolve, reject) => { - this.NATS.requestOne(`${this.prefix}-rpc:${service}`, data, 5000, (incoming: NatsError | Buffer) => { + this.NATS.requestOne(`rp:${this.prefix}:${service}`, txtDec.decode(data), 5000, (incoming: NatsError | ArrayBuffer) => { if (incoming instanceof NatsError) { + console.error('NATSError', incoming) reject(incoming) return } diff --git a/packages/roleypoly-rpc/src/utils/__test__/NATSTransport.test.ts b/packages/roleypoly-rpc/src/utils/__test__/NATSTransport.test.ts index 0b6e000..b9952b8 100644 --- a/packages/roleypoly-rpc/src/utils/__test__/NATSTransport.test.ts +++ b/packages/roleypoly-rpc/src/utils/__test__/NATSTransport.test.ts @@ -9,13 +9,17 @@ const getCC = () => { const bento2 = new Bento() const tt = new NATSTransport(bento, new JSONSerializer({ verbose: true }), 'nats://localhost:4222/', '' + NOW) + const tt2 = new NATSTransport(bento2, new JSONSerializer({ verbose: true }), 'nats://localhost:4222/', '' + NOW) bento.transport = tt - bento2.transport = tt + bento2.transport = tt2 bento.service(MockBackendClient.__SERVICE__, MockBackendServer) const cc = bento2.client(MockBackendClient) + tt.hookHandlers() + tt2.hookHandlers() + return cc }