diff --git a/moto/elbv2/responses.py b/moto/elbv2/responses.py index 9266065ec..8d6a237f4 100644 --- a/moto/elbv2/responses.py +++ b/moto/elbv2/responses.py @@ -355,7 +355,7 @@ class ELBV2Response(BaseResponse): def modify_rule(self): rule_arn = self._get_param("RuleArn") params = self._get_params() - conditions = params["Conditions"] + conditions = params.get("Conditions", []) actions = params.get("Actions", []) rules = self.elbv2_backend.modify_rule( rule_arn=rule_arn, conditions=conditions, actions=actions diff --git a/tests/test_elbv2/test_elbv2.py b/tests/test_elbv2/test_elbv2.py index 63ecf9b69..6af1c4df8 100644 --- a/tests/test_elbv2/test_elbv2.py +++ b/tests/test_elbv2/test_elbv2.py @@ -632,6 +632,64 @@ def test_create_rule_priority_in_use(): err["Message"].should.equal("The specified priority is in use.") +@mock_elbv2 +@mock_ec2 +def test_modify_rule_conditions(): + response, _, _, _, _, elbv2 = create_load_balancer() + load_balancer_arn = response.get("LoadBalancers")[0].get("LoadBalancerArn") + + action = { + "Type": "redirect", + "RedirectConfig": { + "Protocol": "HTTPS", + "Port": "443", + "StatusCode": "HTTP_301", + }, + } + condition = { + "Field": "path-pattern", + "PathPatternConfig": {"Values": [f"/sth*",]}, + } + + response = elbv2.create_listener( + LoadBalancerArn=load_balancer_arn, + Protocol="HTTP", + Port=80, + DefaultActions=[action], + ) + http_listener_arn = response.get("Listeners")[0]["ListenerArn"] + + response = elbv2.create_rule( + ListenerArn=http_listener_arn, Priority=100, Conditions=[], Actions=[], + ) + rule = response["Rules"][0] + + assert len(rule["Actions"]) == 0 + assert len(rule["Conditions"]) == 0 + + response = elbv2.modify_rule(RuleArn=rule["RuleArn"], Actions=[action],) + rule = response["Rules"][0] + + assert len(rule["Actions"]) == 1 + assert len(rule["Conditions"]) == 0 + + response = elbv2.modify_rule(RuleArn=rule["RuleArn"], Conditions=[condition]) + rule = response["Rules"][0] + + assert len(rule["Actions"]) == 1 + assert len(rule["Conditions"]) == 1 + + response = elbv2.modify_rule( + RuleArn=rule["RuleArn"], + Conditions=[condition, condition], + Actions=[action, action], + ) + rule = response["Rules"][0] + + assert len(rule["Actions"]) == 2 + assert len(rule["Conditions"]) == 2 + + @mock_elbv2 @mock_ec2 def test_handle_listener_rules():