mirror of
https://github.com/caddyserver/caddy.git
synced 2025-10-27 16:52:47 -04:00
tls: fix TestStandaloneTLSTicketKeyRotation data race
==================
WARNING: DATA RACE
Write at 0x00c42049d300 by goroutine 26:
github.com/mholt/caddy/caddytls.standaloneTLSTicketKeyRotation()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto.go:230 +0x698
Previous read at 0x00c42049d300 by goroutine 25:
github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:113 +0x413
testing.tRunner()
/home/tw/goroot/src/testing/testing.go:610 +0xc9
Goroutine 26 (running) created at:
github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:101 +0x2a4
testing.tRunner()
/home/tw/goroot/src/testing/testing.go:610 +0xc9
Goroutine 25 (running) created at:
testing.(*T).Run()
/home/tw/goroot/src/testing/testing.go:646 +0x52f
testing.RunTests.func1()
/home/tw/goroot/src/testing/testing.go:793 +0xb9
testing.tRunner()
/home/tw/goroot/src/testing/testing.go:610 +0xc9
testing.RunTests()
/home/tw/goroot/src/testing/testing.go:799 +0x4b5
testing.(*M).Run()
/home/tw/goroot/src/testing/testing.go:743 +0x12f
github.com/mholt/caddy/caddytls.TestMain()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/setup_test.go:27 +0x133
main.main()
github.com/mholt/caddy/caddytls/_test/_testmain.go:116 +0x1b1
==================
==================
WARNING: DATA RACE
Write at 0x00c4204aa6c0 by goroutine 26:
github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation.func2()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:93 +0x56
github.com/mholt/caddy/caddytls.standaloneTLSTicketKeyRotation()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto.go:233 +0x638
Previous read at 0x00c4204aa6c0 by goroutine 25:
github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:108 +0x391
testing.tRunner()
/home/tw/goroot/src/testing/testing.go:610 +0xc9
Goroutine 26 (running) created at:
github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:101 +0x2a4
testing.tRunner()
/home/tw/goroot/src/testing/testing.go:610 +0xc9
Goroutine 25 (running) created at:
testing.(*T).Run()
/home/tw/goroot/src/testing/testing.go:646 +0x52f
testing.RunTests.func1()
/home/tw/goroot/src/testing/testing.go:793 +0xb9
testing.tRunner()
/home/tw/goroot/src/testing/testing.go:610 +0xc9
testing.RunTests()
/home/tw/goroot/src/testing/testing.go:799 +0x4b5
testing.(*M).Run()
/home/tw/goroot/src/testing/testing.go:743 +0x12f
github.com/mholt/caddy/caddytls.TestMain()
/home/tw/golib/src/github.com/mholt/caddy/caddytls/setup_test.go:27 +0x133
main.main()
github.com/mholt/caddy/caddytls/_test/_testmain.go:116 +0x1b1
==================
Signed-off-by: Tw <tw19881113@gmail.com>
This commit is contained in:
parent
da5b3cfc50
commit
3d43c5b697
@ -79,19 +79,22 @@ func PrivateKeyBytes(key crypto.PrivateKey) []byte {
|
||||
}
|
||||
|
||||
func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
|
||||
type syncPkt struct {
|
||||
ticketKey [32]byte
|
||||
keysInUse int
|
||||
}
|
||||
|
||||
tlsGovChan := make(chan struct{})
|
||||
defer close(tlsGovChan)
|
||||
callSync := make(chan bool, 1)
|
||||
callSync := make(chan *syncPkt, 1)
|
||||
defer close(callSync)
|
||||
|
||||
oldHook := setSessionTicketKeysTestHook
|
||||
defer func() {
|
||||
setSessionTicketKeysTestHook = oldHook
|
||||
}()
|
||||
var keysInUse [][32]byte
|
||||
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte {
|
||||
keysInUse = keys
|
||||
callSync <- true
|
||||
callSync <- &syncPkt{keys[0], len(keys)}
|
||||
return keys
|
||||
}
|
||||
|
||||
@ -104,17 +107,17 @@ func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
|
||||
var lastTicketKey [32]byte
|
||||
for {
|
||||
select {
|
||||
case <-callSync:
|
||||
if lastTicketKey == keysInUse[0] {
|
||||
case pkt := <-callSync:
|
||||
if lastTicketKey == pkt.ticketKey {
|
||||
close(tlsGovChan)
|
||||
t.Errorf("The same TLS ticket key has been used again (not rotated): %x.", lastTicketKey)
|
||||
return
|
||||
}
|
||||
lastTicketKey = keysInUse[0]
|
||||
lastTicketKey = pkt.ticketKey
|
||||
rounds++
|
||||
if rounds <= NumTickets && len(keysInUse) != rounds {
|
||||
if rounds <= NumTickets && pkt.keysInUse != rounds {
|
||||
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
|
||||
}
|
||||
if c.SessionTicketsDisabled == true {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user