@@ -13,7 +13,9 @@ if (!common.hasCrypto) {
13
13
14
14
doTest ( { tickets : false } , function ( ) {
15
15
doTest ( { tickets : true } , function ( ) {
16
- console . error ( 'all done' ) ;
16
+ doTest ( { tickets : false , invalidSession : true } , function ( ) {
17
+ console . error ( 'all done' ) ;
18
+ } ) ;
17
19
} ) ;
18
20
} ) ;
19
21
@@ -23,6 +25,7 @@ function doTest(testOptions, callback) {
23
25
const fs = require ( 'fs' ) ;
24
26
const join = require ( 'path' ) . join ;
25
27
const spawn = require ( 'child_process' ) . spawn ;
28
+ const Buffer = require ( 'buffer' ) . Buffer ;
26
29
27
30
const keyFile = join ( common . fixturesDir , 'agent.key' ) ;
28
31
const certFile = join ( common . fixturesDir , 'agent.crt' ) ;
@@ -36,6 +39,7 @@ function doTest(testOptions, callback) {
36
39
} ;
37
40
let requestCount = 0 ;
38
41
let resumeCount = 0 ;
42
+ let newSessionCount = 0 ;
39
43
let session ;
40
44
41
45
const server = tls . createServer ( options , function ( cleartext ) {
@@ -50,6 +54,7 @@ function doTest(testOptions, callback) {
50
54
cleartext . end ( ) ;
51
55
} ) ;
52
56
server . on ( 'newSession' , function ( id , data , cb ) {
57
+ ++ newSessionCount ;
53
58
// Emulate asynchronous store
54
59
setTimeout ( function ( ) {
55
60
assert . ok ( ! session ) ;
@@ -65,9 +70,17 @@ function doTest(testOptions, callback) {
65
70
assert . ok ( session ) ;
66
71
assert . strictEqual ( session . id . toString ( 'hex' ) , id . toString ( 'hex' ) ) ;
67
72
73
+ let data = session . data ;
74
+
75
+ // Return an invalid session to test Node does not crash.
76
+ if ( testOptions . invalidSession ) {
77
+ data = Buffer . from ( 'INVALID SESSION' ) ;
78
+ session = null ;
79
+ }
80
+
68
81
// Just to check that async really works there
69
82
setTimeout ( function ( ) {
70
- callback ( null , session . data ) ;
83
+ callback ( null , data ) ;
71
84
} , 100 ) ;
72
85
} ) ;
73
86
@@ -118,14 +131,25 @@ function doTest(testOptions, callback) {
118
131
} ) ;
119
132
120
133
process . on ( 'exit' , function ( ) {
134
+ // Each test run connects 6 times: an initial request and 5 reconnect
135
+ // requests.
136
+ assert . strictEqual ( requestCount , 6 ) ;
137
+
121
138
if ( testOptions . tickets ) {
122
- assert . strictEqual ( requestCount , 6 ) ;
139
+ // No session cache callbacks are called.
123
140
assert . strictEqual ( resumeCount , 0 ) ;
141
+ assert . strictEqual ( newSessionCount , 0 ) ;
142
+ } else if ( testOptions . invalidSession ) {
143
+ // The resume callback was called, but each connection established a
144
+ // fresh session.
145
+ assert . strictEqual ( resumeCount , 5 ) ;
146
+ assert . strictEqual ( newSessionCount , 6 ) ;
124
147
} else {
125
- // initial request + reconnect requests (5 times)
148
+ // The resume callback was called, and only the initial connection
149
+ // establishes a fresh session.
126
150
assert . ok ( session ) ;
127
- assert . strictEqual ( requestCount , 6 ) ;
128
151
assert . strictEqual ( resumeCount , 5 ) ;
152
+ assert . strictEqual ( newSessionCount , 1 ) ;
129
153
}
130
154
} ) ;
131
155
}
0 commit comments