github.com/fastly/go-fastly/v6@v6.8.0/fastly/waf_rules_test.go (about) 1 package fastly 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestClient_WAF_Rules(t *testing.T) { 9 t.Parallel() 10 11 fixtureBase := "waf_rules/" 12 13 var err error 14 var rulesResp *WAFRuleResponse 15 publisher := "owasp" 16 record(t, fixtureBase+"/list_owasp", func(c *Client) { 17 rulesResp, err = c.ListWAFRules(&ListWAFRulesInput{ 18 FilterPublishers: []string{publisher}, 19 }) 20 }) 21 if err != nil { 22 t.Fatal(err) 23 } 24 if len(rulesResp.Items) < 1 { 25 t.Errorf("expected many rules: got %d", len(rulesResp.Items)) 26 } 27 28 for _, r := range rulesResp.Items { 29 if r.Publisher != publisher { 30 t.Errorf("expected rule publisher %s: got %s", publisher, r.Publisher) 31 } 32 } 33 34 publisher = "fastly" 35 var fastlyRulesNumber int 36 record(t, fixtureBase+"/list_all_fastly", func(c *Client) { 37 rulesResp, err = c.ListAllWAFRules(&ListAllWAFRulesInput{ 38 FilterPublishers: []string{publisher}, 39 }) 40 }) 41 if err != nil { 42 t.Fatal(err) 43 } 44 if len(rulesResp.Items) < 1 { 45 t.Errorf("expected many rules: got %d", len(rulesResp.Items)) 46 } 47 48 for _, r := range rulesResp.Items { 49 if r.Publisher != publisher { 50 t.Errorf("expected rule publisher %s: got %s", publisher, r.Publisher) 51 } 52 } 53 fastlyRulesNumber = len(rulesResp.Items) 54 55 record(t, fixtureBase+"/list_all_fastly_exclusion", func(c *Client) { 56 rulesResp, err = c.ListAllWAFRules(&ListAllWAFRulesInput{ 57 FilterPublishers: []string{publisher}, 58 ExcludeMocSecIDs: []int{4170020}, 59 }) 60 }) 61 if err != nil { 62 t.Fatal(err) 63 } 64 if len(rulesResp.Items) < 1 { 65 t.Errorf("expected many rules: got %d", len(rulesResp.Items)) 66 } 67 68 for _, r := range rulesResp.Items { 69 if r.Publisher != publisher { 70 t.Errorf("expected rule publisher %s: got %s", publisher, r.Publisher) 71 } 72 } 73 74 if fastlyRulesNumber-1 != len(rulesResp.Items) { 75 t.Errorf("expected %d rules: got %d", fastlyRulesNumber-1, len(rulesResp.Items)) 76 } 77 78 record(t, fixtureBase+"/list_all_fastly_filter_by_rule_ids", func(c *Client) { 79 rulesResp, err = c.ListAllWAFRules(&ListAllWAFRulesInput{ 80 FilterModSecIDs: []int{1010060, 1010070}, 81 }) 82 }) 83 if err != nil { 84 t.Fatal(err) 85 } 86 if len(rulesResp.Items) != 2 { 87 t.Errorf("expected 2 rules: got %d", len(rulesResp.Items)) 88 } 89 } 90 91 func TestClient_listWAFRules_formatFilters(t *testing.T) { 92 cases := []struct { 93 remote *ListWAFRulesInput 94 local map[string]string 95 }{ 96 { 97 remote: &ListWAFRulesInput{ 98 FilterTagNames: []string{"tag1", "tag2"}, 99 FilterPublishers: []string{"owasp", "trustwave"}, 100 FilterModSecIDs: []int{1010060, 1010070}, 101 ExcludeMocSecIDs: []int{123456, 1234567}, 102 PageSize: 2, 103 PageNumber: 2, 104 Include: "included", 105 }, 106 local: map[string]string{ 107 "filter[waf_tags][name][in]": "tag1,tag2", 108 "filter[publisher][in]": "owasp,trustwave", 109 "filter[modsec_rule_id][in]": "1010060,1010070", 110 "filter[modsec_rule_id][not]": "123456,1234567", 111 "page[size]": "2", 112 "page[number]": "2", 113 "include": "included", 114 }, 115 }, 116 } 117 for _, c := range cases { 118 out := c.remote.formatFilters() 119 if !reflect.DeepEqual(out, c.local) { 120 t.Fatalf("Error matching:\nexpected: %#v\n got: %#v", c.local, out) 121 } 122 } 123 }