import unittest
from troposphere.elasticloadbalancingv2 import (
Action,
FixedResponseConfig,
RedirectConfig,
TargetGroup,
)
[docs]class TestListenerActions(unittest.TestCase):
[docs] def test_redirect_action(self):
Action(
Type="redirect",
RedirectConfig=RedirectConfig(
StatusCode="HTTP_301",
Protocol="HTTPS",
Host="api.troposphere.org",
Path="redirect/#{path}",
),
).to_dict()
[docs] def test_fixed_response_action(self):
Action(
Type="fixed-response",
FixedResponseConfig=FixedResponseConfig(
ContentType="text/plain",
MessageBody="I am a fixed response",
StatusCode="200",
),
).to_dict()
[docs] def test_forward_action(self):
Action(Type="forward", TargetGroupArn="").to_dict()
[docs] def test_redirect_action_config_one_of(self):
with self.assertRaises(ValueError):
RedirectConfig(StatusCode="HTTP_200").to_dict()
[docs] def test_fixed_response_config_one_of(self):
with self.assertRaises(ValueError):
FixedResponseConfig(
ContentType="application/octet-stream",
).to_dict()
[docs] def test_forward_action_requires_target_arn(self):
with self.assertRaises(ValueError):
Action(Type="forward").to_dict()
[docs] def test_fixed_response_requires_fixed_response_config(self):
with self.assertRaises(ValueError):
Action(Type="fixed-response").to_dict()
[docs] def test_redirect_action_requires_redirect_config(self):
with self.assertRaises(ValueError):
Action(Type="redirect").to_dict()
[docs] def test_target_arn_only_forward(self):
with self.assertRaises(ValueError):
Action(Type="redirect", TargetGroupArn="").to_dict()
[docs] def test_redirect_config_only_with_redirect(self):
with self.assertRaises(ValueError):
Action(
Type="forward",
RedirectConfig=RedirectConfig(
StatusCode="HTTP_301",
),
).to_dict()
[docs] def test_fixed_response_config_only_with_fixed_response(self):
with self.assertRaises(ValueError):
Action(
Type="forward",
FixedResponseConfig=FixedResponseConfig(
ContentType="text/plain",
),
).to_dict()
[docs]class TestTargetGroup(unittest.TestCase):
[docs] def test_lambda_targettype_rejects_properties(self):
with self.assertRaises(ValueError) as valueError:
TargetGroup(
"targetGroup",
TargetType="lambda",
Port=433,
Protocol="HTTPS",
VpcId="unknown",
).to_dict()
self.assertEqual(
'TargetType of "lambda" in "TargetGroup" must not contain '
+ "definitions of 'Port', 'Protocol', 'VpcId'",
str(valueError.exception),
)
[docs] def test_instance_targettype_requires_properties(self):
with self.assertRaises(ValueError) as valueError:
TargetGroup("targetGroup", TargetType="instance").to_dict()
self.assertEqual(
'TargetType of "instance" in "TargetGroup" requires '
+ "definitions of 'Port', 'Protocol', 'VpcId'",
str(valueError.exception),
)
[docs] def test_ip_targettype_requires_properties(self):
with self.assertRaises(ValueError) as valueError:
TargetGroup("targetGroup", TargetType="ip").to_dict()
self.assertEqual(
'TargetType of "ip" in "TargetGroup" '
+ "requires definitions of 'Port', 'Protocol', 'VpcId'",
str(valueError.exception),
)
[docs] def test_no_targettype_requires_properties(self):
with self.assertRaises(ValueError) as valueError:
TargetGroup("targetGroup").to_dict()
self.assertEqual(
'Omitting TargetType in "TargetGroup" '
+ "requires definitions of 'Port', 'Protocol', 'VpcId'",
str(valueError.exception),
)
[docs] def test_invalid_targettype_is_rejected(self):
with self.assertRaises(ValueError) as valueError:
TargetGroup(
"targetGroup",
TargetType="invalid",
Port=433,
Protocol="HTTPS",
VpcId="unknown",
).to_dict()
self.assertEqual(
'TargetGroup.TargetType must be one of: "alb, instance, ip, lambda"',
str(valueError.exception),
)
if __name__ == "__main__":
unittest.main()