diff --git a/auth/jwt/middleware_test.go b/auth/jwt/middleware_test.go index 8a45201..efaaf2d 100644 --- a/auth/jwt/middleware_test.go +++ b/auth/jwt/middleware_test.go @@ -2,6 +2,7 @@ import ( "context" + "sync" "testing" "time" @@ -199,3 +200,22 @@ t.Fatalf("JWT customClaims.MyProperty did not match: expecting %s got %s", myProperty, custCl.MyProperty) } } + +func TestIssue562(t *testing.T) { + var ( + kf = func(token *jwt.Token) (interface{}, error) { return []byte("secret"), nil } + e = NewParser(kf, jwt.SigningMethodHS256, jwt.MapClaims{})(endpoint.Nop) + key = JWTTokenContextKey + val = "eyJhbGciOiJIUzI1NiIsImtpZCI6ImtpZCIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiZ28ta2l0In0.14M2VmYyApdSlV_LZ88ajjwuaLeIFplB8JpyNy0A19E" + ctx = context.WithValue(context.Background(), key, val) + ) + wg := sync.WaitGroup{} + for i := 0; i < 100; i++ { + wg.Add(1) + go func() { + defer wg.Done() + e(ctx, struct{}{}) // fatal error: concurrent map read and map write + }() + } + wg.Wait() +}