@@ -4,40 +4,76 @@ const DeviceTree = require("../").DeviceTree;
44const TreeServer = require ( "../" ) . TreeServer ;
55
66const LOCALHOST = "127.0.0.1" ;
7+ const UNKNOWN_HOST = "192.168.99.99" ;
78const PORT = 9008 ;
89
910describe ( "DeviceTree" , ( ) => {
10- let server ;
11-
12- beforeAll ( ( ) => {
13- return Promise . resolve ( )
14- . then ( ( ) => new Promise ( ( resolve , reject ) => {
15- fs . readFile ( "./embrionix.ember" , ( e , data ) => {
16- if ( e ) {
17- reject ( e ) ;
18- }
19- resolve ( Decoder ( data ) ) ;
11+ describe ( "With server" , ( ) => {
12+ let server ;
13+ beforeAll ( ( ) => {
14+ return Promise . resolve ( )
15+ . then ( ( ) => new Promise ( ( resolve , reject ) => {
16+ fs . readFile ( "./embrionix.ember" , ( e , data ) => {
17+ if ( e ) {
18+ reject ( e ) ;
19+ }
20+ resolve ( Decoder ( data ) ) ;
21+ } ) ;
22+ } ) )
23+ . then ( root => {
24+ server = new TreeServer ( LOCALHOST , PORT , root ) ;
25+ return server . listen ( ) ;
2026 } ) ;
21- } ) )
22- . then ( root => {
23- server = new TreeServer ( LOCALHOST , PORT , root ) ;
24- return server . listen ( ) ;
25- } ) ;
26- } ) ;
27+ } ) ;
28+
29+ afterAll ( ( ) => server . close ( ) ) ;
30+
31+ it ( "should gracefully connect and disconnect" , ( ) => {
32+ return Promise . resolve ( )
33+ . then ( ( ) => {
34+ let tree = new DeviceTree ( LOCALHOST , PORT ) ;
35+ return Promise . resolve ( )
36+ . then ( ( ) => tree . connect ( ) )
37+ . then ( ( ) => tree . getDirectory ( ) )
38+ . then ( ( ) => tree . disconnect ( ) )
39+ . then ( ( ) => tree . connect ( ) )
40+ . then ( ( ) => tree . getDirectory ( ) )
41+ . then ( ( ) => tree . disconnect ( ) )
42+ } )
43+ } ) ;
44+
45+ it ( "should not disconnect after 5 seconds of inactivity" , ( ) => {
46+ return Promise . resolve ( )
47+ . then ( ( ) => {
48+ let tree = new DeviceTree ( LOCALHOST , PORT ) ;
2749
28- afterAll ( ( ) => server . close ( ) ) ;
50+ tree . on ( "error" , error => {
51+ throw error ;
52+ } ) ;
2953
30- it ( "should gracefully connect and disconnect" , ( ) => {
31- return Promise . resolve ( )
54+ return Promise . resolve ( )
55+ . then ( ( ) => tree . connect ( ) )
56+ . then ( ( ) => new Promise ( resolve => setTimeout ( resolve , 5000 ) ) )
57+ . then ( ( ) => tree . disconnect ( ) )
58+ } )
59+ } , 7000 ) ;
60+ } ) ;
61+
62+ it ( "timeout should be taken into account when connecting to unknown host" , ( ) => {
63+ let tree = new DeviceTree ( UNKNOWN_HOST , PORT ) ;
64+ tree . on ( "error" , ( ) => {
65+ } ) ;
66+ const expectedTimeoutInSec = 2 ;
67+ const initialTime = performance . now ( ) ;
68+ return tree . connect ( expectedTimeoutInSec )
3269 . then ( ( ) => {
33- let tree = new DeviceTree ( LOCALHOST , PORT ) ;
34- return Promise . resolve ( )
35- . then ( ( ) => tree . connect ( ) )
36- . then ( ( ) => tree . getDirectory ( ) )
37- . then ( ( ) => tree . disconnect ( ) )
38- . then ( ( ) => tree . connect ( ) )
39- . then ( ( ) => tree . getDirectory ( ) )
40- . then ( ( ) => tree . disconnect ( ) )
41- } )
70+ throw new Error ( "Should have thrown" ) ;
71+ } ,
72+ error => {
73+ const durationMs = performance . now ( ) - initialTime ;
74+ const deltaMs = Math . abs ( expectedTimeoutInSec * 1000 - durationMs ) ;
75+ expect ( deltaMs ) . toBeLessThan ( 10 ) ;
76+ expect ( error . message ) . toBe ( `Could not connect to ${ UNKNOWN_HOST } :${ PORT } after a timeout of ${ expectedTimeoutInSec } seconds` )
77+ } ) ;
4278 } ) ;
4379} ) ;
0 commit comments