1 | var tape = require('tape')
|
2 | var split = require('pull-randomly-split')
|
3 | var pull = require('pull-stream')
|
4 | var crypto = require('crypto')
|
5 | var Reader = require('../')
|
6 | var Hang = require('pull-hang')
|
7 |
|
8 | var bytes = crypto.randomBytes(64)
|
9 |
|
10 |
|
11 | tape('read once a stream', function (t) {
|
12 |
|
13 | var reader = Reader()
|
14 |
|
15 | pull(
|
16 | pull.values([bytes]),
|
17 | split(),
|
18 | reader
|
19 | )
|
20 |
|
21 | reader.read(32, function (err, data) {
|
22 | t.notOk(err)
|
23 | t.deepEqual(data, bytes.slice(0, 32))
|
24 | t.end()
|
25 | })
|
26 |
|
27 | })
|
28 |
|
29 | tape('read twice from a stream', function (t) {
|
30 |
|
31 | var reader = Reader()
|
32 |
|
33 | pull(
|
34 | pull.values([bytes]),
|
35 | split(),
|
36 | reader
|
37 | )
|
38 |
|
39 | reader.read(32, function (err, data) {
|
40 |
|
41 | console.log('read1', err, data)
|
42 | t.notOk(err)
|
43 | t.deepEqual(data, bytes.slice(0, 32))
|
44 |
|
45 | reader.read(16, function (err, data) {
|
46 | console.log('read2')
|
47 | t.notOk(err)
|
48 | t.deepEqual(data, bytes.slice(32, 48))
|
49 | t.end()
|
50 | })
|
51 | })
|
52 |
|
53 | })
|
54 |
|
55 | tape('read whatever is there', function (t) {
|
56 |
|
57 | var reader = Reader()
|
58 |
|
59 | pull(
|
60 | pull.values([bytes]),
|
61 | split(),
|
62 | reader
|
63 | )
|
64 |
|
65 | reader.read(null, function (err, data) {
|
66 | t.notOk(err)
|
67 | console.log(data)
|
68 | t.ok(data.length > 0)
|
69 | t.end()
|
70 | })
|
71 |
|
72 | })
|
73 |
|
74 | tape('read a stream', function (t) {
|
75 |
|
76 | var reader = Reader()
|
77 |
|
78 | pull(
|
79 | pull.values([bytes]),
|
80 | split(),
|
81 | reader
|
82 | )
|
83 |
|
84 | pull(
|
85 | reader.read(),
|
86 | pull.collect(function (err, data) {
|
87 | t.notOk(err)
|
88 | var _data = Buffer.concat(data)
|
89 | t.equal(_data.length, bytes.length)
|
90 | t.deepEqual(_data, bytes)
|
91 | t.end()
|
92 | })
|
93 | )
|
94 |
|
95 | })
|
96 |
|
97 | tape('async read', function (t) {
|
98 |
|
99 | var reader = Reader()
|
100 |
|
101 | pull(
|
102 | pull.values([new Buffer('hello there')]),
|
103 | reader
|
104 | )
|
105 |
|
106 | setTimeout(function () {
|
107 | reader.read(6, function (err, hello_) {
|
108 | setTimeout(function () {
|
109 | reader.read(5, function (err, there) {
|
110 | if(err) throw new Error('unexpected end')
|
111 | t.deepEqual(Buffer.concat([hello_, there]).toString(), 'hello there')
|
112 | t.end()
|
113 | })
|
114 | })
|
115 | })
|
116 | })
|
117 |
|
118 | })
|
119 |
|
120 | tape('abort the stream', function (t) {
|
121 |
|
122 | var reader = Reader()
|
123 |
|
124 | pull(
|
125 | Hang(function (err) {
|
126 | t.end()
|
127 | }),
|
128 | reader
|
129 | )
|
130 |
|
131 | reader.abort()
|
132 |
|
133 | })
|
134 |
|
135 |
|
136 | tape('abort the stream and a read', function (t) {
|
137 |
|
138 | t.plan(4)
|
139 | var reader = Reader(), err = new Error('intended')
|
140 |
|
141 | pull(
|
142 | Hang(function (err) {
|
143 | t.end()
|
144 | }),
|
145 | reader
|
146 | )
|
147 |
|
148 | reader.read(32, function (_err) {
|
149 | t.equal(_err, err)
|
150 | })
|
151 | reader.read(32, function (_err) {
|
152 | t.equal(_err, err)
|
153 | })
|
154 | reader.read(32, function (_err) {
|
155 | t.equal(_err, err)
|
156 | })
|
157 |
|
158 | reader.abort(err, function (_err) {
|
159 | t.equal(_err, err)
|
160 | })
|
161 |
|
162 | })
|
163 |
|
164 | tape('if streaming, the stream should abort', function (t) {
|
165 |
|
166 | var reader = Reader(), err = new Error('intended')
|
167 |
|
168 | pull(Hang(), reader)
|
169 |
|
170 | pull(
|
171 | reader.read(),
|
172 | pull.collect(function (_err) {
|
173 | t.equal(_err, err)
|
174 | t.end()
|
175 | })
|
176 | )
|
177 |
|
178 | reader.abort(err)
|
179 |
|
180 | })
|
181 |
|
182 | tape('abort stream once in streaming mode', function (t) {
|
183 |
|
184 | var reader = Reader(), err = new Error('intended')
|
185 |
|
186 | pull(Hang(), reader)
|
187 |
|
188 | var read = reader.read()
|
189 |
|
190 | read(true, function (err) {
|
191 | t.ok(err)
|
192 | t.end()
|
193 | })
|
194 |
|
195 | })
|
196 |
|
197 |
|
198 | tape('configurable timeout', function (t) {
|
199 |
|
200 | var reader = Reader(100)
|
201 | var start = Date.now()
|
202 | pull(Hang(), reader)
|
203 |
|
204 | pull(
|
205 | reader.read(),
|
206 | pull.collect(function (err) {
|
207 | t.ok(err)
|
208 | t.ok(Date.now() < start + 300)
|
209 | t.end()
|
210 | })
|
211 | )
|
212 |
|
213 | })
|
214 |
|
215 |
|
216 | tape('timeout does not apply to the rest of the stream', function (t) {
|
217 | var reader = Reader(100)
|
218 | var once = false
|
219 | pull(
|
220 | function (abort, cb) {
|
221 | if(!once)
|
222 | setTimeout(function () {
|
223 | once = true
|
224 | cb(null, new Buffer('hello world'))
|
225 | }, 200)
|
226 | else
|
227 | cb(true)
|
228 | },
|
229 | reader
|
230 | )
|
231 |
|
232 | pull(
|
233 | reader.read(),
|
234 | pull.collect(function (err, ary) {
|
235 | console.log(err)
|
236 | t.notOk(err)
|
237 | t.equal(Buffer.concat(ary).toString(), 'hello world')
|
238 | t.end()
|
239 | })
|
240 | )
|
241 | })
|
242 |
|
243 |
|
244 |
|
245 |
|
246 |
|