@@ -20,21 +20,37 @@ 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 {
43+ throw new Error ( 'UNREACHABLE' ) ;
44+ }
3045 } ) ;
3146
3247 return server ;
3348}
3449
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 ) ;
3854
3955// Create one TCP server and balance sockets to multiple TLS server instances
4056var shared = net . createServer ( function ( c ) {
@@ -54,7 +70,7 @@ function start(callback) {
5470 session : sess ,
5571 rejectUnauthorized : false
5672 } , function ( ) {
57- sess = s . getSession ( ) || sess ;
73+ sess = sess || s . getSession ( ) ;
5874 ticketLog . push ( s . getTLSTicket ( ) . toString ( 'hex' ) ) ;
5975 } ) ;
6076 s . on ( 'close' , function ( ) {
@@ -70,8 +86,14 @@ function start(callback) {
7086
7187process . on ( 'exit' , function ( ) {
7288 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 ++ ) {
7490 assert . notEqual ( serverLog [ i ] , serverLog [ i + 1 ] ) ;
7591 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 ] ) ;
7698 }
7799} ) ;
0 commit comments