@@ -2418,3 +2418,181 @@ func TestValidateFilterRequestHeaderModifier(t *testing.T) {
2418
2418
})
2419
2419
}
2420
2420
}
2421
+
2422
+ func TestValidateFilterResponseHeaderModifier (t * testing.T ) {
2423
+ createAllValidValidator := func () * validationfakes.FakeHTTPFieldsValidator {
2424
+ v := & validationfakes.FakeHTTPFieldsValidator {}
2425
+ return v
2426
+ }
2427
+
2428
+ tests := []struct {
2429
+ filter gatewayv1.HTTPRouteFilter
2430
+ validator * validationfakes.FakeHTTPFieldsValidator
2431
+ name string
2432
+ expectErrCount int
2433
+ }{
2434
+ {
2435
+ validator : createAllValidValidator (),
2436
+ filter : gatewayv1.HTTPRouteFilter {
2437
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2438
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2439
+ Set : []gatewayv1.HTTPHeader {
2440
+ {Name : "MyBespokeHeader" , Value : "my-value" },
2441
+ },
2442
+ Add : []gatewayv1.HTTPHeader {
2443
+ {Name : "Accept-Encoding" , Value : "gzip" },
2444
+ },
2445
+ Remove : []string {"Cache-Control" },
2446
+ },
2447
+ },
2448
+ expectErrCount : 0 ,
2449
+ name : "valid response header modifier filter" ,
2450
+ },
2451
+ {
2452
+ validator : createAllValidValidator (),
2453
+ filter : gatewayv1.HTTPRouteFilter {
2454
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2455
+ ResponseHeaderModifier : nil ,
2456
+ },
2457
+ expectErrCount : 1 ,
2458
+ name : "nil response header modifier filter" ,
2459
+ },
2460
+ {
2461
+ validator : func () * validationfakes.FakeHTTPFieldsValidator {
2462
+ v := createAllValidValidator ()
2463
+ v .ValidateFilterHeaderNameReturns (errors .New ("Invalid header" ))
2464
+ return v
2465
+ }(),
2466
+ filter : gatewayv1.HTTPRouteFilter {
2467
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2468
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2469
+ Add : []gatewayv1.HTTPHeader {
2470
+ {Name : "$var_name" , Value : "gzip" },
2471
+ },
2472
+ },
2473
+ },
2474
+ expectErrCount : 1 ,
2475
+ name : "response header modifier filter with invalid add" ,
2476
+ },
2477
+ {
2478
+ validator : func () * validationfakes.FakeHTTPFieldsValidator {
2479
+ v := createAllValidValidator ()
2480
+ v .ValidateFilterHeaderNameReturns (errors .New ("Invalid header" ))
2481
+ return v
2482
+ }(),
2483
+ filter : gatewayv1.HTTPRouteFilter {
2484
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2485
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2486
+ Remove : []string {"$var-name" },
2487
+ },
2488
+ },
2489
+ expectErrCount : 1 ,
2490
+ name : "response header modifier filter with invalid remove" ,
2491
+ },
2492
+ {
2493
+ validator : func () * validationfakes.FakeHTTPFieldsValidator {
2494
+ v := createAllValidValidator ()
2495
+ v .ValidateFilterHeaderValueReturns (errors .New ("Invalid header value" ))
2496
+ return v
2497
+ }(),
2498
+ filter : gatewayv1.HTTPRouteFilter {
2499
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2500
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2501
+ Add : []gatewayv1.HTTPHeader {
2502
+ {Name : "Accept-Encoding" , Value : "yhu$" },
2503
+ },
2504
+ },
2505
+ },
2506
+ expectErrCount : 1 ,
2507
+ name : "response header modifier filter with invalid header value" ,
2508
+ },
2509
+ {
2510
+ validator : func () * validationfakes.FakeHTTPFieldsValidator {
2511
+ v := createAllValidValidator ()
2512
+ v .ValidateFilterHeaderValueReturns (errors .New ("Invalid header value" ))
2513
+ v .ValidateFilterHeaderNameReturns (errors .New ("Invalid header" ))
2514
+ return v
2515
+ }(),
2516
+ filter : gatewayv1.HTTPRouteFilter {
2517
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2518
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2519
+ Set : []gatewayv1.HTTPHeader {
2520
+ {Name : "Host" , Value : "my_host" },
2521
+ },
2522
+ Add : []gatewayv1.HTTPHeader {
2523
+ {Name : "}90yh&$" , Value : "gzip$" },
2524
+ {Name : "}67yh&$" , Value : "compress$" },
2525
+ },
2526
+ Remove : []string {"Cache-Control$}" },
2527
+ },
2528
+ },
2529
+ expectErrCount : 7 ,
2530
+ name : "response header modifier filter all fields invalid" ,
2531
+ },
2532
+ {
2533
+ validator : createAllValidValidator (),
2534
+ filter : gatewayv1.HTTPRouteFilter {
2535
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2536
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2537
+ Set : []gatewayv1.HTTPHeader {
2538
+ {Name : "MyBespokeHeader" , Value : "my-value" },
2539
+ {Name : "mYbespokeHEader" , Value : "duplicate" },
2540
+ },
2541
+ Add : []gatewayv1.HTTPHeader {
2542
+ {Name : "Accept-Encoding" , Value : "gzip" },
2543
+ {Name : "accept-encodING" , Value : "gzip" },
2544
+ },
2545
+ Remove : []string {"Cache-Control" , "cache-control" },
2546
+ },
2547
+ },
2548
+ expectErrCount : 3 ,
2549
+ name : "response header modifier filter not unique names" ,
2550
+ },
2551
+ {
2552
+ validator : createAllValidValidator (),
2553
+ filter : gatewayv1.HTTPRouteFilter {
2554
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2555
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2556
+ Set : []gatewayv1.HTTPHeader {
2557
+ {Name : "Content-Length" , Value : "163" },
2558
+ },
2559
+ Add : []gatewayv1.HTTPHeader {
2560
+ {Name : "Content-Type" , Value : "text/plain" },
2561
+ },
2562
+ Remove : []string {"X-Pad" },
2563
+ },
2564
+ },
2565
+ expectErrCount : 3 ,
2566
+ name : "invalid response header modifier filter" ,
2567
+ },
2568
+ {
2569
+ validator : createAllValidValidator (),
2570
+ filter : gatewayv1.HTTPRouteFilter {
2571
+ Type : gatewayv1 .HTTPRouteFilterResponseHeaderModifier ,
2572
+ ResponseHeaderModifier : & gatewayv1.HTTPHeaderFilter {
2573
+ Set : []gatewayv1.HTTPHeader {
2574
+ {Name : "X-Accel-Redirect" , Value : "/protected/iso.img" },
2575
+ },
2576
+ Add : []gatewayv1.HTTPHeader {
2577
+ {Name : "X-Accel-Limit-Rate" , Value : "1024" },
2578
+ },
2579
+ Remove : []string {"X-Accel-Charset" },
2580
+ },
2581
+ },
2582
+ expectErrCount : 3 ,
2583
+ name : "invalid response header modifier filter" ,
2584
+ },
2585
+ }
2586
+
2587
+ filterPath := field .NewPath ("test" )
2588
+
2589
+ for _ , test := range tests {
2590
+ t .Run (test .name , func (t * testing.T ) {
2591
+ g := NewWithT (t )
2592
+ allErrs := validateFilterResponseHeaderModifier (
2593
+ test .validator , test .filter .ResponseHeaderModifier , filterPath ,
2594
+ )
2595
+ g .Expect (allErrs ).To (HaveLen (test .expectErrCount ))
2596
+ })
2597
+ }
2598
+ }
0 commit comments