| Index: third_party/gsutil/third_party/boto/tests/unit/ec2/elb/test_attribute.py
|
| diff --git a/third_party/gsutil/third_party/boto/tests/unit/ec2/elb/test_attribute.py b/third_party/gsutil/third_party/boto/tests/unit/ec2/elb/test_attribute.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..40edecba8279ecdd9e1c7f832a9fdf6fa90cedc6
|
| --- /dev/null
|
| +++ b/third_party/gsutil/third_party/boto/tests/unit/ec2/elb/test_attribute.py
|
| @@ -0,0 +1,205 @@
|
| +from tests.unit import unittest
|
| +from tests.compat import mock
|
| +
|
| +from boto.ec2.elb import ELBConnection
|
| +from boto.ec2.elb import LoadBalancer
|
| +from boto.ec2.elb.attributes import LbAttributes
|
| +
|
| +ATTRIBUTE_GET_TRUE_CZL_RESPONSE = b"""<?xml version="1.0" encoding="UTF-8"?>
|
| +<DescribeLoadBalancerAttributesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
|
| + <DescribeLoadBalancerAttributesResult>
|
| + <LoadBalancerAttributes>
|
| + <CrossZoneLoadBalancing>
|
| + <Enabled>true</Enabled>
|
| + </CrossZoneLoadBalancing>
|
| + </LoadBalancerAttributes>
|
| + </DescribeLoadBalancerAttributesResult>
|
| +<ResponseMetadata>
|
| + <RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
|
| +</ResponseMetadata>
|
| +</DescribeLoadBalancerAttributesResponse>
|
| +"""
|
| +
|
| +ATTRIBUTE_GET_FALSE_CZL_RESPONSE = b"""<?xml version="1.0" encoding="UTF-8"?>
|
| +<DescribeLoadBalancerAttributesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
|
| + <DescribeLoadBalancerAttributesResult>
|
| + <LoadBalancerAttributes>
|
| + <CrossZoneLoadBalancing>
|
| + <Enabled>false</Enabled>
|
| + </CrossZoneLoadBalancing>
|
| + </LoadBalancerAttributes>
|
| + </DescribeLoadBalancerAttributesResult>
|
| +<ResponseMetadata>
|
| + <RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
|
| +</ResponseMetadata>
|
| +</DescribeLoadBalancerAttributesResponse>
|
| +"""
|
| +
|
| +ATTRIBUTE_GET_CS_RESPONSE = b"""<?xml version="1.0" encoding="UTF-8"?>
|
| +<DescribeLoadBalancerAttributesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
|
| + <DescribeLoadBalancerAttributesResult>
|
| + <LoadBalancerAttributes>
|
| + <ConnectionSettings>
|
| + <IdleTimeout>30</IdleTimeout>
|
| + </ConnectionSettings>
|
| + </LoadBalancerAttributes>
|
| + </DescribeLoadBalancerAttributesResult>
|
| +<ResponseMetadata>
|
| + <RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
|
| +</ResponseMetadata>
|
| +</DescribeLoadBalancerAttributesResponse>
|
| +"""
|
| +
|
| +ATTRIBUTE_SET_RESPONSE = b"""<?xml version="1.0" encoding="UTF-8"?>
|
| +<ModifyLoadBalancerAttributesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
|
| +<ModifyLoadBalancerAttributesResult/>
|
| +<ResponseMetadata>
|
| + <RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
|
| +</ResponseMetadata>
|
| +</ModifyLoadBalancerAttributesResponse>
|
| +"""
|
| +
|
| +# make_request arguments for setting attributes.
|
| +# Format: (API_COMMAND, API_PARAMS, API_PATH, API_METHOD)
|
| +ATTRIBUTE_SET_CZL_TRUE_REQUEST = (
|
| + 'ModifyLoadBalancerAttributes',
|
| + {'LoadBalancerAttributes.CrossZoneLoadBalancing.Enabled': 'true',
|
| + 'LoadBalancerName': 'test_elb'}, mock.ANY, mock.ANY)
|
| +ATTRIBUTE_SET_CZL_FALSE_REQUEST = (
|
| + 'ModifyLoadBalancerAttributes',
|
| + {'LoadBalancerAttributes.CrossZoneLoadBalancing.Enabled': 'false',
|
| + 'LoadBalancerName': 'test_elb'}, mock.ANY, mock.ANY)
|
| +
|
| +# Tests to be run on an LbAttributes
|
| +# Format:
|
| +# (EC2_RESPONSE_STRING, list( (string_of_attribute_to_test, value) ) )
|
| +ATTRIBUTE_TESTS = [
|
| + (ATTRIBUTE_GET_TRUE_CZL_RESPONSE,
|
| + [('cross_zone_load_balancing.enabled', True)]),
|
| + (ATTRIBUTE_GET_FALSE_CZL_RESPONSE,
|
| + [('cross_zone_load_balancing.enabled', False)]),
|
| + (ATTRIBUTE_GET_CS_RESPONSE,
|
| + [('connecting_settings.idle_timeout', 30)]),
|
| +]
|
| +
|
| +
|
| +class TestLbAttributes(unittest.TestCase):
|
| + """Tests LB Attributes."""
|
| + def _setup_mock(self):
|
| + """Sets up a mock elb request.
|
| + Returns: response, elb connection and LoadBalancer
|
| + """
|
| + mock_response = mock.Mock()
|
| + mock_response.status = 200
|
| + elb = ELBConnection(aws_access_key_id='aws_access_key_id',
|
| + aws_secret_access_key='aws_secret_access_key')
|
| + elb.make_request = mock.Mock(return_value=mock_response)
|
| + return mock_response, elb, LoadBalancer(elb, 'test_elb')
|
| +
|
| + def _verify_attributes(self, attributes, attr_tests):
|
| + """Verifies an LbAttributes object."""
|
| + for attr, result in attr_tests:
|
| + attr_result = attributes
|
| + for sub_attr in attr.split('.'):
|
| + attr_result = getattr(attr_result, sub_attr, None)
|
| + self.assertEqual(attr_result, result)
|
| +
|
| + def test_get_all_lb_attributes(self):
|
| + """Tests getting the LbAttributes from the elb.connection."""
|
| + mock_response, elb, _ = self._setup_mock()
|
| +
|
| + for response, attr_tests in ATTRIBUTE_TESTS:
|
| + mock_response.read.return_value = response
|
| + attributes = elb.get_all_lb_attributes('test_elb')
|
| + self.assertTrue(isinstance(attributes, LbAttributes))
|
| + self._verify_attributes(attributes, attr_tests)
|
| +
|
| + def test_get_lb_attribute(self):
|
| + """Tests getting a single attribute from elb.connection."""
|
| + mock_response, elb, _ = self._setup_mock()
|
| +
|
| + tests = [
|
| + ('crossZoneLoadBalancing', True, ATTRIBUTE_GET_TRUE_CZL_RESPONSE),
|
| + ('crossZoneLoadBalancing', False, ATTRIBUTE_GET_FALSE_CZL_RESPONSE),
|
| + ]
|
| +
|
| + for attr, value, response in tests:
|
| + mock_response.read.return_value = response
|
| + status = elb.get_lb_attribute('test_elb', attr)
|
| + self.assertEqual(status, value)
|
| +
|
| + def test_modify_lb_attribute(self):
|
| + """Tests setting the attributes from elb.connection."""
|
| + mock_response, elb, _ = self._setup_mock()
|
| +
|
| + tests = [
|
| + ('crossZoneLoadBalancing', True, ATTRIBUTE_SET_CZL_TRUE_REQUEST),
|
| + ('crossZoneLoadBalancing', False, ATTRIBUTE_SET_CZL_FALSE_REQUEST),
|
| + ]
|
| +
|
| + for attr, value, args in tests:
|
| + mock_response.read.return_value = ATTRIBUTE_SET_RESPONSE
|
| + result = elb.modify_lb_attribute('test_elb', attr, value)
|
| + self.assertTrue(result)
|
| + elb.make_request.assert_called_with(*args)
|
| +
|
| + def test_lb_get_attributes(self):
|
| + """Tests the LbAttributes from the ELB object."""
|
| + mock_response, _, lb = self._setup_mock()
|
| +
|
| + for response, attr_tests in ATTRIBUTE_TESTS:
|
| + mock_response.read.return_value = response
|
| + attributes = lb.get_attributes(force=True)
|
| + self.assertTrue(isinstance(attributes, LbAttributes))
|
| + self._verify_attributes(attributes, attr_tests)
|
| +
|
| + def test_lb_is_cross_zone_load_balancing(self):
|
| + """Tests checking is_cross_zone_load_balancing."""
|
| + mock_response, _, lb = self._setup_mock()
|
| +
|
| + tests = [
|
| + # Format: (method, args, result, response)
|
| + # Gets a true result.
|
| + (lb.is_cross_zone_load_balancing, [], True,
|
| + ATTRIBUTE_GET_TRUE_CZL_RESPONSE),
|
| + # Returns the previous calls cached value.
|
| + (lb.is_cross_zone_load_balancing, [], True,
|
| + ATTRIBUTE_GET_FALSE_CZL_RESPONSE),
|
| + # Gets a false result.
|
| + (lb.is_cross_zone_load_balancing, [True], False,
|
| + ATTRIBUTE_GET_FALSE_CZL_RESPONSE),
|
| + ]
|
| +
|
| + for method, args, result, response in tests:
|
| + mock_response.read.return_value = response
|
| + self.assertEqual(method(*args), result)
|
| +
|
| + def test_lb_enable_cross_zone_load_balancing(self):
|
| + """Tests enabling cross zone balancing from LoadBalancer."""
|
| + mock_response, elb, lb = self._setup_mock()
|
| +
|
| + mock_response.read.return_value = ATTRIBUTE_SET_RESPONSE
|
| + self.assertTrue(lb.enable_cross_zone_load_balancing())
|
| + elb.make_request.assert_called_with(*ATTRIBUTE_SET_CZL_TRUE_REQUEST)
|
| +
|
| + def test_lb_disable_cross_zone_load_balancing(self):
|
| + """Tests disabling cross zone balancing from LoadBalancer."""
|
| + mock_response, elb, lb = self._setup_mock()
|
| +
|
| + mock_response.read.return_value = ATTRIBUTE_SET_RESPONSE
|
| + self.assertTrue(lb.disable_cross_zone_load_balancing())
|
| + elb.make_request.assert_called_with(*ATTRIBUTE_SET_CZL_FALSE_REQUEST)
|
| +
|
| + def test_lb_get_connection_settings(self):
|
| + """Tests checking connectionSettings attribute"""
|
| + mock_response, elb, _ = self._setup_mock()
|
| +
|
| + attrs = [('idle_timeout', 30), ]
|
| + mock_response.read.return_value = ATTRIBUTE_GET_CS_RESPONSE
|
| + attributes = elb.get_all_lb_attributes('test_elb')
|
| + self.assertTrue(isinstance(attributes, LbAttributes))
|
| + for attr, value in attrs:
|
| + self.assertEqual(getattr(attributes.connecting_settings, attr), value)
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|