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:
commit
1b1aecb1e6
1 changed files with 12 additions and 9 deletions
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue