0
Fork 0
mirror of https://github.com/caddyserver/caddy.git synced 2024-12-23 22:27:38 -05:00

Merge pull request #989 from tw4452852/tls_race

tls: fix TestStandaloneTLSTicketKeyRotation data race
This commit is contained in:
elcore 2016-08-02 14:03:14 +02:00 committed by GitHub
commit 1b1aecb1e6

View file

@ -79,19 +79,22 @@ func PrivateKeyBytes(key crypto.PrivateKey) []byte {
} }
func TestStandaloneTLSTicketKeyRotation(t *testing.T) { func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
type syncPkt struct {
ticketKey [32]byte
keysInUse int
}
tlsGovChan := make(chan struct{}) tlsGovChan := make(chan struct{})
defer close(tlsGovChan) defer close(tlsGovChan)
callSync := make(chan bool, 1) callSync := make(chan *syncPkt, 1)
defer close(callSync) defer close(callSync)
oldHook := setSessionTicketKeysTestHook oldHook := setSessionTicketKeysTestHook
defer func() { defer func() {
setSessionTicketKeysTestHook = oldHook setSessionTicketKeysTestHook = oldHook
}() }()
var keysInUse [][32]byte
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte { setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte {
keysInUse = keys callSync <- &syncPkt{keys[0], len(keys)}
callSync <- true
return keys return keys
} }
@ -104,17 +107,17 @@ func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
var lastTicketKey [32]byte var lastTicketKey [32]byte
for { for {
select { select {
case <-callSync: case pkt := <-callSync:
if lastTicketKey == keysInUse[0] { if lastTicketKey == pkt.ticketKey {
close(tlsGovChan) close(tlsGovChan)
t.Errorf("The same TLS ticket key has been used again (not rotated): %x.", lastTicketKey) t.Errorf("The same TLS ticket key has been used again (not rotated): %x.", lastTicketKey)
return return
} }
lastTicketKey = keysInUse[0] lastTicketKey = pkt.ticketKey
rounds++ rounds++
if rounds <= NumTickets && len(keysInUse) != rounds { if rounds <= NumTickets && pkt.keysInUse != rounds {
close(tlsGovChan) close(tlsGovChan)
t.Errorf("Expected TLS ticket keys in use: %d; Got instead: %d.", rounds, len(keysInUse)) t.Errorf("Expected TLS ticket keys in use: %d; Got instead: %d.", rounds, pkt.keysInUse)
return return
} }
if c.SessionTicketsDisabled == true { if c.SessionTicketsDisabled == true {