grenache-nodejs-http 0.7.12 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/examples/rpc_server.js +1 -3
  2. package/examples/rpc_server_stream.js +1 -3
  3. package/examples/ssl/rpc_client_map.js +4 -4
  4. package/examples/ssl/rpc_server.js +4 -5
  5. package/lib/TransportRPCClient.js +61 -34
  6. package/lib/TransportRPCServer.js +1 -1
  7. package/package.json +17 -11
  8. package/test/before-after.js +10 -12
  9. package/test/certs/ca-crt.pem +19 -0
  10. package/test/certs/ca-crt.srl +1 -0
  11. package/test/certs/ca-key.pem +28 -0
  12. package/test/certs/client1-crt.pem +17 -0
  13. package/test/certs/client1-csr.pem +15 -0
  14. package/test/certs/client1-key.pem +28 -0
  15. package/test/certs/server-crt.pem +17 -0
  16. package/test/certs/server-csr.pem +15 -0
  17. package/test/certs/server-key.pem +28 -0
  18. package/test/helper.js +26 -32
  19. package/test/peer-rpc-server-secure-buffered.js +262 -0
  20. package/test/peer-rpc-server-secure-streaming.js +224 -0
  21. package/test/peer-rpc-server-secure.js +96 -0
  22. package/test/peer-rpc-server.js +76 -0
  23. package/examples/ssl/ca-crt.pem +0 -32
  24. package/examples/ssl/ca-crt.srl +0 -1
  25. package/examples/ssl/ca-key.pem +0 -54
  26. package/examples/ssl/ca.cnf +0 -31
  27. package/examples/ssl/client1-crt.pem +0 -32
  28. package/examples/ssl/client1-csr.pem +0 -29
  29. package/examples/ssl/client1-key.pem +0 -51
  30. package/examples/ssl/client1.cnf +0 -26
  31. package/examples/ssl/client2-crt.pem +0 -32
  32. package/examples/ssl/client2-csr.pem +0 -29
  33. package/examples/ssl/client2-key.pem +0 -51
  34. package/examples/ssl/client2.cnf +0 -26
  35. package/examples/ssl/server-crt.pem +0 -32
  36. package/examples/ssl/server-csr.pem +0 -29
  37. package/examples/ssl/server-key.pem +0 -51
  38. package/examples/ssl/server.cnf +0 -26
