mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-01 00:23:48 +03:00
caddytls: Fix data race in test (close #1844)
The race was in the test only; not in the production code
This commit is contained in:
parent
01f3593fd6
commit
c0c7437fa5
2 changed files with 15 additions and 7 deletions
|
@ -21,6 +21,7 @@ import (
|
|||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"golang.org/x/crypto/ocsp"
|
||||
|
@ -243,8 +244,9 @@ func RotateSessionTicketKeys(cfg *tls.Config) chan struct{} {
|
|||
|
||||
// Functions that may be swapped out for testing
|
||||
var (
|
||||
runTLSTicketKeyRotation = standaloneTLSTicketKeyRotation
|
||||
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte { return keys }
|
||||
runTLSTicketKeyRotation = standaloneTLSTicketKeyRotation
|
||||
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte { return keys }
|
||||
setSessionTicketKeysTestHookMu sync.Mutex
|
||||
)
|
||||
|
||||
// standaloneTLSTicketKeyRotation governs over the array of TLS ticket keys used to de/crypt TLS tickets.
|
||||
|
@ -271,7 +273,10 @@ func standaloneTLSTicketKeyRotation(c *tls.Config, ticker *time.Ticker, exitChan
|
|||
c.SessionTicketsDisabled = true // bail if we don't have the entropy for the first one
|
||||
return
|
||||
}
|
||||
c.SetSessionTicketKeys(setSessionTicketKeysTestHook(keys))
|
||||
setSessionTicketKeysTestHookMu.Lock()
|
||||
setSessionTicketKeysHook := setSessionTicketKeysTestHook
|
||||
setSessionTicketKeysTestHookMu.Unlock()
|
||||
c.SetSessionTicketKeys(setSessionTicketKeysHook(keys))
|
||||
|
||||
for {
|
||||
select {
|
||||
|
@ -298,7 +303,7 @@ func standaloneTLSTicketKeyRotation(c *tls.Config, ticker *time.Ticker, exitChan
|
|||
keys[0] = newTicketKey
|
||||
}
|
||||
// pushes the last key out, doesn't matter that we don't have a new one
|
||||
c.SetSessionTicketKeys(setSessionTicketKeysTestHook(keys))
|
||||
c.SetSessionTicketKeys(setSessionTicketKeysHook(keys))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,17 +86,20 @@ func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
|
|||
|
||||
tlsGovChan := make(chan struct{})
|
||||
defer close(tlsGovChan)
|
||||
callSync := make(chan *syncPkt, 1)
|
||||
defer close(callSync)
|
||||
callSync := make(chan syncPkt)
|
||||
|
||||
setSessionTicketKeysTestHookMu.Lock()
|
||||
oldHook := setSessionTicketKeysTestHook
|
||||
defer func() {
|
||||
setSessionTicketKeysTestHookMu.Lock()
|
||||
setSessionTicketKeysTestHook = oldHook
|
||||
setSessionTicketKeysTestHookMu.Unlock()
|
||||
}()
|
||||
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte {
|
||||
callSync <- &syncPkt{keys[0], len(keys)}
|
||||
callSync <- syncPkt{keys[0], len(keys)}
|
||||
return keys
|
||||
}
|
||||
setSessionTicketKeysTestHookMu.Unlock()
|
||||
|
||||
c := new(tls.Config)
|
||||
timer := time.NewTicker(time.Millisecond * 1)
|
||||
|
|
Loading…
Reference in a new issue