mockoidc
mockoidc copied to clipboard
Add locks around session store map
I encountered a data race when running parallelized tests with this library. The stack demonstrated a race between NewSession() performing a write operation on a map and GetSessionByID() performing a racing read operation on the same map.
This PR inserts a mutex around map access to solve this data race.
==================
WARNING: DATA RACE
Write at 0x00c00032aea0 by goroutine 22758:
runtime.mapassign_faststr()
/opt/hostedtoolcache/go/1.20.3/x64/src/runtime/map_faststr.go:203 +0x0
github.com/oauth2-proxy/mockoidc.(*SessionStore).NewSession()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/session.go:58 +0x332
github.com/oauth2-proxy/mockoidc.(*MockOIDC).Authorize()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/handlers.go:105 +0x63a
github.com/oauth2-proxy/mockoidc.(*MockOIDC).Authorize-fm()
<autogenerated>:1 +0x57
net/http.HandlerFunc.ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
github.com/oauth2-proxy/mockoidc.(*MockOIDC).forceError.func1()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/mockoidc.go:285 +0x13c
net/http.HandlerFunc.ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
net/http.(*ServeMux).ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2500 +0xc5
net/http.serverHandler.ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2936 +0x682
net/http.(*conn).serve()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:1995 +0xbd4
net/http.(*Server).Serve.func3()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x58
Previous read at 0x00c00032aea0 by goroutine 22762:
runtime.mapaccess2_faststr()
/opt/hostedtoolcache/go/1.20.3/x64/src/runtime/map_faststr.go:108 +0x0
github.com/oauth2-proxy/mockoidc.(*SessionStore).GetSessionByID()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/session.go:65 +0x1f0
github.com/oauth2-proxy/mockoidc.(*MockOIDC).validateCodeGrant()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/handlers.go:230 +0x19f
github.com/oauth2-proxy/mockoidc.(*MockOIDC).Token()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/handlers.go:163 +0x285
github.com/oauth2-proxy/mockoidc.(*MockOIDC).Token-fm()
<autogenerated>:1 +0x57
net/http.HandlerFunc.ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
github.com/oauth2-proxy/mockoidc.(*MockOIDC).forceError.func1()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/mockoidc.go:285 +0x13c
net/http.HandlerFunc.ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
net/http.(*ServeMux).ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2500 +0xc5
net/http.serverHandler.ServeHTTP()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2936 +0x682
net/http.(*conn).serve()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:1995 +0xbd4
net/http.(*Server).Serve.func3()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x58
Goroutine 22758 (running) created at:
net/http.(*Server).Serve()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x817
github.com/oauth2-proxy/mockoidc.(*MockOIDC).Start.func1()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/mockoidc.go:129 +0x67
Goroutine 22762 (running) created at:
net/http.(*Server).Serve()
/opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x817
github.com/oauth2-proxy/mockoidc.(*MockOIDC).Start.func1()
/home/runner/go/pkg/mod/github.com/oauth2-proxy/[email protected]/mockoidc.go:129 +0x67
==================