grenache-nodejs-http 1.0.2 → 2.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.
@@ -1,236 +1,189 @@
1
- /* eslint-env mocha */
1
+ 'use strict'
2
2
 
3
- const assert = require('assert')
3
+ const test = require('brittle')
4
4
  const { PassThrough } = require('stream')
5
5
  const fs = require('fs')
6
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
- })
7
+ const { rpcTestCase } = require('./before-after')
40
8
 
41
- peerSrvBuf.init()
42
- serviceBuf = peerSrvBuf.transport('buffered')
43
- serviceBuf.listen(PORT)
9
+ const rpcTest = rpcTestCase({ transport: 'buffered', isSecure: true })
44
10
 
45
- link.announce('rpc_buf', serviceBuf.port, {}, (err, res) => {
46
- if (err) throw Error('error in announce, setup')
47
- })
11
+ test('RPC integration', async (t) => {
12
+ await t.test('buffered parsing works, objects', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
13
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
14
+ t.ok(typeof rid === 'string')
15
+ t.is(key, 'rpc_test')
16
+ t.alike(payload, { hello: 'world' })
48
17
 
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)
18
+ t.is(meta.isStream, false)
63
19
 
64
20
  handler.reply(null, { hello: 'helloworld' })
65
21
  })
66
22
 
67
23
  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()
24
+ await new Promise(resolve => {
25
+ peer.request('rpc_test', { hello: 'world' }, opts, (err, result) => {
26
+ if (err) throw err
27
+ t.alike(result, { hello: 'helloworld' })
28
+ resolve()
29
+ })
75
30
  })
76
- }).timeout(7000)
31
+ }))
77
32
 
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')
33
+ await t.test('buffered parsing works, strings', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
34
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
35
+ t.ok(typeof rid === 'string')
36
+ t.is(key, 'rpc_test')
37
+ t.is(payload, 'hello')
83
38
 
84
- assert.strictEqual(meta.isStream, false)
39
+ t.is(meta.isStream, false)
85
40
 
86
41
  handler.reply(null, 'world')
87
42
  })
88
43
 
89
44
  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()
45
+ await new Promise(resolve => {
46
+ peer.request('rpc_test', 'hello', opts, (err, result) => {
47
+ if (err) throw err
48
+ t.is(result, 'world')
49
+ resolve()
50
+ })
97
51
  })
98
- }).timeout(7000)
52
+ }))
99
53
 
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')
54
+ await t.test('buffered parsing works, compressed strings', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
55
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
56
+ t.ok(typeof rid === 'string')
57
+ t.is(key, 'rpc_test')
58
+ t.is(payload, 'hello')
105
59
 
106
- assert.strictEqual(meta.isStream, false)
107
- assert.strictEqual(meta.compress, true)
60
+ t.is(meta.isStream, false)
61
+ t.is(meta.compress, true)
108
62
 
109
63
  handler.reply(null, 'world')
110
64
  })
111
65
 
112
66
  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()
67
+ await new Promise(resolve => {
68
+ peer.request('rpc_test', 'hello', opts, (err, result) => {
69
+ if (err) throw err
70
+ t.is(result, 'world')
71
+ resolve()
72
+ })
120
73
  })
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)
74
+ }))
130
75
 
76
+ await t.test('buffered parsing works, strings from streaming client', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
77
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
78
+ t.ok(typeof rid === 'string')
79
+ t.is(key, 'rpc_test')
80
+ t.is(payload, 'hello')
81
+ t.is(meta.isStream, true)
131
82
  handler.reply(null, 'world')
132
83
  })
133
84
 
134
- const req = peer.stream('rpc_buf', {
85
+ const req = peer.stream('rpc_test', {
135
86
  timeout: 10000
136
87
  })
137
88
 
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) })
89
+ const p = new Promise(resolve => {
90
+ req
91
+ .on('data', (data) => {
92
+ const d = JSON.parse(data.toString())
93
+ // ["65c5737f-bbce-40f9-b48a-af8bd8869d66",null,"world"]
94
+ t.is(d[1], null)
95
+ t.is(d[2], 'world')
96
+ resolve()
97
+ })
98
+ .on('end', () => {})
99
+ .on('error', (e) => { console.error(e) })
100
+ })
149
101
 
