diff --git a/aws/resource_aws_wafregional_rate_based_rule.go b/aws/resource_aws_wafregional_rate_based_rule.go index 7e168a50debf..de7c9c072d17 100644 --- a/aws/resource_aws_wafregional_rate_based_rule.go +++ b/aws/resource_aws_wafregional_rate_based_rule.go @@ -130,7 +130,7 @@ func resourceAwsWafRegionalRateBasedRuleUpdate(d *schema.ResourceData, meta inte conn := meta.(*AWSClient).wafregionalconn region := meta.(*AWSClient).region - if d.HasChange("predicate") { + if d.HasChange("predicate") || d.HasChange("rate_limit") { o, n := d.GetChange("predicate") oldP, newP := o.(*schema.Set).List(), n.(*schema.Set).List() rateLimit := d.Get("rate_limit") diff --git a/aws/resource_aws_wafregional_rate_based_rule_test.go b/aws/resource_aws_wafregional_rate_based_rule_test.go index aecf8a6578e3..18cc86d56584 100644 --- a/aws/resource_aws_wafregional_rate_based_rule_test.go +++ b/aws/resource_aws_wafregional_rate_based_rule_test.go @@ -137,6 +137,37 @@ func TestAccAWSWafRegionalRateBasedRule_changePredicates(t *testing.T) { }) } +func TestAccAWSWafRegionalRateBasedRule_changeRateLimit(t *testing.T) { + var before, after waf.RateBasedRule + ruleName := fmt.Sprintf("wafrule%s", acctest.RandString(5)) + rateLimitBefore := "2000" + rateLimitAfter := "2001" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSWafRegionalRateBasedRuleDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSWafRegionalRateBasedRuleWithRateLimitConfig(ruleName, rateLimitBefore), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckAWSWafRegionalRateBasedRuleExists("aws_wafregional_rate_based_rule.wafrule", &before), + resource.TestCheckResourceAttr("aws_wafregional_rate_based_rule.wafrule", "name", ruleName), + resource.TestCheckResourceAttr("aws_wafregional_rate_based_rule.wafrule", "rate_limit", rateLimitBefore), + ), + }, + { + Config: testAccAWSWafRegionalRateBasedRuleWithRateLimitConfig(ruleName, rateLimitAfter), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckAWSWafRegionalRateBasedRuleExists("aws_wafregional_rate_based_rule.wafrule", &after), + resource.TestCheckResourceAttr("aws_wafregional_rate_based_rule.wafrule", "name", ruleName), + resource.TestCheckResourceAttr("aws_wafregional_rate_based_rule.wafrule", "rate_limit", rateLimitAfter), + ), + }, + }, + }) +} + // computeWafRegionalRateBasedRulePredicateWithIpSet calculates index // which isn't static because dataId is generated as part of the test func computeWafRegionalRateBasedRulePredicateWithIpSet(ipSet *waf.IPSet, negated bool, pType string, idx *int) resource.TestCheckFunc { @@ -402,3 +433,13 @@ resource "aws_wafregional_rate_based_rule" "wafrule" { rate_limit = 2000 }`, name, name) } + +func testAccAWSWafRegionalRateBasedRuleWithRateLimitConfig(name string, limit string) string { + return fmt.Sprintf(` +resource "aws_wafregional_rate_based_rule" "wafrule" { + name = "%s" + metric_name = "%s" + rate_key = "IP" + rate_limit = %s +}`, name, name, limit) +}