@@ -10,7 +10,6 @@ import (
10
10
"net/http/httptest"
11
11
"net/url"
12
12
"strings"
13
- "sync"
14
13
"testing"
15
14
16
15
"github.com/golang-jwt/jwt/v4"
@@ -753,28 +752,54 @@ func TestWithConfig_panic(t *testing.T) {
753
752
)
754
753
}
755
754
756
- func TestToMiddlewareRace (t * testing.T ) {
757
- e := echo .New ()
758
- mw , err := Config {
759
- ParseTokenFunc : func (c echo.Context , auth string ) (interface {}, error ) {
760
- return auth , nil
755
+ func TestDataRacesOnParallelExecution (t * testing.T ) {
756
+ var testCases = []struct {
757
+ name string
758
+ whenHeader string
759
+ expectCode int
760
+ }{ // run multiple cases in parallel to catch data races
761
+ {
762
+ name : "ok" ,
763
+ whenHeader : "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" ,
764
+ expectCode : http .StatusTeapot ,
761
765
},
762
- SuccessHandler : func (c echo.Context ) {
763
- c .Set ("success" , "yes" )
766
+ {
767
+ name : "nok" ,
768
+ whenHeader : "Bearer x.x.x" ,
769
+ expectCode : http .StatusUnauthorized ,
764
770
},
765
- }.ToMiddleware ()
766
- assert .NoError (t , err )
771
+ {
772
+ name : "nok, simulatenous error" ,
773
+ whenHeader : "Bearer x.x.x" ,
774
+ expectCode : http .StatusUnauthorized ,
775
+ },
776
+ }
767
777
768
- dummyHandler := func (_ echo.Context ) error { return nil }
769
- var wg sync.WaitGroup
770
- for i := 0 ; i < 10 ; i ++ {
771
- wg .Add (1 )
772
- go func () {
773
- defer wg .Done ()
774
- for j := 0 ; j < 10 ; j ++ {
775
- mw (dummyHandler )(e .NewContext (httptest .NewRequest ("" , "/" , nil ), httptest .NewRecorder ()))
778
+ e := echo .New ()
779
+ e .GET ("/" , func (c echo.Context ) error {
780
+ token := c .Get ("user" ).(* jwt.Token )
781
+ return c .JSON (http .StatusTeapot , token .Claims )
782
+ })
783
+
784
+ mw , err := Config {SigningKey : []byte ("secret" )}.ToMiddleware ()
785
+ if err != nil {
786
+ t .Fatal (err )
787
+ }
788
+ e .Use (mw )
789
+
790
+ for _ , tc := range testCases {
791
+ t .Run (tc .name , func (t * testing.T ) {
792
+ t .Parallel ()
793
+
794
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
795
+ req .Header .Set (echo .HeaderAuthorization , tc .whenHeader )
796
+ res := httptest .NewRecorder ()
797
+
798
+ e .ServeHTTP (res , req )
799
+
800
+ if res .Code != tc .expectCode {
801
+ t .Failed ()
776
802
}
777
- }( )
803
+ })
778
804
}
779
- wg .Wait ()
780
805
}
0 commit comments