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  }