@@ -0,0 +1,262 @@
1
+ /* eslint-env mocha */
2
+
3
+ const assert = require('assert')
4
+ const { PassThrough } = require('stream')
5
+ const fs = require('fs')
6
+ const path = require('path')
7
+ const { PeerRPCClient, PeerRPCServer } = require('../')
8
+ const Link = require('grenache-nodejs-link')
9
+ const setupHooks = require('./before-after.js')
10
+
11
+ const PORT = 1337
12
+ let link, peer, peerSrvBuf, serviceBuf, stop
13
+ describe('RPC integration', () => {
14
+ setupHooks((grapes) => {
15
+ link = new Link({
16
+ grape: 'http://127.0.0.1:30001'
17
+ })
18
+ link.start()
19
+
20
+ peer = new PeerRPCClient(link, {
21
+ secure: {
22
+ key: fs.readFileSync(path.join(__dirname, './certs/client1-key.pem')),
23
+ cert: fs.readFileSync(path.join(__dirname, './certs/client1-crt.pem')),
24
+ ca: fs.readFileSync(path.join(__dirname, './certs/ca-crt.pem')),
25
+ rejectUnauthorized: false // take care, can be dangerous in production!
26
+ }
27
+ })
28
+ peer.init()
29
+
30
+ peerSrvBuf = new PeerRPCServer(link, {
31
+ secure: {
32
+ key: fs.readFileSync(path.join(__dirname, './certs/server-key.pem')),
33
+ cert: fs.readFileSync(path.join(__dirname, './certs/server-crt.pem')),
34
+ ca: fs.readFileSync(path.join(__dirname, './certs/ca-crt.pem')),
35
+ requestCert: true,
36
+ rejectUnauthorized: false // take care, can be dangerous in production!
37
+ },
38
+ timeout: 300000
39
+ })
40
+
41
+ peerSrvBuf.init()
42
+ serviceBuf = peerSrvBuf.transport('buffered')
43
+ serviceBuf.listen(PORT)
44
+
45
+ link.announce('rpc_buf', serviceBuf.port, {}, (err, res) => {
46
+ if (err) throw Error('error in announce, setup')
47
+ })
48
+
49
+ stop = () => {
50
+ peer.stop()
51
+ link.stop()
52
+ serviceBuf.stop()
53
+ }
54
+ })
55
+
56
+ it('buffered parsing works, objects', (done) => {
57
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
58
+ assert.ok(typeof rid === 'string')
59
+ assert.strictEqual(key, 'rpc_buf')
60
+ assert.deepStrictEqual(payload, { hello: 'world' })
61
+
62
+ assert.strictEqual(meta.isStream, false)
63
+
64
+ handler.reply(null, { hello: 'helloworld' })
65
+ })
66
+
67
+ const opts = { timeout: 100000 }
68
+ peer.request('rpc_buf', { hello: 'world' }, opts, (err, result) => {
69
+ if (err) throw err
70
+
71
+ assert.deepStrictEqual(result, { hello: 'helloworld' })
72
+
73
+ stop()
74
+ done()
75
+ })
76
+ }).timeout(7000)
77
+
78
+ it('buffered parsing works, strings', (done) => {
79
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
80
+ assert.ok(typeof rid === 'string')
81
+ assert.strictEqual(key, 'rpc_buf')
82
+ assert.strictEqual(payload, 'hello')
83
+
84
+ assert.strictEqual(meta.isStream, false)
85
+
86
+ handler.reply(null, 'world')
87
+ })
88
+
89
+ const opts = { timeout: 100000 }
90
+ peer.request('rpc_buf', 'hello', opts, (err, result) => {
91
+ if (err) throw err
92
+
93
+ assert.strictEqual(result, 'world')
94
+
95
+ stop()
96
+ done()
97
+ })
98
+ }).timeout(7000)
99
+
100
+ it('buffered parsing works, compressed strings', (done) => {
101
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
102
+ assert.ok(typeof rid === 'string')
103
+ assert.strictEqual(key, 'rpc_buf')
104
+ assert.strictEqual(payload, 'hello')
105
+
106
+ assert.strictEqual(meta.isStream, false)
107
+ assert.strictEqual(meta.compress, true)
108
+
109
+ handler.reply(null, 'world')
110
+ })
111
+
112
+ const opts = { timeout: 100000, compress: true }
113
+ peer.request('rpc_buf', 'hello', opts, (err, result) => {
114
+ if (err) throw err
115
+
116
+ assert.strictEqual(result, 'world')
117
+
118
+ stop()
119
+ done()
120
+ })
121
+ }).timeout(7000)
122
+
123
+ it('buffered parsing works, strings from streaming client', (done) => {
124
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
125
+ assert.ok(typeof rid === 'string')
126
+ assert.strictEqual(key, 'rpc_buf')
127
+ assert.strictEqual(payload, 'hello')
128
+
129
+ assert.strictEqual(meta.isStream, true)
130
+
131
+ handler.reply(null, 'world')
132
+ })
133
+
134
+ const req = peer.stream('rpc_buf', {
135
+ timeout: 10000
136
+ })
137
+
138
+ req
139
+ .on('data', (data) => {
140
+ const d = JSON.parse(data.toString())
141
+ // ["65c5737f-bbce-40f9-b48a-af8bd8869d66",null,"world"]
142
+ assert.strictEqual(d[1], null)
143
+ assert.strictEqual(d[2], 'world')
144
+ stop()
145
+ done()
146
+ })
147
+ .on('end', () => {})
148
+ .on('error', (e) => { console.error(e) })
149
+
150
+ const writable = new PassThrough()
151
+ writable.write('["UUID", "rpc_buf", "hello"]')
152
+ writable.end()
153
+ writable.pipe(req)
154
+ }).timeout(7000)
155
+
156
+ it('buffered parsing works, objects from streaming client', (done) => {
157
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
158
+ assert.ok(typeof rid === 'string')
159
+ assert.strictEqual(key, 'rpc_buf')
160
+ assert.deepStrictEqual(payload, { hello: 'world' })
161
+
162
+ assert.strictEqual(meta.isStream, true)
163
+
164
+ handler.reply(null, { hello: 'helloworld' })
165
+ })
166
+
167
+ const req = peer.stream('rpc_buf', {
168
+ timeout: 10000
169
+ })
170
+
171
+ req
172
+ .on('data', (data) => {
173
+ const d = JSON.parse(data.toString())
174
+ assert.strictEqual(d[1], null)
175
+ assert.deepStrictEqual(d[2], { hello: 'helloworld' })
176
+ stop()
177
+ done()
178
+ })
179
+ .on('end', () => {})
180
+ .on('error', (e) => { console.error(e) })
181
+
182
+ const writable = new PassThrough()
183
+ writable.write('["UUID", "rpc_buf", { "hello": "world" }]')
184
+ writable.end()
185
+ writable.pipe(req)
186
+ }).timeout(7000)
187
+
188
+ it('buffered parsing works, extra headers', (done) => {
189
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
190
+ assert.ok(typeof rid === 'string')
191
+ assert.strictEqual(key, 'rpc_buf')
192
+ assert.deepStrictEqual(payload, { hello: 'world' })
193
+
194
+ assert.strictEqual(meta.action, 'uploadPublic')
195
+ assert.deepStrictEqual(meta.args, { foo: 'bar' })
196
+ assert.strictEqual(meta.isStream, true)
197
+
198
+ handler.reply(null, { hello: 'helloworld' })
199
+ })
200
+
201
+ const req = peer.stream('rpc_buf', {
202
+ timeout: 10000,
203
+ headers: { _a: 'uploadPublic', _ar: { foo: 'bar' } }
204
+ })
205
+
206
+ req
207
+ .on('data', (data) => {
208
+ const d = JSON.parse(data.toString())
209
+ assert.strictEqual(d[1], null)
210
+ assert.deepStrictEqual(d[2], { hello: 'helloworld' })
211
+ stop()
212
+ done()
213
+ })
214
+ .on('end', () => {})
215
+ .on('error', (e) => { console.error(e) })
216
+
217
+ const writable = new PassThrough()
218
+ writable.write('["UUID", "rpc_buf", { "hello": "world" }]')
219
+ writable.end()
220
+ writable.pipe(req)
221
+ }).timeout(7000)
222
+
223
+ it('buf/buf: serialized files work', (done) => {
224
+ serviceBuf.on('request', (rid, key, payload, handler, cert, meta) => {
225
+ assert.ok(typeof rid === 'string')
226
+ assert.strictEqual(key, 'rpc_buf')
227
+
228
+ assert.strictEqual(payload.action, 'uploadPublic')
229
+ assert.strictEqual(payload.args[1].key, 'example-amazon-dynamo-sosp2007-4.pdf')
230
+ assert.strictEqual(typeof payload.args[0], 'string')
231
+
232
+ assert.strictEqual(meta.isStream, false)
233
+
234
+ handler.reply(null, 'ok')
235
+ })
236
+
237
+ const opts = { timeout: 100000 }
238
+ const buf = fs.readFileSync(
239
+ path.join(__dirname, './example-amazon-dynamo-sosp2007.pdf')
240
+ )
241
+
242
+ const optsPdf = {
243
+ key: 'example-amazon-dynamo-sosp2007-4.pdf',
244
+ acl: 'public-read',
245
+ bucket: 'bfx-dev-robert',
246
+ contentType: 'application/pdf'
247
+ }
248
+
249
+ const queryUploadPublicPdf = {
250
+ action: 'uploadPublic',
251
+ args: [buf.toString('hex'), optsPdf]
252
+ }
253
+ peer.request('rpc_buf', queryUploadPublicPdf, opts, (err, result) => {
254
+ if (err) throw err
255
+
256
+ assert.deepStrictEqual(result, 'ok')
257
+
258
+ stop()
259
+ done()
260
+ })
261
+ }).timeout(7000)
262
+ })
@@ -0,0 +1,224 @@
1
+ /* eslint-env mocha */
2
+
3
+ const assert = require('assert')
4
+ const fs = require('fs')
5
+ const path = require('path')
6
+ const { PassThrough } = require('stream')
7
+ const { PeerRPCClient, PeerRPCServer } = require('../')
8
+ const Link = require('grenache-nodejs-link')
9
+ const setupHooks = require('./before-after.js')
10
+
11
+ const PORT = 1337
12
+ let link, peer, peerSrvStr, serviceStr, stop
13
+ describe('RPC integration', () => {
14
+ setupHooks((grapes) => {
15
+ link = new Link({
16
+ grape: 'http://127.0.0.1:30001'
17
+ })
18
+ link.start()
19
+
20
+ peer = new PeerRPCClient(link, {
21
+ secure: {
22
+ key: fs.readFileSync(path.join(__dirname, './certs/client1-key.pem')),
23
+ cert: fs.readFileSync(path.join(__dirname, './certs/client1-crt.pem')),
24
+ ca: fs.readFileSync(path.join(__dirname, './certs/ca-crt.pem')),
25
+ rejectUnauthorized: false // take care, can be dangerous in production!
26
+ }
27
+ })
28
+ peer.init()
29
+
30
+ peerSrvStr = new PeerRPCServer(link, {
31
+ secure: {
32
+ key: fs.readFileSync(path.join(__dirname, './certs/server-key.pem')),
33
+ cert: fs.readFileSync(path.join(__dirname, './certs/server-crt.pem')),
34
+ ca: fs.readFileSync(path.join(__dirname, './certs/ca-crt.pem')),
35
+ requestCert: true,
36
+ rejectUnauthorized: false // take care, can be dangerous in production!
37
+ },
38
+ timeout: 300000,
39
+ disableBuffered: true
40
+ })
41
+
42
+ peerSrvStr.init()
43
+ serviceStr = peerSrvStr.transport('stream')
44
+ serviceStr.listen(PORT)
45
+
46
+ link.announce('rpc_stream', serviceStr.port, {}, (err, res) => {
47
+ if (err) throw Error('error in announce, setup')
48
+ })
49
+
50
+ stop = () => {
51
+ peer.stop()
52
+ link.stop()
53
+ serviceStr.stop()
54
+ }
55
+ })
56
+
57
+ it('streaming works, objects, buffered client, reply handler', (done) => {
58
+ serviceStr.on('stream', (req, res, meta, handler) => {
59
+ assert.strictEqual(meta.isStream, false)
60
+
61
+ req.on('data', (d) => {
62
+ const [rid, key, args] = JSON.parse(d.toString())
63
+
64
+ assert.deepStrictEqual(args, { hello: 'world' })
65
+ assert.ok(typeof rid === 'string')
66
+ assert.strictEqual(key, 'rpc_stream')
67
+
68
+ handler.reply(rid, null, { hello: 'helloworld' })
69
+ })
70
+ })
71
+
72
+ const opts = { timeout: 100000 }
73
+ peer.request('rpc_stream', { hello: 'world' }, opts, (err, result) => {
74
+ if (err) throw err
75
+ assert.deepStrictEqual(result, { hello: 'helloworld' })
76
+
77
+ stop()
78
+ done()
79
+ })
80
+ }).timeout(7000)
81
+
82
+ it('streaming works, string, buffered client, reply handler', (done) => {
83
+ serviceStr.on('stream', (req, res, meta, handler) => {
84
+ assert.strictEqual(meta.isStream, false)
85
+
86
+ req.on('data', (d) => {
87
+ const [rid, key, args] = JSON.parse(d.toString())
88
+
89
+ assert.strictEqual(args, 'hello')
90
+ assert.ok(typeof rid === 'string')
91
+ assert.strictEqual(key, 'rpc_stream')
92
+
93
+ handler.reply(rid, null, 'world')
94
+ })
95
+ })
96
+
97
+ const opts = { timeout: 100000 }
98
+ peer.request('rpc_stream', 'hello', opts, (err, result) => {
99
+ if (err) throw err
100
+ assert.strictEqual(result, 'world')
101
+
102
+ stop()
103
+ done()
104
+ })
105
+ }).timeout(7000)
106
+
107
+ it('streaming works, string, buffered client, stream sent back', (done) => {
108
+ serviceStr.on('stream', (req, res, meta, handler) => {
109
+ assert.strictEqual(meta.isStream, false)
110
+
111
+ req.on('data', (d) => {
112
+ const [rid, key, args] = JSON.parse(d.toString())
113
+
114
+ assert.strictEqual(args, 'hello')
115
+ assert.ok(typeof rid === 'string')
116
+ assert.strictEqual(key, 'rpc_stream')
117
+
118
+ const writable = new PassThrough()
119
+ const payload = JSON.stringify([rid, null, 'world2'])
120
+ writable.pipe(res)
121
+ writable.write(payload)
122
+ writable.end()
123
+ })
124
+ })
125
+
126
+ const opts = { timeout: 100000 }
127
+ peer.request('rpc_stream', 'hello', opts, (err, result) => {
128
+ if (err) throw err
129
+ assert.strictEqual(result, 'world2')
130
+
131
+ stop()
132
+ done()
133
+ })
134
+ }).timeout(7000)
135
+
136
+ it('streaming works, buffer, stream client, stream on server', (done) => {
137
+ const reqPayload = Buffer.from('megalargefile')
138
+ const resPayload = Buffer.from('superlargefile')
139
+
140
+ serviceStr.on('stream', (req, res, meta, handler) => {
141
+ assert.strictEqual(meta.isStream, true)
142
+
143
+ req.on('data', (d) => {
144
+ const [rid, key] = meta.infoHeaders
145
+
146
+ assert.ok(d.equals(reqPayload), 'received Buffer equals payload on server')
147
+
148
+ assert.ok(typeof rid === 'string')
149
+ assert.strictEqual(key, 'rpc_stream')
150
+
151
+ const writable = new PassThrough()
152
+ writable.pipe(res)
153
+ writable.write(resPayload)
154
+ writable.end()
155
+ })
156
+ })
157
+
158
+ const req = peer.stream('rpc_stream', {
159
+ timeout: 10000
160
+ })
161
+
162
+ req
163
+ .on('data', (data) => {
164
+ assert.ok(data.equals(resPayload), 'received Buffer equals payload on client')
165
+
166
+ stop()
167
+ done()
168
+ })
169
+ .on('end', () => {})
170
+ .on('error', (e) => { console.error(e) })
171
+
172
+ const writable = new PassThrough()
173
+ writable.write(reqPayload)
174
+ writable.pipe(req)
175
+ }).timeout(7000)
176
+
177
+ it('streaming works, buffer, stream client, stream on server, additional headers', (done) => {
178
+ const reqPayload = Buffer.from('megalargefile')
179
+ const resPayload = Buffer.from('superlargefile')
180
+
181
+ serviceStr.on('stream', (req, res, meta, handler) => {
182
+ assert.strictEqual(meta.isStream, true)
183
+
184
+ req.on('data', (d) => {
185
+ const [rid, key] = meta.infoHeaders
186
+
187
+ assert.ok(d.equals(reqPayload), 'received Buffer equals payload on server')
188
+
189
+ assert.ok(typeof rid === 'string')
190
+ assert.strictEqual(key, 'rpc_stream')
191
+
192
+ assert.strictEqual(meta.action, 'uploadPublic')
193
+ assert.strictEqual(meta.args.foo, 'bar')
194
+
195
+ const writable = new PassThrough()
196
+ writable.pipe(res)
197
+ writable.write(resPayload)
198
+ writable.end()
199
+ })
200
+ })
201
+
202
+ const req = peer.stream('rpc_stream', {
203
+ timeout: 10000,
204
+ headers: {
205
+ _a: 'uploadPublic',
206
+ _ar: { foo: 'bar' }
207
+ }
208
+ })
209
+
210
+ req
211
+ .on('data', (data) => {
212
+ assert.ok(data.equals(resPayload), 'received Buffer equals payload on client')
213
+
214
+ stop()
215
+ done()
216
+ })
217
+ .on('end', () => {})
218
+ .on('error', (e) => { console.error(e) })
219
+
220
+ const writable = new PassThrough()
221
+ writable.write(reqPayload)
222
+ writable.pipe(req)
223
+ }).timeout(7000)
224
+ })
@@ -0,0 +1,96 @@
1
+ /* eslint-env mocha */
2
+
3
+ const assert = require('assert')
4
+ const fs = require('fs')
5
+ const path = require('path')
6
+ const { PeerRPCClient, PeerRPCServer } = require('../')
7
+ const Link = require('grenache-nodejs-link')
8
+ const setupHooks = require('./before-after.js')
9
+
10
+ const PORT = 1337
11
+ let link, peer, peerSrv, service, stop
12
+ describe('RPC integration', () => {
13
+ setupHooks((grapes) => {
14
+ link = new Link({
15
+ grape: 'http://127.0.0.1:30001'
16
+ })
17
+ link.start()
18
+
19
+ peer = new PeerRPCClient(link, {
20
+ secure: {
21
+ key: fs.readFileSync(path.join(__dirname, './certs/client1-key.pem')),
22
+ cert: fs.readFileSync(path.join(__dirname, './certs/client1-crt.pem')),
23
+ ca: fs.readFileSync(path.join(__dirname, './certs/ca-crt.pem')),
24
+ rejectUnauthorized: false // take care, can be dangerous in production!
25
+ }
26
+ })
27
+ peer.init()
28
+
29
+ peerSrv = new PeerRPCServer(link, {
30
+ secure: {
31
+ key: fs.readFileSync(path.join(__dirname, './certs/server-key.pem')),
32
+ cert: fs.readFileSync(path.join(__dirname, './certs/server-crt.pem')),
33
+ ca: fs.readFileSync(path.join(__dirname, './certs/ca-crt.pem')),
34
+ requestCert: true,
35
+ rejectUnauthorized: false // take care, can be dangerous in production!
36
+ },
37
+ timeout: 300000
38
+ })
39
+
40
+ peerSrv.init()
41
+ service = peerSrv.transport('server')
42
+ service.listen(PORT)
43
+
44
+ link.announce('rpc_test', service.port, {}, (err, res) => {
45
+ if (err) throw Error('error in announce, setup')
46
+ })
47
+
48
+ stop = () => {
49
+ peer.stop()
50
+ link.stop()
51
+ service.stop()
52
+ }
53
+ })
54
+
55
+ it('secure request, objects', (done) => {
56
+ service.on('request', (rid, key, payload, handler, cert) => {
57
+ assert.ok(typeof rid === 'string')
58
+ assert.strictEqual(key, 'rpc_test')
59
+ assert.deepStrictEqual(payload, { hello: 'world' })
60
+ assert.strictEqual(cert.fingerprint, 'E1:63:C1:46:B3:B6:46:3B:5E:92:98:34:40:A1:AB:FB:0E:92:D0:76')
61
+
62
+ handler.reply(null, { hello: 'helloworld' })
63
+ })
64
+
65
+ const opts = { timeout: 100000 }
66
+ peer.request('rpc_test', { hello: 'world' }, opts, (err, result) => {
67
+ if (err) throw err
68
+
69
+ assert.deepStrictEqual(result, { hello: 'helloworld' })
70
+
71
+ stop()
72
+ done()
73
+ })
74
+ }).timeout(7000)
75
+
76
+ it('secure map, strings', (done) => {
77
+ service.on('request', (rid, key, payload, handler, cert) => {
78
+ assert.ok(typeof rid === 'string')
79
+ assert.strictEqual(key, 'rpc_test')
80
+ assert.strictEqual(payload, 'hello')
81
+ assert.strictEqual(cert.fingerprint, 'E1:63:C1:46:B3:B6:46:3B:5E:92:98:34:40:A1:AB:FB:0E:92:D0:76')
82
+
83
+ handler.reply(null, 'world')
84
+ })
85
+
86
+ const opts = { timeout: 100000 }
87
+ peer.map('rpc_test', 'hello', opts, (err, result) => {
88
+ if (err) throw err
89
+
90
+ assert.deepStrictEqual(result, ['world'])
91
+
92
+ stop()
93
+ done()
94
+ })
95
+ }).timeout(7000)
96
+ })
@@ -0,0 +1,76 @@
1
+ /* eslint-env mocha */
2
+
3
+ const assert = require('assert')
4
+ const { PeerRPCClient, PeerRPCServer } = require('../')
5
+ const Link = require('grenache-nodejs-link')
6
+ const setupHooks = require('./before-after.js')
7
+
8
+ const PORT = 1337
9
+ let link, peer, peerSrv, service, stop
10
+ describe('RPC integration', () => {
11
+ setupHooks((grapes) => {
12
+ link = new Link({
13
+ grape: 'http://127.0.0.1:30001'
14
+ })
15
+ link.start()
16
+
17
+ peer = new PeerRPCClient(link, {})
18
+ peer.init()
19
+
20
+ peerSrv = new PeerRPCServer(link, { timeout: 300000 })
21
+
22
+ peerSrv.init()
23
+ service = peerSrv.transport('server')
24
+ service.listen(PORT)
25
+
26
+ link.announce('rpc_test', service.port, {}, (err, res) => {
27
+ if (err) throw Error('error in announce, setup')
28
+ })
29
+
30
+ stop = () => {
31
+ peer.stop()
32
+ link.stop()
33
+ service.stop()
34
+ }
35
+ })
36
+
37
+ it('secure request, objects', (done) => {
38
+ service.on('request', (rid, key, payload, handler) => {
39
+ assert.ok(typeof rid === 'string')
40
+ assert.strictEqual(key, 'rpc_test')
41
+ assert.deepStrictEqual(payload, { hello: 'world' })
42
+
43
+ handler.reply(null, { hello: 'helloworld' })
44
+ })
45
+
46
+ const opts = { timeout: 100000 }
47
+ peer.request('rpc_test', { hello: 'world' }, opts, (err, result) => {
48
+ if (err) throw err
49
+
50
+ assert.deepStrictEqual(result, { hello: 'helloworld' })
51
+
52
+ stop()
53
+ done()
54
+ })
55
+ }).timeout(7000)
56
+
57
+ it('secure map, strings', (done) => {
58
+ service.on('request', (rid, key, payload, handler) => {
59
+ assert.ok(typeof rid === 'string')
60
+ assert.strictEqual(key, 'rpc_test')
61
+ assert.strictEqual(payload, 'hello')
62
+
63
+ handler.reply(null, 'world')
64
+ })
65
+
66
+ const opts = { timeout: 100000 }
67
+ peer.map('rpc_test', 'hello', opts, (err, result) => {
68
+ if (err) throw err
69
+
70
+ assert.deepStrictEqual(result, ['world'])
71
+
72
+ stop()
73
+ done()
74
+ })
75
+ }).timeout(7000)
76
+ })
@@ -1,32 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIFgDCCA2gCCQDvmZA10HvRHTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UEBhMC
3
- VVMxCzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xEzARBgNVBAoMCkV4YW1w
4
- bGUgQ28xEDAOBgNVBAsMB3RlY2hvcHMxCzAJBgNVBAMMAmNhMSAwHgYJKoZIhvcN
5
- AQkBFhFjZXJ0c0BleGFtcGxlLmNvbTAeFw0xNzA1MjIxMzQ0NDNaFw00NDEwMDYx
6
- MzQ0NDNaMIGBMQswCQYDVQQGEwJVUzELMAkGA1UECAwCTUExDzANBgNVBAcMBkJv
7
- c3RvbjETMBEGA1UECgwKRXhhbXBsZSBDbzEQMA4GA1UECwwHdGVjaG9wczELMAkG
8
- A1UEAwwCY2ExIDAeBgkqhkiG9w0BCQEWEWNlcnRzQGV4YW1wbGUuY29tMIICIjAN
9
- BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0SrOAQlmrQTqnXqSiKpvhb/nd79r
10
- 59V8TY81yPiOaVXeIaCrIiDA66JzadzHHHHMt8sEsTI92BULNvQYsauRm8NmBPWJ
11
- YKYpUj0FguG7NzDLruCsBUq1faZyLLOA2Dr33gTzJFaVtvD0Z9ig2UjTSbqEnCcY
12
- fF6WkCcYWBE3xkyRZkuVZAaCu3PTKVvAkwxHkg4wS8feW/Z/VGLTmcd/lWvVgC1V
13
- Kl7wwubE/8MXwjJlQBzkU5WotFHgXJMnepQTuqu5ZlDpOZehLPQ16LUjUIu0xnIt
14
- 8k+YJ3JXdvP5+ifx+0YK9NpoU717spKgsME4z1Q6foDiaGgwWJ5bZYXi2OVD64yj
15
- FqKN4gdpe037OwgTxCJ2FS23Ijndzi/K+AULYXbjXUo/D+CXuJ/MfOXo8DHfI1ld
16
- ZgiHw1co2f1KQmL+AJ/YAEoC3228JG31mvX2sXL2p65QU9DmTaOrAYCX/F5T1frs
17
- jsO560Zpvs6C7Di8eQjrx3UhMz8zYSLT35/0HPPoLA9dkJOEDpg3NtLMuN1MigNZ
18
- VxRyadXrka4q7s/mTS1+0NbJHv4JYwzYKa1pdFeX102I9GVS9VZXpmRqriki1Sh1
19
- rb7YOuK+I92HIzIVpSeI/OB7xguH8rh+/vibB72SY18FJWyfGcr8ewwkPSVocZeu
20
- 9rCXIDLUY0Sojq8CAwEAATANBgkqhkiG9w0BAQUFAAOCAgEAbIPMMkzHlybXIr8z
21
- 4Dp/3czyPWLwjFfgeL4wM5Hm/JMxaFnsWgmkUdrvjlYofzaF+2U29FsDgcrkcCzD
22
- gTCOOHG0Pw1i8R57Dt68ycP4/e0iPpMmuTpNSqB9DilGscKARhE85o0FivAUzvUY
23
- RngIOtbf02OoaRbkAsmKdC4+PBNJbiS3U5V55r2HCv0zqXMFj4dXqfyWKkcZt3JR
24
- 8SkzUIhIVnwhTf8ZttXcsWmPMy3nqckcy6k3zLr7Gf63JJZAYecWwhydAtv4wRrm
25
- f3FwIvRxPLKTc/2YXF77I9YvHgnLOvE2qlLNnajQgOcIYGvxizDVCqnMS+8oBHWb
26
- uL6mZP4hOCL6ifynkAHltg59heM3WJ2MEwLjiSvMYY4otT4X9KxsRdsg0Gx96bVe
27
- P4RBlW3ebxcOnFuoMC3WT22/1ETqpQbrWOD5mJkFa6Q8aE6yWLLcdJznxF2M0Mf8
28
- PTh62cFJMC4E0gN9KRU+E/qBJsqTamHHAHjcaUYDBXsvtFDOlo1dbAzJylpwRUEg
29
- F115KpRH6DLLexS5YB9bASIsXBK+Afwm0FOjqGiEd527qAk5UiamyomKXxQ+DIbc
30
- 6QdO7XGpM3molI7Zzf79O4QdlRNzNgqPeCRUJWe2L6G7KECNvNjWepN3+0xAq9BO
31
- t53fDsW6Y1yw2xErpMGUHBQ05y4=
32
- -----END CERTIFICATE-----
@@ -1 +0,0 @@
1
- C02FC8087C0EC89A