@@ -20,21 +20,37 @@ 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 {
43
+ throw new Error ( 'UNREACHABLE' ) ;
44
+ }
30
45
} ) ;
31
46
32
47
return server ;
33
48
}
34
49
35
- var servers = [ createServer ( ) , createServer ( ) ,
36
- createServer ( ) , createServer ( ) ,
37
- createServer ( ) , createServer ( ) ] ;
50
+ var naturalServers = [ createServer ( ) , createServer ( ) , createServer ( ) ] ;
51
+
52
+ // 3x servers
53
+ var servers = naturalServers . concat ( naturalServers ) . concat ( naturalServers ) ;
38
54
39
55
// Create one TCP server and balance sockets to multiple TLS server instances
40
56
var shared = net . createServer ( function ( c ) {
@@ -54,7 +70,7 @@ function start(callback) {
54
70
session : sess ,
55
71
rejectUnauthorized : false
56
72
} , function ( ) {
57
- sess = s . getSession ( ) || sess ;
73
+ sess = sess || s . getSession ( ) ;
58
74
ticketLog . push ( s . getTLSTicket ( ) . toString ( 'hex' ) ) ;
59
75
} ) ;
60
76
s . on ( 'close' , function ( ) {
@@ -70,8 +86,14 @@ function start(callback) {
70
86
71
87
process . on ( 'exit' , function ( ) {
72
88
assert . equal ( ticketLog . length , serverLog . length ) ;
73
- for ( var i = 0 ; i < serverLog . length - 1 ; i ++ ) {
89
+ for ( var i = 0 ; i < naturalServers . length - 1 ; i ++ ) {
74
90
assert . notEqual ( serverLog [ i ] , serverLog [ i + 1 ] ) ;
75
91
assert . equal ( ticketLog [ i ] , ticketLog [ i + 1 ] ) ;
92
+
93
+ // 2nd connection should have different ticket
94
+ assert . notEqual ( ticketLog [ i ] , ticketLog [ i + naturalServers . length ] ) ;
95
+
96
+ // 3rd connection should have the same ticket
97
+ assert . equal ( ticketLog [ i ] , ticketLog [ i + naturalServers . length * 2 ] ) ;
76
98
}
77
99
} ) ;
0 commit comments