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.
- package/package.json +11 -11
- package/test/before-after.js +56 -15
- package/test/peer-rpc-server-buffered.js +129 -156
- package/test/peer-rpc-server-secure-buffered.js +128 -176
- package/test/peer-rpc-server-secure-streaming.js +84 -127
- package/test/peer-rpc-server-secure.js +30 -78
- package/test/peer-rpc-server-streaming.js +84 -111
- package/test/peer-rpc-server.js +27 -57
- package/test/rpc-server-manual-request-handling.js +22 -53
- package/test/rpc-server-readstream-size.js +20 -48
|
@@ -1,103 +1,72 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const test = require('brittle')
|
|
4
4
|
const { PassThrough } = require('stream')
|
|
5
|
-
const {
|
|
6
|
-
const Link = require('grenache-nodejs-link')
|
|
7
|
-
const setupHooks = require('./before-after.js')
|
|
8
|
-
|
|
9
|
-
const PORT = 1337
|
|
10
|
-
let link, peer, peerSrvStr, serviceStr, stop
|
|
11
|
-
describe('RPC integration', () => {
|
|
12
|
-
setupHooks((grapes) => {
|
|
13
|
-
link = new Link({
|
|
14
|
-
grape: 'http://127.0.0.1:30001'
|
|
15
|
-
})
|
|
16
|
-
link.start()
|
|
17
|
-
|
|
18
|
-
peer = new PeerRPCClient(link, {})
|
|
19
|
-
peer.init()
|
|
20
|
-
|
|
21
|
-
peerSrvStr = new PeerRPCServer(link, {
|
|
22
|
-
timeout: 300000,
|
|
23
|
-
disableBuffered: true
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
peerSrvStr.init()
|
|
27
|
-
serviceStr = peerSrvStr.transport('stream')
|
|
28
|
-
serviceStr.listen(PORT)
|
|
5
|
+
const { rpcTestCase } = require('./before-after')
|
|
29
6
|
|
|
30
|
-
|
|
31
|
-
if (err) throw Error('error in announce, setup')
|
|
32
|
-
})
|
|
7
|
+
const rpcTest = rpcTestCase({ transport: 'stream', disableBuffered: true })
|
|
33
8
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it('streaming works, objects, buffered client, reply handler', (done) => {
|
|
42
|
-
serviceStr.on('stream', (req, res, meta, handler) => {
|
|
43
|
-
assert.strictEqual(meta.isStream, false)
|
|
9
|
+
test('RPC integration', async (t) => {
|
|
10
|
+
await t.test('streaming works, objects, buffered client, reply handler', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
11
|
+
service.on('stream', (req, res, meta, handler) => {
|
|
12
|
+
t.is(meta.isStream, false)
|
|
44
13
|
|
|
45
14
|
req.on('data', (d) => {
|
|
46
15
|
const [rid, key, args] = JSON.parse(d.toString())
|
|
47
16
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
17
|
+
t.alike(args, { hello: 'world' })
|
|
18
|
+
t.ok(typeof rid === 'string')
|
|
19
|
+
t.is(key, 'rpc_test')
|
|
51
20
|
|
|
52
21
|
handler.reply(rid, null, { hello: 'helloworld' })
|
|
53
22
|
})
|
|
54
23
|
})
|
|
55
24
|
|
|
56
25
|
const opts = { timeout: 100000 }
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
26
|
+
await new Promise(resolve => {
|
|
27
|
+
peer.request('rpc_test', { hello: 'world' }, opts, (err, result) => {
|
|
28
|
+
if (err) throw err
|
|
29
|
+
t.alike(result, { hello: 'helloworld' })
|
|
30
|
+
resolve()
|
|
31
|
+
})
|
|
63
32
|
})
|
|
64
|
-
})
|
|
33
|
+
}))
|
|
65
34
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
35
|
+
await t.test('streaming works, string, buffered client, reply handler', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
36
|
+
service.on('stream', (req, res, meta, handler) => {
|
|
37
|
+
t.is(meta.isStream, false)
|
|
69
38
|
|
|
70
39
|
req.on('data', (d) => {
|
|
71
40
|
const [rid, key, args] = JSON.parse(d.toString())
|
|
72
41
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
42
|
+
t.is(args, 'hello')
|
|
43
|
+
t.ok(typeof rid === 'string')
|
|
44
|
+
t.is(key, 'rpc_test')
|
|
76
45
|
|
|
77
46
|
handler.reply(rid, null, 'world')
|
|
78
47
|
})
|
|
79
48
|
})
|
|
80
49
|
|
|
81
50
|
const opts = { timeout: 100000 }
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
51
|
+
await new Promise(resolve => {
|
|
52
|
+
peer.request('rpc_test', 'hello', opts, (err, result) => {
|
|
53
|
+
if (err) throw err
|
|
54
|
+
t.is(result, 'world')
|
|
55
|
+
resolve()
|
|
56
|
+
})
|
|
88
57
|
})
|
|
89
|
-
})
|
|
58
|
+
}))
|
|
90
59
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
60
|
+
await t.test('streaming works, string, buffered client, stream sent back', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
61
|
+
service.on('stream', (req, res, meta) => {
|
|
62
|
+
t.is(meta.isStream, false)
|
|
94
63
|
|
|
95
64
|
req.on('data', (d) => {
|
|
96
65
|
const [rid, key, args] = JSON.parse(d.toString())
|
|
97
66
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
67
|
+
t.is(args, 'hello')
|
|
68
|
+
t.ok(typeof rid === 'string')
|
|
69
|
+
t.is(key, 'rpc_test')
|
|
101
70
|
|
|
102
71
|
const writable = new PassThrough()
|
|
103
72
|
const payload = JSON.stringify([rid, null, 'world2'])
|
|
@@ -108,29 +77,29 @@ describe('RPC integration', () => {
|
|
|
108
77
|
})
|
|
109
78
|
|
|
110
79
|
const opts = { timeout: 100000 }
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
80
|
+
await new Promise(resolve => {
|
|
81
|
+
peer.request('rpc_test', 'hello', opts, (err, result) => {
|
|
82
|
+
if (err) throw err
|
|
83
|
+
t.is(result, 'world2')
|
|
84
|
+
resolve()
|
|
85
|
+
})
|
|
117
86
|
})
|
|
118
|
-
})
|
|
87
|
+
}))
|
|
119
88
|
|
|
120
|
-
|
|
89
|
+
await t.test('streaming works, buffer, stream client, stream on server', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
121
90
|
const reqPayload = Buffer.from('megalargefile')
|
|
122
91
|
const resPayload = Buffer.from('superlargefile')
|
|
123
92
|
|
|
124
|
-
|
|
125
|
-
|
|
93
|
+
service.on('stream', (req, res, meta) => {
|
|
94
|
+
t.is(meta.isStream, true)
|
|
126
95
|
|
|
127
96
|
req.on('data', (d) => {
|
|
128
97
|
const [rid, key] = meta.infoHeaders
|
|
129
98
|
|
|
130
|
-
|
|
99
|
+
t.ok(d.equals(reqPayload), 'received Buffer equals payload on server')
|
|
131
100
|
|
|
132
|
-
|
|
133
|
-
|
|
101
|
+
t.ok(typeof rid === 'string')
|
|
102
|
+
t.is(key, 'rpc_test')
|
|
134
103
|
|
|
135
104
|
const writable = new PassThrough()
|
|
136
105
|
writable.pipe(res)
|
|
@@ -139,42 +108,44 @@ describe('RPC integration', () => {
|
|
|
139
108
|
})
|
|
140
109
|
})
|
|
141
110
|
|
|
142
|
-
const req = peer.stream('
|
|
111
|
+
const req = peer.stream('rpc_test', {
|
|
143
112
|
timeout: 10000
|
|
144
113
|
})
|
|
145
114
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
115
|
+
const p = new Promise(resolve => {
|
|
116
|
+
req
|
|
117
|
+
.on('data', (data) => {
|
|
118
|
+
t.ok(data.equals(resPayload), 'received Buffer equals payload on client')
|
|
119
|
+
resolve()
|
|
120
|
+
})
|
|
121
|
+
.on('end', () => {})
|
|
122
|
+
.on('error', (e) => { console.error(e) })
|
|
123
|
+
})
|
|
155
124
|
|
|
156
125
|
const writable = new PassThrough()
|
|
157
126
|
writable.write(reqPayload)
|
|
158
127
|
writable.pipe(req)
|
|
159
|
-
}).timeout(7000)
|
|
160
128
|
|
|
161
|
-
|
|
129
|
+
await p
|
|
130
|
+
}))
|
|
131
|
+
|
|
132
|
+
await t.test('streaming works, buffer, stream client, stream on server, additional headers', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
162
133
|
const reqPayload = Buffer.from('megalargefile')
|
|
163
134
|
const resPayload = Buffer.from('superlargefile')
|
|
164
135
|
|
|
165
|
-
|
|
166
|
-
|
|
136
|
+
service.on('stream', (req, res, meta) => {
|
|
137
|
+
t.is(meta.isStream, true)
|
|
167
138
|
|
|
168
139
|
req.on('data', (d) => {
|
|
169
140
|
const [rid, key] = meta.infoHeaders
|
|
170
141
|
|
|
171
|
-
|
|
142
|
+
t.ok(d.equals(reqPayload), 'received Buffer equals payload on server')
|
|
172
143
|
|
|
173
|
-
|
|
174
|
-
|
|
144
|
+
t.ok(typeof rid === 'string')
|
|
145
|
+
t.is(key, 'rpc_test')
|
|
175
146
|
|
|
176
|
-
|
|
177
|
-
|
|
147
|
+
t.is(meta.action, 'uploadPublic')
|
|
148
|
+
t.is(meta.args.foo, 'bar')
|
|
178
149
|
|
|
179
150
|
const writable = new PassThrough()
|
|
180
151
|
writable.pipe(res)
|
|
@@ -183,7 +154,7 @@ describe('RPC integration', () => {
|
|
|
183
154
|
})
|
|
184
155
|
})
|
|
185
156
|
|
|
186
|
-
const req = peer.stream('
|
|
157
|
+
const req = peer.stream('rpc_test', {
|
|
187
158
|
timeout: 10000,
|
|
188
159
|
headers: {
|
|
189
160
|
_a: 'uploadPublic',
|
|
@@ -191,18 +162,20 @@ describe('RPC integration', () => {
|
|
|
191
162
|
}
|
|
192
163
|
})
|
|
193
164
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
165
|
+
const p = new Promise(resolve => {
|
|
166
|
+
req
|
|
167
|
+
.on('data', (data) => {
|
|
168
|
+
t.ok(data.equals(resPayload), 'received Buffer equals payload on client')
|
|
169
|
+
resolve()
|
|
170
|
+
})
|
|
171
|
+
.on('end', () => {})
|
|
172
|
+
.on('error', (e) => { console.error(e) })
|
|
173
|
+
})
|
|
203
174
|
|
|
204
175
|
const writable = new PassThrough()
|
|
205
176
|
writable.write(reqPayload)
|
|
206
177
|
writable.pipe(req)
|
|
207
|
-
|
|
178
|
+
|
|
179
|
+
await p
|
|
180
|
+
}))
|
|
208
181
|
})
|
package/test/peer-rpc-server.js
CHANGED
|
@@ -1,76 +1,46 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const {
|
|
5
|
-
const Link = require('grenache-nodejs-link')
|
|
6
|
-
const setupHooks = require('./before-after.js')
|
|
3
|
+
const test = require('brittle')
|
|
4
|
+
const { rpcTestCase } = require('./before-after')
|
|
7
5
|
|
|
8
|
-
const
|
|
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
|
-
})
|
|
6
|
+
const rpcTest = rpcTestCase({ transport: 'server' })
|
|
29
7
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
link.stop()
|
|
33
|
-
service.stop()
|
|
34
|
-
}
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
it('secure request, objects', (done) => {
|
|
8
|
+
test('RPC integration', { timeout: 10000 }, async (t) => {
|
|
9
|
+
await t.test('secure request, objects', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
38
10
|
service.on('request', (rid, key, payload, handler) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
11
|
+
t.ok(typeof rid === 'string')
|
|
12
|
+
t.is(key, 'rpc_test')
|
|
13
|
+
t.alike(payload, { hello: 'world' })
|
|
42
14
|
|
|
43
15
|
handler.reply(null, { hello: 'helloworld' })
|
|
44
16
|
})
|
|
45
17
|
|
|
46
18
|
const opts = { timeout: 100000 }
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
done()
|
|
19
|
+
await new Promise(resolve => {
|
|
20
|
+
peer.request('rpc_test', { hello: 'world' }, opts, (err, result) => {
|
|
21
|
+
if (err) throw err
|
|
22
|
+
t.alike(result, { hello: 'helloworld' })
|
|
23
|
+
resolve()
|
|
24
|
+
})
|
|
54
25
|
})
|
|
55
|
-
})
|
|
26
|
+
}))
|
|
56
27
|
|
|
57
|
-
|
|
28
|
+
await t.test('secure map, strings', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
58
29
|
service.on('request', (rid, key, payload, handler) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
30
|
+
t.ok(typeof rid === 'string')
|
|
31
|
+
t.is(key, 'rpc_test')
|
|
32
|
+
t.is(payload, 'hello')
|
|
62
33
|
|
|
63
34
|
handler.reply(null, 'world')
|
|
64
35
|
})
|
|
65
36
|
|
|
66
37
|
const opts = { timeout: 100000 }
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
done()
|
|
38
|
+
await new Promise(resolve => {
|
|
39
|
+
peer.map('rpc_test', 'hello', opts, (err, result) => {
|
|
40
|
+
if (err) throw err
|
|
41
|
+
t.alike(result, ['world'])
|
|
42
|
+
resolve()
|
|
43
|
+
})
|
|
74
44
|
})
|
|
75
|
-
})
|
|
45
|
+
}))
|
|
76
46
|
})
|
|
@@ -1,44 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const test = require('brittle')
|
|
4
4
|
const fs = require('fs')
|
|
5
5
|
const path = require('path')
|
|
6
|
-
const {
|
|
7
|
-
const Link = require('grenache-nodejs-link')
|
|
8
|
-
const setupHooks = require('./before-after.js')
|
|
6
|
+
const { rpcTestCase } = require('./before-after')
|
|
9
7
|
|
|
10
|
-
const
|
|
11
|
-
let link, peer, peerSrvStr, serviceStr, 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
|
-
peer.init()
|
|
21
|
-
|
|
22
|
-
peerSrvStr = new PeerRPCServer(link, {
|
|
23
|
-
timeout: 300000,
|
|
24
|
-
disableBuffered: true
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
peerSrvStr.init()
|
|
28
|
-
serviceStr = peerSrvStr.transport('stream')
|
|
29
|
-
serviceStr.listen(PORT)
|
|
30
|
-
|
|
31
|
-
link.announce('rpc_manual', serviceStr.port, {}, (err, res) => {
|
|
32
|
-
if (err) throw Error('error in announce, setup')
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
stop = () => {
|
|
36
|
-
peer.stop()
|
|
37
|
-
link.stop()
|
|
38
|
-
serviceStr.stop()
|
|
39
|
-
}
|
|
40
|
-
})
|
|
8
|
+
const rpcTest = rpcTestCase({ transport: 'stream', disableBuffered: true })
|
|
41
9
|
|
|
10
|
+
test('RPC integration', (t) => {
|
|
42
11
|
const buf = fs.readFileSync(
|
|
43
12
|
path.join(__dirname, './example-amazon-dynamo-sosp2007.pdf')
|
|
44
13
|
)
|
|
@@ -55,35 +24,35 @@ describe('RPC integration', () => {
|
|
|
55
24
|
args: [buf.toString('hex'), optsPdf]
|
|
56
25
|
}
|
|
57
26
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
t.test('manual request handling works', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
28
|
+
service.on('stream', (req, res, meta) => {
|
|
29
|
+
t.is(meta.isStream, false)
|
|
61
30
|
|
|
62
31
|
if (meta.isStream === false) {
|
|
63
32
|
// console.log('no stream content, decide to parse')
|
|
64
|
-
|
|
33
|
+
service.handleBufferedRequest(req, res, meta)
|
|
65
34
|
}
|
|
66
35
|
})
|
|
67
36
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
37
|
+
service.on('request', (rid, key, payload, handler, cert, meta) => {
|
|
38
|
+
t.ok(typeof rid === 'string')
|
|
39
|
+
t.is(key, 'rpc_test')
|
|
71
40
|
const [pdf, opts] = payload.args
|
|
72
|
-
|
|
41
|
+
t.alike(opts, optsPdf)
|
|
73
42
|
|
|
74
|
-
|
|
43
|
+
t.alike([pdf[0], pdf[1], pdf[2]].join(''), '255')
|
|
75
44
|
|
|
76
|
-
|
|
45
|
+
t.is(meta.isStream, false)
|
|
77
46
|
handler.reply(null, 'ok')
|
|
78
47
|
})
|
|
79
48
|
|
|
80
49
|
const opts = { timeout: 100000 }
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
50
|
+
await new Promise(resolve => {
|
|
51
|
+
peer.request('rpc_test', queryUploadPublicPdf, opts, (err, result) => {
|
|
52
|
+
if (err) throw err
|
|
53
|
+
t.alike(result, 'ok')
|
|
54
|
+
resolve()
|
|
55
|
+
})
|
|
87
56
|
})
|
|
88
|
-
})
|
|
57
|
+
}))
|
|
89
58
|
})
|
|
@@ -1,50 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const test = require('brittle')
|
|
4
4
|
const fs = require('fs')
|
|
5
5
|
const path = require('path')
|
|
6
|
-
const {
|
|
7
|
-
const Link = require('grenache-nodejs-link')
|
|
8
|
-
const setupHooks = require('./before-after.js')
|
|
6
|
+
const { rpcTestCase } = require('./before-after')
|
|
9
7
|
|
|
10
|
-
const
|
|
11
|
-
let link, peer, peerSrvStr, serviceStr, 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
|
-
peer.init()
|
|
21
|
-
|
|
22
|
-
peerSrvStr = new PeerRPCServer(link, {
|
|
23
|
-
timeout: 300000,
|
|
24
|
-
disableBuffered: true
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
peerSrvStr.init()
|
|
28
|
-
serviceStr = peerSrvStr.transport('stream')
|
|
29
|
-
serviceStr.listen(PORT)
|
|
30
|
-
|
|
31
|
-
link.announce('rpc_manual', serviceStr.port, {}, (err, res) => {
|
|
32
|
-
if (err) throw Error('error in announce, setup')
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
stop = () => {
|
|
36
|
-
peer.stop()
|
|
37
|
-
link.stop()
|
|
38
|
-
serviceStr.stop()
|
|
39
|
-
}
|
|
40
|
-
})
|
|
8
|
+
const rpcTest = rpcTestCase({ transport: 'stream', disableBuffered: true })
|
|
41
9
|
|
|
10
|
+
test('RPC integration', (t) => {
|
|
42
11
|
const pdfFile = path.join(__dirname, './example-amazon-dynamo-sosp2007.pdf')
|
|
43
12
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
13
|
+
t.test('manual request handling works', { timeout: 7000 }, rpcTest(async ({ t, service, peer }) => {
|
|
14
|
+
service.on('stream', (req, res, meta, handler) => {
|
|
15
|
+
t.is(meta.isStream, true)
|
|
16
|
+
t.is(req.headers['content-type'], 'application/pdf')
|
|
48
17
|
|
|
49
18
|
const rid = meta.infoHeaders[0]
|
|
50
19
|
const writer = fs.createWriteStream('test.pdf')
|
|
@@ -53,7 +22,7 @@ describe('RPC integration', () => {
|
|
|
53
22
|
writer.on('close', () => {
|
|
54
23
|
const origStat = fs.statSync(pdfFile)
|
|
55
24
|
const res = fs.statSync('test.pdf')
|
|
56
|
-
|
|
25
|
+
t.is(res.size, origStat.size)
|
|
57
26
|
|
|
58
27
|
handler.reply(rid, null, 'ok')
|
|
59
28
|
})
|
|
@@ -65,7 +34,7 @@ describe('RPC integration', () => {
|
|
|
65
34
|
bucket: 'BUCKET',
|
|
66
35
|
contentType: 'application/pdf'
|
|
67
36
|
}
|
|
68
|
-
const req = peer.stream('
|
|
37
|
+
const req = peer.stream('rpc_test', {
|
|
69
38
|
headers: {
|
|
70
39
|
_a: 'uploadNewPublicStream',
|
|
71
40
|
_ar: optsPdf,
|
|
@@ -74,15 +43,18 @@ describe('RPC integration', () => {
|
|
|
74
43
|
timeout: 10000
|
|
75
44
|
})
|
|
76
45
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
46
|
+
const p = new Promise(resolve => {
|
|
47
|
+
req.on('data', (data) => {
|
|
48
|
+
const [,, msg] = JSON.parse(data.toString())
|
|
49
|
+
t.is(msg, 'ok')
|
|
50
|
+
resolve()
|
|
51
|
+
})
|
|
82
52
|
})
|
|
83
53
|
|
|
84
54
|
const data = fs.createReadStream(pdfFile)
|
|
85
55
|
|
|
86
56
|
data.pipe(req)
|
|
87
|
-
|
|
57
|
+
|
|
58
|
+
await p
|
|
59
|
+
}))
|
|
88
60
|
})
|