1
+ var fs = require ( 'fs' ) ;
2
+ var expect = require ( 'chai' ) . expect ;
3
+ var RandStream = require ( 'randstream' ) ;
4
+ var TruncateStream = require ( 'truncate-stream' ) ;
5
+ var DevNullStream = require ( 'dev-null-stream' ) ;
6
+ var concat = require ( 'concat-stream' ) ;
7
+
8
+ var peek = require ( './buffer-peek-stream' ) ;
9
+
10
+
11
+ function make ( size , mode ) {
12
+ return ( new RandStream ( { mode : mode || 'pseudo' } ) ) . pipe ( new TruncateStream ( { maxBytes : size } ) ) ;
13
+ }
14
+
15
+ describe ( 'peek' , function ( ) {
16
+ this . timeout ( 250 ) ;
17
+
18
+ it ( 'should callback with a buffer' , function ( done ) {
19
+ var source = make ( 50000 ) ;
20
+ peek ( source , 50000 , function ( err , buffer ) {
21
+ if ( err ) return done ( err ) ;
22
+ expect ( buffer ) . to . be . an . instanceof ( Buffer ) ;
23
+ done ( ) ;
24
+ } ) . pipe ( new DevNullStream ( ) ) ;
25
+ } ) ;
26
+
27
+ it ( 'should callback with exactly the number of bytes requested' , function ( done ) {
28
+ peek ( make ( 50000 ) , 1000 , function ( err , buffer ) {
29
+ if ( err ) return done ( err ) ;
30
+ expect ( buffer ) . to . have . lengthOf ( 1000 ) ;
31
+ done ( ) ;
32
+ } ) ;
33
+ } ) ;
34
+
35
+ it ( 'should callback with all bytes when peeking more than is available' , function ( done ) {
36
+ peek ( make ( 1000 ) , 5000 , function ( err , buffer ) {
37
+ if ( err ) return done ( err ) ;
38
+ expect ( buffer ) . to . have . lengthOf ( 1000 ) ;
39
+ done ( ) ;
40
+ } ) ;
41
+ } ) ;
42
+
43
+ it ( 'should callback with a stream which receives all bytes' , function ( done ) {
44
+ var source = make ( 50000 ) ;
45
+ peek ( source , 1000 , function ( err , buffer , stream ) {
46
+ if ( err ) return done ( err ) ;
47
+ stream . pipe ( concat ( function ( data ) {
48
+ expect ( data ) . to . have . lengthOf ( 50000 ) ;
49
+ done ( ) ;
50
+ } ) ) ;
51
+ } ) ;
52
+ } ) ;
53
+
54
+ it ( 'should return a stream which receives all bytes' , function ( done ) {
55
+ peek ( make ( 5000 ) , 1000 , function ( ) { } ) . pipe ( concat ( function ( data ) {
56
+ expect ( data ) . to . have . lengthOf ( 5000 ) ;
57
+ done ( ) ;
58
+ } ) ) ;
59
+ } ) ;
60
+
61
+ it ( 'should return the same stream as it calls back' , function ( done ) {
62
+ var res = peek ( make ( 5000 ) , 1000 , function ( err , buffer , stream ) {
63
+ if ( err ) return done ( err ) ;
64
+ expect ( stream ) . to . equal ( res ) ;
65
+ done ( ) ;
66
+ } ) ;
67
+ } ) ;
68
+
69
+ it ( 'should peek 65536 bytes by default' , function ( done ) {
70
+ peek ( make ( 100000 ) , function ( err , buffer ) {
71
+ if ( err ) return done ( err ) ;
72
+ expect ( buffer ) . to . have . lengthOf ( 65536 ) ;
73
+ done ( ) ;
74
+ } ) ;
75
+ } ) ;
76
+
77
+ it ( 'should work when peeked more once in a pipeline' , function ( done ) {
78
+ peek ( make ( 100000 ) , 50000 , function ( err , first , stream ) {
79
+ if ( err ) return done ( err ) ;
80
+ expect ( first ) . to . have . lengthOf ( 50000 ) ;
81
+ peek ( stream , 40000 , function ( err , second , stream ) {
82
+ if ( err ) return done ( err ) ;
83
+ expect ( second ) . to . have . lengthOf ( 40000 ) ;
84
+ expect ( second ) . to . eql ( first . slice ( 0 , 40000 ) ) ;
85
+ stream . pipe ( concat ( function ( data ) {
86
+ expect ( data ) . to . have . lengthOf ( 100000 ) ;
87
+ expect ( first ) . to . eql ( data . slice ( 0 , 50000 ) ) ;
88
+ expect ( second ) . to . eql ( data . slice ( 0 , 40000 ) ) ;
89
+ done ( ) ;
90
+ } ) ) ;
91
+ } ) ;
92
+ } ) ;
93
+ } ) ;
94
+
95
+ //TODO: peeking inside gzip data (transform)
96
+
97
+ //TODO: peeking a http response
98
+ } ) ;
0 commit comments