@@ -20,21 +20,39 @@ var serverCount = 0;
20
20
function createServer ( ) {
21
21
var id = serverCount ++ ;
22
22
23
+ var counter = 0 ;
24
+ var previousKey = null ;
25
+
23
26
var server = tls . createServer ( {
24
27
key : fs . readFileSync ( common . fixturesDir + '/keys/agent1-key.pem' ) ,
25
28
cert : fs . readFileSync ( common . fixturesDir + '/keys/agent1-cert.pem' ) ,
26
29
ticketKeys : keys
27
30
} , function ( c ) {
28
31
serverLog . push ( id ) ;
29
32
c . end ( ) ;
33
+
34
+ counter ++ ;
35
+
36
+ // Rotate ticket keys
37
+ if ( counter === 1 ) {
38
+ previousKey = server . getTicketKeys ( ) ;
39
+ server . setTicketKeys ( crypto . randomBytes ( 48 ) ) ;
40
+ } else if ( counter === 2 ) {
41
+ server . setTicketKeys ( previousKey ) ;
42
+ } else if ( counter === 3 ) {
43
+ // Use keys from counter=2
44
+ } else {
45
+ throw new Error ( 'UNREACHABLE' ) ;
46
+ }
30
47
} ) ;
31
48
32
49
return server ;
33
50
}
34
51
35
- var servers = [ createServer ( ) , createServer ( ) ,
36
- createServer ( ) , createServer ( ) ,
37
- createServer ( ) , createServer ( ) ] ;
52
+ var naturalServers = [ createServer ( ) , createServer ( ) , createServer ( ) ] ;
53
+
54
+ // 3x servers
55
+ var servers = naturalServers . concat ( naturalServers ) . concat ( naturalServers ) ;
38
56
39
57
// Create one TCP server and balance sockets to multiple TLS server instances
40
58
var shared = net . createServer ( function ( c ) {
@@ -54,7 +72,7 @@ function start(callback) {
54
72
session : sess ,
55
73
rejectUnauthorized : false
56
74
} , function ( ) {
57
- sess = s . getSession ( ) || sess ;
75
+ sess = sess || s . getSession ( ) ;
58
76
ticketLog . push ( s . getTLSTicket ( ) . toString ( 'hex' ) ) ;
59
77
} ) ;
60
78
s . on ( 'close' , function ( ) {
@@ -70,8 +88,14 @@ function start(callback) {
70
88
71
89
process . on ( 'exit' , function ( ) {
72
90
assert . equal ( ticketLog . length , serverLog . length ) ;
73
- for ( var i = 0 ; i < serverLog . length - 1 ; i ++ ) {
91
+ for ( var i = 0 ; i < naturalServers . length - 1 ; i ++ ) {
74
92
assert . notEqual ( serverLog [ i ] , serverLog [ i + 1 ] ) ;
75
93
assert . equal ( ticketLog [ i ] , ticketLog [ i + 1 ] ) ;
94
+
95
+ // 2nd connection should have different ticket
96
+ assert . notEqual ( ticketLog [ i ] , ticketLog [ i + naturalServers . length ] ) ;
97
+
98
+ // 3rd connection should have the same ticket
99
+ assert . equal ( ticketLog [ i ] , ticketLog [ i + naturalServers . length * 2 ] ) ;
76
100
}
77
101
} ) ;
0 commit comments