@@ -20,21 +20,39 @@ var serverCount = 0;
2020function createServer ( ) {
2121 var id = serverCount ++ ;
2222
23+ var counter = 0 ;
24+ var previousKey = null ;
25+
2326 var server = tls . createServer ( {
2427 key : fs . readFileSync ( common . fixturesDir + '/keys/agent1-key.pem' ) ,
2528 cert : fs . readFileSync ( common . fixturesDir + '/keys/agent1-cert.pem' ) ,
2629 ticketKeys : keys
2730 } , function ( c ) {
2831 serverLog . push ( id ) ;
2932 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+ }
3047 } ) ;
3148
3249 return server ;
3350}
3451
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 ) ;
3856
3957// Create one TCP server and balance sockets to multiple TLS server instances
4058var shared = net . createServer ( function ( c ) {
@@ -54,7 +72,7 @@ function start(callback) {
5472 session : sess ,
5573 rejectUnauthorized : false
5674 } , function ( ) {
57- sess = s . getSession ( ) || sess ;
75+ sess = sess || s . getSession ( ) ;
5876 ticketLog . push ( s . getTLSTicket ( ) . toString ( 'hex' ) ) ;
5977 } ) ;
6078 s . on ( 'close' , function ( ) {
@@ -70,8 +88,14 @@ function start(callback) {
7088
7189process . on ( 'exit' , function ( ) {
7290 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 ++ ) {
7492 assert . notEqual ( serverLog [ i ] , serverLog [ i + 1 ] ) ;
7593 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 ] ) ;
76100 }
77101} ) ;
0 commit comments