@@ -13,7 +13,7 @@ var parsedLeaves = parseTorrent(leaves)
1313var peerId = new Buffer ( '01234567890123456789' )
1414
1515function testFilterOption ( t , serverType ) {
16- t . plan ( 6 )
16+ t . plan ( 8 )
1717 var opts = serverType === 'http' ? { udp : false } : { http : false }
1818 opts . filter = function ( infoHash , params , cb ) {
1919 process . nextTick ( function ( ) {
@@ -44,29 +44,33 @@ function testFilterOption (t, serverType) {
4444 client . once ( 'warning' , function ( err ) {
4545 t . ok ( / d i s a l l o w e d i n f o _ h a s h / . test ( err . message ) , 'got client warning' )
4646
47- client . destroy ( )
48- client = new Client ( peerId , port , parsedLeaves )
47+ client . destroy ( function ( ) {
48+ t . pass ( 'client destroyed' )
49+ client = new Client ( peerId , port , parsedLeaves )
4950
50- client . on ( 'error' , function ( err ) {
51- t . error ( err )
52- } )
53- client . on ( 'warning' , function ( err ) {
54- t . error ( err )
55- } )
51+ client . on ( 'error' , function ( err ) {
52+ t . error ( err )
53+ } )
54+ client . on ( 'warning' , function ( err ) {
55+ t . error ( err )
56+ } )
5657
57- client . on ( 'update' , function ( ) {
58- t . pass ( 'got announce' )
59- client . destroy ( )
60- server . close ( function ( ) {
61- t . pass ( 'server closed' )
58+ client . on ( 'update' , function ( ) {
59+ t . pass ( 'got announce' )
60+ client . destroy ( function ( ) {
61+ t . pass ( 'client destroyed' )
62+ } )
63+ server . close ( function ( ) {
64+ t . pass ( 'server closed' )
65+ } )
6266 } )
63- } )
6467
65- server . on ( 'start' , function ( ) {
66- t . equal ( Object . keys ( server . torrents ) . length , 1 )
67- } )
68+ server . on ( 'start' , function ( ) {
69+ t . equal ( Object . keys ( server . torrents ) . length , 1 )
70+ } )
6871
69- client . start ( )
72+ client . start ( )
73+ } )
7074 } )
7175
7276 server . once ( 'warning' , function ( err ) {
@@ -85,3 +89,82 @@ test('http: filter option blocks tracker from tracking torrent', function (t) {
8589test ( 'udp: filter option blocks tracker from tracking torrent' , function ( t ) {
8690 testFilterOption ( t , 'udp' )
8791} )
92+
93+ function testFilterCustomError ( t , serverType ) {
94+ t . plan ( 8 )
95+ var opts = serverType === 'http' ? { udp : false } : { http : false }
96+ opts . filter = function ( infoHash , params , cb ) {
97+ process . nextTick ( function ( ) {
98+ if ( infoHash === parsedBitlove . infoHash ) cb ( new Error ( 'bitlove blocked' ) )
99+ else cb ( true )
100+ } )
101+ }
102+ var server = new Server ( opts )
103+
104+ server . on ( 'error' , function ( err ) {
105+ t . error ( err )
106+ } )
107+
108+ server . listen ( 0 , function ( ) {
109+ var port = server [ serverType ] . address ( ) . port
110+ var announceUrl = serverType === 'http'
111+ ? 'http://127.0.0.1:' + port + '/announce'
112+ : 'udp://127.0.0.1:' + port
113+
114+ parsedBitlove . announce = [ announceUrl ]
115+ parsedLeaves . announce = [ announceUrl ]
116+
117+ var client = new Client ( peerId , port , parsedBitlove )
118+
119+ client . on ( 'error' , function ( err ) {
120+ t . error ( err )
121+ } )
122+
123+ client . once ( 'warning' , function ( err ) {
124+ t . ok ( / b i t l o v e b l o c k e d / . test ( err . message ) , 'got client warning' )
125+
126+ client . destroy ( function ( ) {
127+ t . pass ( 'client destroyed' )
128+ client = new Client ( peerId , port , parsedLeaves )
129+
130+ client . on ( 'error' , function ( err ) {
131+ t . error ( err )
132+ } )
133+ client . on ( 'warning' , function ( err ) {
134+ t . error ( err )
135+ } )
136+
137+ client . on ( 'update' , function ( ) {
138+ t . pass ( 'got announce' )
139+ client . destroy ( function ( ) {
140+ t . pass ( 'client destroyed' )
141+ } )
142+ server . close ( function ( ) {
143+ t . pass ( 'server closed' )
144+ } )
145+ } )
146+
147+ server . on ( 'start' , function ( ) {
148+ t . equal ( Object . keys ( server . torrents ) . length , 1 )
149+ } )
150+
151+ client . start ( )
152+ } )
153+ } )
154+
155+ server . once ( 'warning' , function ( err ) {
156+ t . ok ( / b i t l o v e b l o c k e d / . test ( err . message ) , 'got server warning' )
157+ t . equal ( Object . keys ( server . torrents ) . length , 0 )
158+ } )
159+
160+ client . start ( )
161+ } )
162+ }
163+
164+ test ( 'http: filter option with custom error' , function ( t ) {
165+ testFilterCustomError ( t , 'http' )
166+ } )
167+
168+ test ( 'udp: filter option filter option with custom error' , function ( t ) {
169+ testFilterCustomError ( t , 'udp' )
170+ } )
0 commit comments