150
102
  const writable = new PassThrough()
151
- writable.write('["UUID", "rpc_buf", "hello"]')
103
+ writable.write('["UUID", "rpc_test", "hello"]')
152
104
  writable.end()
153
105
  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
106
 
162
- assert.strictEqual(meta.isStream, true)
107
+ await p
108
+ }))
163
109
 
110
+ await t.test('buffered parsing works, objects from streaming client', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
111
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
112
+ t.ok(typeof rid === 'string')
113
+ t.is(key, 'rpc_test')
114
+ t.alike(payload, { hello: 'world' })
115
+ t.is(meta.isStream, true)
164
116
  handler.reply(null, { hello: 'helloworld' })
165
117
  })
166
118
 
167
- const req = peer.stream('rpc_buf', {
119
+ const req = peer.stream('rpc_test', {
168
120
  timeout: 10000
169
121
  })
170
122
 
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) })
123
+ const p = new Promise(resolve => {
124
+ req
125
+ .on('data', (data) => {
126
+ const d = JSON.parse(data.toString())
127
+ t.is(d[1], null)
128
+ t.alike(d[2], { hello: 'helloworld' })
129
+ resolve()
130
+ })
131
+ .on('end', () => {})
132
+ .on('error', (e) => { console.error(e) })
133
+ })
181
134
 
182
135
  const writable = new PassThrough()
183
- writable.write('["UUID", "rpc_buf", { "hello": "world" }]')
136
+ writable.write('["UUID", "rpc_test", { "hello": "world" }]')
184
137
  writable.end()
185
138
  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
139
 
140
+ await p
141
+ }))
142
+
143
+ await t.test('buffered parsing works, extra headers', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
144
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
145
+ t.ok(typeof rid === 'string')
146
+ t.is(key, 'rpc_test')
147
+ t.alike(payload, { hello: 'world' })
148
+ t.is(meta.action, 'uploadPublic')
149
+ t.alike(meta.args, { foo: 'bar' })
150
+ t.is(meta.isStream, true)
198
151
  handler.reply(null, { hello: 'helloworld' })
199
152
  })
200
153
 
201
- const req = peer.stream('rpc_buf', {
154
+ const req = peer.stream('rpc_test', {
202
155
  timeout: 10000,
203
156
  headers: { _a: 'uploadPublic', _ar: { foo: 'bar' } }
204
157
  })
205
158
 
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) })
159
+ const p = new Promise(resolve => {
160
+ req
161
+ .on('data', (data) => {
162
+ const d = JSON.parse(data.toString())
163
+ t.is(d[1], null)
164
+ t.alike(d[2], { hello: 'helloworld' })
165
+ resolve()
166
+ })
167
+ .on('end', () => {})
168
+ .on('error', (e) => { console.error(e) })
169
+ })
216
170
 
217
171
  const writable = new PassThrough()
218
- writable.write('["UUID", "rpc_buf", { "hello": "world" }]')
172
+ writable.write('["UUID", "rpc_test", { "hello": "world" }]')
219
173
  writable.end()
220
174
  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
175
 
176
+ await p
177
+ }))
178
+
179
+ await t.test('buf/buf: serialized files work', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
180
+ service.on('request', (rid, key, payload, handler, cert, meta) => {
181
+ t.ok(typeof rid === 'string')
182
+ t.is(key, 'rpc_test')
183
+ t.is(payload.action, 'uploadPublic')
184
+ t.is(payload.args[1].key, 'example-amazon-dynamo-sosp2007-4.pdf')
185
+ t.is(typeof payload.args[0], 'string')
186
+ t.is(meta.isStream, false)
234
187
  handler.reply(null, 'ok')
235
188
  })
236
189
 
@@ -250,13 +203,12 @@ describe('RPC integration', () => {
250
203
  action: 'uploadPublic',
251
204
  args: [buf.toString('hex'), optsPdf]
252
205
  }
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()
206
+ await new Promise(resolve => {
207
+ peer.request('rpc_test', queryUploadPublicPdf, opts, (err, result) => {
208
+ if (err) throw err
209
+ t.alike(result, 'ok')
210
+ resolve()
211
+ })
260
212
  })
261
- }).timeout(7000)
213
+ }))
262
214
  })