quasi unhook test

This commit is contained in:
2019-09-21 18:34:33 +02:00
parent 8d8132b1b6
commit 83aa31c091
3 changed files with 60 additions and 8 deletions
+2 -3
View File
@@ -17,8 +17,8 @@ export class RPCSocket implements I.Socket{
Object.defineProperty(this, 'socket', {value: undefined, writable: true})
}
public hook(name: T.Name, args: T.Arg){
return this.socket.hook(name, args)
public hook(name: T.Name, handler: (...args:any[]) => any | Promise<any>){
return this.socket.hook(name, handler)
}
public unhook(name: T.Name){
@@ -47,7 +47,6 @@ export class RPCSocket implements I.Socket{
public async connect(){
this.socket = await bsock.connect(this.port, this.server, this.tls)
this.on('error', () => {})
const info:T.ExtendedRpcInfo[] = await this.info()
info.forEach(i => {
+1 -1
View File
@@ -8,7 +8,7 @@ export interface Exporter<T = {}>{
export interface Socket extends Destroyable {
port: number
hook: (rpcname: T.Name, ...args: T.Any[]) => I.Socket
hook: (rpcname: T.Name, handler: (...args:any[]) => any | Promise<any>) => I.Socket
unhook: (rpcname:T.Name) => I.Socket
call: (rpcname:T.Name, ...args: T.Any[]) => Promise<T.Any>
fire: (rpcname:T.Name, ...args: T.Any[]) => Promise<T.Any>
+57 -4
View File
@@ -1,10 +1,9 @@
import { describe, it, beforeEach } from "mocha";
import { expect } from "chai";
import { describe, it } from "mocha";
import { RPCServer } from '../src/Backend'
import * as uuidv4 from "uuid/v4"
import { RPCSocket } from "../src/Frontend";
import { SubscriptionResponse } from "../src/Types";
function makeServer(){
let subcallback
@@ -138,5 +137,59 @@ describe('RPCSocket', () => {
await client['test'].triggerCallback("test_", "callback_")
})
})
})
describe('It should do unhook', () => {
let candy = "OK"
let cb: Function
let client: RPCSocket
let server: RPCServer<{topic: string}>
before(async() => {
server = new RPCServer<{ topic: string }>(20000, [{
name: "test",
exportRPCs: () => [{
name: 'subscribe',
hook: async(callback) => {
cb = callback
return {
result: "Success",
uuid: uuidv4(),
topic: "test"
}
}
},
function checkCandy():string { cb(candy); return candy },
function stealCandy():string { candy = "_OK"; cb(candy); cb = (...any) => console.log.apply(console,["Server:", ...any]); return candy }
]
}],{
connectionHandler: (socket) => { console.log("connectionHandler OK") },
closeHandler: (socket) => { console.log("closeHandler OK") },
errorHandler: (socket, err) => { console.error("errorHandler OK SO YOU SHOULDN'T SEE THIS"); throw err }
})
client = new RPCSocket(20000, "localhost")
return await client.connect()
})
after(() => {
client.destroy()
server.destroy()
})
it('Unhook+unsubscribe should stop callbacks', (done) => {
client['test'].subscribe(c => console.log("Client: "+c)).then( async (res: SubscriptionResponse) => {
const r1 = await client['test'].checkCandy()
const r3 = await client['test'].stealCandy()
client.unhook(res.uuid)
console.log("---- No client output below this line")
const r2 = await client['test'].checkCandy()
const r4 = await client['test'].checkCandy()
console.log("---- More output below")
if(r1 === "OK" && r3 === "_OK" && r2 === "_OK" && r4 === "_OK")
done()
else
done(new Error("Results did not match: "+[r1,r2,r3,r4]))
})
})
})