#!/usr/bin/env python
from tests.unit import unittest
from tests.unit import AWSMockServiceTestCase
import mock
from boto.ec2.connection import EC2Connection
DESCRIBE_INSTANCE_VPC = r"""
c6132c74-b524-4884-87f5-0f4bde4a9760
-
r-72ef4a0a
184906166255
-
i-instance
ami-1624987f
16
running
mykeypair
0
m1.small
2012-12-14T23:48:37.000Z
us-east-1d
default
aki-88aa75e1
disabled
subnet-0dc60667
vpc-id
10.0.0.67
true
-
sg-id
WebServerSG
x86_64
ebs
/dev/sda1
-
/dev/sda1
vol-id
attached
2012-12-14T23:48:43.000Z
true
paravirtual
foo
-
Name
xen
-
eni-id
subnet-id
vpc-id
Primary network interface
ownerid
in-use
10.0.0.67
true
-
sg-id
WebServerSG
eni-attach-id
0
attached
2012-12-14T23:48:37.000Z
true
-
10.0.0.67
true
-
10.0.0.54
false
-
10.0.0.55
false
false
"""
RUN_INSTANCE_RESPONSE = r"""
ad4b83c2-f606-4c39-90c6-5dcc5be823e1
r-c5cef7a7
ownerid
-
sg-id
SSH
-
i-ff0f1299
ami-ed65ba84
0
pending
awskeypair
0
t1.micro
2012-05-30T19:21:18.000Z
us-east-1a
default
aki-b6aa75df
disabled
-
sg-99a710f1
SSH
pending
pending
i386
ebs
/dev/sda1
paravirtual
xen
arn:aws:iam::ownerid:instance-profile/myinstanceprofile
iamid
"""
class TestRunInstanceResponseParsing(unittest.TestCase):
def testIAMInstanceProfileParsedCorrectly(self):
ec2 = EC2Connection(aws_access_key_id='aws_access_key_id',
aws_secret_access_key='aws_secret_access_key')
mock_response = mock.Mock()
mock_response.read.return_value = RUN_INSTANCE_RESPONSE
mock_response.status = 200
ec2.make_request = mock.Mock(return_value=mock_response)
reservation = ec2.run_instances(image_id='ami-12345')
self.assertEqual(len(reservation.instances), 1)
instance = reservation.instances[0]
self.assertEqual(instance.image_id, 'ami-ed65ba84')
# iamInstanceProfile has an ID element, so we want to make sure
# that this does not map to instance.id (which should be the
# id of the ec2 instance).
self.assertEqual(instance.id, 'i-ff0f1299')
self.assertDictEqual(
instance.instance_profile,
{'arn': ('arn:aws:iam::ownerid:'
'instance-profile/myinstanceprofile'),
'id': 'iamid'})
class TestDescribeInstances(AWSMockServiceTestCase):
connection_class = EC2Connection
def default_body(self):
return DESCRIBE_INSTANCE_VPC
def test_multiple_private_ip_addresses(self):
self.set_http_response(status_code=200)
api_response = self.service_connection.get_all_instances()
self.assertEqual(len(api_response), 1)
instances = api_response[0].instances
self.assertEqual(len(instances), 1)
instance = instances[0]
self.assertEqual(len(instance.interfaces), 1)
interface = instance.interfaces[0]
self.assertEqual(len(interface.private_ip_addresses), 3)
addresses = interface.private_ip_addresses
self.assertEqual(addresses[0].private_ip_address, '10.0.0.67')
self.assertTrue(addresses[0].primary)
self.assertEqual(addresses[1].private_ip_address, '10.0.0.54')
self.assertFalse(addresses[1].primary)
self.assertEqual(addresses[2].private_ip_address, '10.0.0.55')
self.assertFalse(addresses[2].primary)
if __name__ == '__main__':
unittest.main()