def test_AssociateAddress(self): self.cluster_manager.elasticip.user.assign.return_value = None self.cluster_manager.elasticip.user.list.return_value = [ {'ip_id': 1,'vm_id': 1, 'ip': '1.1.0.1'}, {'ip_id': 2,'vm_id': None, 'ip': '1.1.0.2'}, ] action = Action({ 'Action': 'AssociateAddress', 'InstanceId': 2, 'PublicIp': '1.1.0.2', }, self.cluster_manager) response = action.execute() self.assertMultiLineEqual( response, """<?xml version="1.0" encoding="UTF-8"?> <AssociateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/"> <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId> <return>true</return> </AssociateAddressResponse> """ ) with self.assertRaises(AuthFailure): action = Action({ 'Action': 'AssociateAddress', 'InstanceId': 2, 'PublicIp': '1.1.0.3' }, self.cluster_manager) response = action.execute()
def test_DescribeAddresses(self): self.cluster_manager.elasticip.user.list.return_value = [ {'vm_id': 1, 'ip': '192.168.0.1'}, {'vm_id': None, 'ip': '192.168.0.2'}, ] action = Action({'Action': 'DescribeAddresses'}, self.cluster_manager) response = action.execute() self.assertMultiLineEqual( response, """<?xml version="1.0" encoding="UTF-8"?> <DescribeAddressesResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/"> <requestId>a13c7c2e-4106-459d-a728-9d38bcbab9bf</requestId> <addressesSet> <item> <publicIp>192.168.0.1</publicIp> <domain>standard</domain> <instanceId>1</instanceId> </item> <item> <publicIp>192.168.0.2</publicIp> <domain>standard</domain> <instanceId>None</instanceId> </item> </addressesSet> </DescribeAddressesResponse> """ )
def test_DescribeImages(self): self.cluster_manager.image.user.list.side_effect = [ [{ 'description': 'Fake image 01.', 'id': 123, 'name': 'image 01', 'platform': 2, 'state': 0, 'user_id': 1, }], [{ 'description': 'Fake image 02.', 'id': 456, 'name': 'image 02', 'platform': 2, 'state': 0, 'user_id': 1, }], ] action = Action({'Action': 'DescribeImages'}, self.cluster_manager) response = action.execute() self.assertMultiLineEqual( response, """<?xml version="1.0" encoding="UTF-8"?> <DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/"> <requestId>833f0802-7b29-4641-b953-6f6b78908b22</requestId> <imagesSet> <item> <architecture>x86_64</architecture> <description>Fake image 01.</description> <imageId>123</imageId> <imageLocation>ami-123</imageLocation> <imageState>available</imageState> <imageOwnerId>1</imageOwnerId> <isPublic>false</isPublic> <name>image 01</name> <platform></platform> </item> <item> <architecture>x86_64</architecture> <description>Fake image 02.</description> <imageId>456</imageId> <imageLocation>ami-456</imageLocation> <imageState>available</imageState> <imageOwnerId>1</imageOwnerId> <isPublic>true</isPublic> <name>image 02</name> <platform></platform> </item> </imagesSet> </DescribeImagesResponse> """ )
def test_DescribeImages(self): self.cluster_manager.image.user.list.side_effect = [ [{ 'description': 'Fake image 01.', 'id': 123, 'name': 'image 01', 'platform': 2, 'state': 0, 'user_id': 1, }], [{ 'description': 'Fake image 02.', 'id': 456, 'name': 'image 02', 'platform': 2, 'state': 0, 'user_id': 1, }], ] action = Action({'Action': 'DescribeImages'}, self.cluster_manager) response = action.execute() self.assertMultiLineEqual( response, """<?xml version="1.0" encoding="UTF-8"?> <DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/"> <requestId>833f0802-7b29-4641-b953-6f6b78908b22</requestId> <imagesSet> <item> <architecture>x86_64</architecture> <description>Fake image 01.</description> <imageId>123</imageId> <imageLocation>ami-123</imageLocation> <imageState>available</imageState> <imageOwnerId>1</imageOwnerId> <isPublic>false</isPublic> <name>image 01</name> <platform></platform> </item> <item> <architecture>x86_64</architecture> <description>Fake image 02.</description> <imageId>456</imageId> <imageLocation>ami-456</imageLocation> <imageState>available</imageState> <imageOwnerId>1</imageOwnerId> <isPublic>true</isPublic> <name>image 02</name> <platform></platform> </item> </imagesSet> </DescribeImagesResponse> """)
def test_AllocateAddresses(self): self.cluster_manager.elasticip.user.request.return_value = { 'ip': '1.1.0.1', } action = Action({'Action': 'AllocateAddress'}, self.cluster_manager) response = action.execute() self.assertMultiLineEqual( response, """<?xml version="1.0" encoding="UTF-8"?> <AllocateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/"> <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId> <publicIp>1.1.0.1</publicIp> <domain>standard</domain> </AllocateAddressResponse> """ )
# ============================ END OF S3 ================================= cloud_manager = CloudManager( CLM_ADDRESS, aws_key=parameters.get('AWSAccessKeyId'), parameters=parameters, signature=parameters.get('Signature'), ) cluster_manager_name = environ['HTTP_HOST'].split('.')[0] cluster_manager = cloud_manager.get_cluster_manager( by_name=cluster_manager_name) try: if not cluster_manager: raise InvalidZone.NotFound(zone_name=cluster_manager_name) action = Action(parameters, cluster_manager) response = action.execute() start_response('200 OK', [('Content-Type', 'text/xml;charset=UTF-8')]) except EC2Exception, error: http_code = '400 Bad Request' if isinstance(error, AuthFailure): http_code = '401 Unauthorized' response = error.to_xml() start_response(http_code, [('Content-Type', 'text/xml;charset=UTF-8')]) # TODO: # * respect 'Accept-Encoding' HTTP header, i.e. gzip response, etc. return validate(response) def application(environ, start_response): try: return _application(environ, start_response)
cloud_manager = CloudManager( CLM_ADDRESS, aws_key=parameters.get('AWSAccessKeyId'), parameters=parameters, signature=parameters.get('Signature'), ) cluster_manager_name = environ['HTTP_HOST'].split('.')[0] cluster_manager = cloud_manager.get_cluster_manager( by_name=cluster_manager_name ) try: if not cluster_manager: raise InvalidZone.NotFound(zone_name=cluster_manager_name) action = Action(parameters, cluster_manager) response = action.execute() start_response('200 OK', [('Content-Type', 'text/xml;charset=UTF-8')]) except EC2Exception, error: http_code = '400 Bad Request' if isinstance(error, AuthFailure): http_code = '401 Unauthorized' response = error.to_xml() start_response(http_code, [('Content-Type', 'text/xml;charset=UTF-8')]) # TODO: # * respect 'Accept-Encoding' HTTP header, i.e. gzip response, etc. return validate(response) def application(environ, start_response): try: return _application(environ, start_response)