4
4
var expect = require ( 'chai' ) . expect
5
5
var streamPair = require ( 'stream-pair' )
6
6
var MultiStream = require ( '../../src/' )
7
+ var lpm = require ( 'length-prefixed-message' )
8
+ var PROTOCOLID = require ( '../../src/lib/protocol-id' )
7
9
8
10
describe ( 'Implmentation: interactive' , function ( ) {
9
11
var msS
@@ -18,57 +20,135 @@ describe('Implmentation: interactive', function () {
18
20
listener = pair . other
19
21
} )
20
22
21
- it ( 'create a Select MultiStream' , function ( ) {
22
- msS = new MultiStream . Select ( )
23
- expect ( msS ) . to . be . an . instanceof ( MultiStream . Select )
24
- } )
23
+ describe ( 'basics' , ( ) => {
24
+ it ( 'create a Select MultiStream' , function ( ) {
25
+ msS = new MultiStream . Select ( )
26
+ expect ( msS ) . to . be . an . instanceof ( MultiStream . Select )
27
+ } )
25
28
26
- it ( 'create a Interactive MultiStream()' , function ( ) {
27
- msI = new MultiStream . Interactive ( )
28
- expect ( msI ) . to . be . an . instanceof ( MultiStream . Interactive )
29
- } )
29
+ it ( 'create a Select MultiStream via function' , function ( ) {
30
+ expect (
31
+ MultiStream . Select . createSelect ( )
32
+ ) . to . be . an . instanceof (
33
+ MultiStream . Select
34
+ )
35
+ } )
30
36
31
- it ( 'attach a duplex stream to Select MultiStream' , function ( ) {
32
- msS . handle ( listener )
33
- } )
37
+ it ( 'throw an error if Select function is misused' , function ( ) {
38
+ expect (
39
+ ( ) => MultiStream . Select ( )
40
+ ) . to . throw (
41
+ 'Select must be called with new, or used with createSelect'
42
+ )
43
+ } )
34
44
35
- it ( 'register two handlers ' , function ( ) {
36
- msS . addHandler ( '/dogs/0.1.0' , function ( ds ) {
37
- dogsDS = ds
45
+ it ( 'create a Interactive MultiStream() ' , function ( ) {
46
+ msI = new MultiStream . Interactive ( )
47
+ expect ( msI ) . to . be . an . instanceof ( MultiStream . Interactive )
38
48
} )
39
49
40
- msS . addHandler ( '/cats/1.2.11' , function ( ds ) { } )
41
- } )
50
+ it ( 'attach a duplex stream to Select MultiStream' , function ( ) {
51
+ msS . handle ( listener )
52
+ } )
53
+
54
+ it ( 'create a Interactive MultiStream() via utility function' , function ( ) {
55
+ expect (
56
+ MultiStream . Interactive . createInteractive ( )
57
+ ) . to . be . an . instanceof (
58
+ MultiStream . Interactive
59
+ )
60
+ } )
61
+
62
+ it ( 'throw an error if Interactive function is misused' , function ( ) {
63
+ expect (
64
+ ( ) => MultiStream . Interactive ( )
65
+ ) . to . throw (
66
+ 'MultiStream must be called with new, or used with createMultiStream'
67
+ )
68
+ } )
69
+
70
+ it ( 'register two handlers' , function ( ) {
71
+ msS . addHandler ( '/dogs/0.1.0' , function ( ds ) {
72
+ dogsDS = ds
73
+ } )
74
+
75
+ msS . addHandler ( '/cats/1.2.11' , function ( ds ) { } )
76
+ } )
42
77
43
- it ( 'ls' , function ( done ) {
44
- msI . handle ( dialer , ( ) => {
45
- msI . ls ( ( err , ls ) => {
46
- expect ( err ) . to . not . exist
47
- ls = JSON . parse ( ls )
48
- expect ( ls [ 0 ] ) . to . equal ( '/dogs/0.1.0' )
49
- expect ( ls [ 1 ] ) . to . equal ( '/cats/1.2.11' )
78
+ it ( 'ls' , function ( done ) {
79
+ msI . handle ( dialer , ( ) => {
80
+ msI . ls ( ( err , ls ) => {
81
+ expect ( err ) . to . not . exist
82
+ ls = JSON . parse ( ls )
83
+ expect ( ls [ 0 ] ) . to . equal ( '/dogs/0.1.0' )
84
+ expect ( ls [ 1 ] ) . to . equal ( '/cats/1.2.11' )
85
+ done ( )
86
+ } )
87
+ } )
88
+ } )
89
+
90
+ it ( 'select one non existing protocol->handler' , function ( done ) {
91
+ msI . select ( '/mouse/1.1.0' , function ( err , ds ) {
92
+ expect ( err ) . to . be . an . instanceof ( Error )
50
93
done ( )
51
94
} )
52
95
} )
53
- } )
54
96
55
- it ( 'select one non existing protocol->handler' , function ( done ) {
56
- msI . select ( '/mouse/1.1.0' , function ( err , ds ) {
57
- expect ( err ) . to . be . an . instanceof ( Error )
58
- done ( )
97
+ it ( 'select one of the protocol->handler' , function ( done ) {
98
+ msI . select ( '/dogs/0.1.0' , function ( err , ds ) {
99
+ if ( err ) {
100
+ return console . log ( err )
101
+ }
102
+ ds . write ( 'hey' )
103
+ dogsDS . on ( 'data' , function ( data ) {
104
+ expect ( data . toString ( ) ) . to . equal ( 'hey' )
105
+ done ( )
106
+ } )
107
+ } )
59
108
} )
60
109
} )
61
110
62
- it ( 'select one of the protocol->handler' , function ( done ) {
63
- msI . select ( '/dogs/0.1.0' , function ( err , ds ) {
64
- if ( err ) {
65
- return console . log ( err )
66
- }
67
- ds . write ( 'hey' )
68
- dogsDS . on ( 'data' , function ( data ) {
69
- expect ( data . toString ( ) ) . to . equal ( 'hey' )
70
- done ( )
111
+ describe ( 'varying connections' , ( ) => {
112
+ beforeEach ( ( ) => {
113
+ const pair = streamPair . create ( )
114
+ dialer = pair
115
+ listener = pair . other
116
+ } )
117
+
118
+ it ( 'Select closes connection for non supported protocol' , function ( done ) {
119
+ var select = new MultiStream . Select ( )
120
+ select . handle ( listener )
121
+ listener . on ( 'finish' , done )
122
+
123
+ lpm . write ( dialer , PROTOCOLID + '\n' )
124
+ lpm . write ( dialer , 'na\n' )
125
+ } )
126
+
127
+ it ( 'Interactive responds with `na` for wrong protocol' , function ( done ) {
128
+ var interactive = new MultiStream . Interactive ( )
129
+ interactive . handle ( listener )
130
+
131
+ dialer . on ( 'data' , ( chunk ) => {
132
+ if ( chunk . toString ( ) . indexOf ( 'na\n' ) > - 1 ) {
133
+ done ( )
134
+ }
71
135
} )
136
+ lpm . write ( dialer , '/garbage/1.2.3\n' )
137
+ } )
138
+
139
+ it ( 'Interactive handles `na` handler response' , function ( done ) {
140
+ var interactive = new MultiStream . Interactive ( )
141
+ interactive . handle ( listener , ( ) => {
142
+ interactive . select ( 'skipping' )
143
+ interactive . select ( 'whatever' , ( err ) => {
144
+ expect ( err . message ) . to . equal ( 'whatever not supported' )
145
+ done ( )
146
+ } )
147
+ } )
148
+
149
+ lpm . write ( dialer , PROTOCOLID + '\n' )
150
+ lpm . write ( dialer , 'nan\n' )
151
+ lpm . write ( dialer , 'na\n' )
72
152
} )
73
153
} )
74
154
} )
0 commit comments