@@ -647,3 +647,61 @@ func TestOptionsSuccessStatusCodeOverride(t *testing.T) {
647647 assertResponse (t , res , http .StatusOK )
648648 })
649649}
650+
651+ func TestCorsAreHeadersAllowed (t * testing.T ) {
652+ cases := []struct {
653+ name string
654+ allowedHeaders []string
655+ requestedHeaders []string
656+ want bool
657+ }{
658+ {
659+ name : "nil allowedHeaders" ,
660+ allowedHeaders : nil ,
661+ requestedHeaders : parseHeaderList ("X-PINGOTHER, Content-Type" ),
662+ want : false ,
663+ },
664+ {
665+ name : "star allowedHeaders" ,
666+ allowedHeaders : []string {"*" },
667+ requestedHeaders : parseHeaderList ("X-PINGOTHER, Content-Type" ),
668+ want : true ,
669+ },
670+ {
671+ name : "empty reqHeader" ,
672+ allowedHeaders : nil ,
673+ requestedHeaders : parseHeaderList ("" ),
674+ want : true ,
675+ },
676+ {
677+ name : "match allowedHeaders" ,
678+ allowedHeaders : []string {"Content-Type" , "X-PINGOTHER" , "X-APP-KEY" },
679+ requestedHeaders : parseHeaderList ("X-PINGOTHER, Content-Type" ),
680+ want : true ,
681+ },
682+ {
683+ name : "not matched allowedHeaders" ,
684+ allowedHeaders : []string {"X-PINGOTHER" },
685+ requestedHeaders : parseHeaderList ("X-API-KEY, Content-Type" ),
686+ want : false ,
687+ },
688+ {
689+ name : "allowedHeaders should be a superset of requestedHeaders" ,
690+ allowedHeaders : []string {"X-PINGOTHER" },
691+ requestedHeaders : parseHeaderList ("X-PINGOTHER, Content-Type" ),
692+ want : false ,
693+ },
694+ }
695+
696+ for _ , tt := range cases {
697+ tt := tt
698+
699+ t .Run (tt .name , func (t * testing.T ) {
700+ c := New (Options {AllowedHeaders : tt .allowedHeaders })
701+ have := c .areHeadersAllowed (tt .requestedHeaders )
702+ if have != tt .want {
703+ t .Errorf ("Cors.areHeadersAllowed() have: %t want: %t" , have , tt .want )
704+ }
705+ })
706+ }
707+ }
0 commit comments