add test for bug #1215527
also fake result for 'disableApiTermination' added in DescribeInstanceAttribute. One of next reviews will add this functionality. fix botocore version to 0.103 version 0.104 returns some inconsistent information Change-Id: I581e803a57c9ee63e873308c0f08cd7cf2158230
This commit is contained in:
parent
d4a116557d
commit
a98a506eb9
|
@ -492,8 +492,12 @@ def describe_instance_attribute(context, instance_id, attribute):
|
|||
if user_data:
|
||||
result['userData'] = {'value': user_data}
|
||||
|
||||
def _format_attr_disable_api_termination(result):
|
||||
result['disableApiTermination'] = {'value': False}
|
||||
|
||||
attribute_formatter = {
|
||||
'blockDeviceMapping': _format_attr_block_device_mapping,
|
||||
'disableApiTermination': _format_attr_disable_api_termination,
|
||||
'groupSet': _format_attr_group_set,
|
||||
'instanceType': _format_attr_instance_type,
|
||||
'kernel': _format_attr_kernel,
|
||||
|
|
|
@ -105,7 +105,7 @@ fi
|
|||
|
||||
sudo pip install -r test-requirements.txt
|
||||
# botocore not in openstack requirements now, so install it manually
|
||||
sudo pip install botocore
|
||||
sudo pip install botocore==0.103
|
||||
sudo OS_STDOUT_CAPTURE=-1 OS_STDERR_CAPTURE=-1 OS_TEST_TIMEOUT=500 OS_TEST_LOCK_PATH=${TMPDIR:-'/tmp'} \
|
||||
python -m subunit.run discover -t ./ ./ec2api/tests/functional | subunit-2to1 | tools/colorizer.py
|
||||
RETVAL=$?
|
||||
|
|
|
@ -255,3 +255,110 @@ class InstanceTest(base.EC2TestCase):
|
|||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.cancelResourceCleanUp(res_clean)
|
||||
self.get_instance_waiter().wait_delete(instance_id)
|
||||
|
||||
def test_instance_attributes(self):
|
||||
instance_type = CONF.aws.instance_type
|
||||
image_id = CONF.aws.image_id
|
||||
resp, data = self.client.RunInstances(
|
||||
ImageId=image_id, InstanceType=instance_type,
|
||||
Placement={'AvailabilityZone': self.zone}, MinCount=1, MaxCount=1)
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
instance_id = data['Instances'][0]['InstanceId']
|
||||
res_clean = self.addResourceCleanUp(self.client.TerminateInstances,
|
||||
InstanceIds=[instance_id])
|
||||
self.assertEqual(1, len(data['Instances']))
|
||||
self.get_instance_waiter().wait_available(instance_id,
|
||||
final_set=('running'))
|
||||
|
||||
if CONF.aws.run_incompatible_tests:
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='blockDeviceMapping')
|
||||
self.assertEqual(200, resp.status_code,
|
||||
base.EC2ErrorConverter(data))
|
||||
bdms = data.get('BlockDeviceMappings', [])
|
||||
self.assertNotEmpty(bdms)
|
||||
self.assertEqual(1, len(bdms))
|
||||
self.assertIn('DeviceName', bdms[0])
|
||||
self.assertIn('Ebs', bdms[0])
|
||||
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='disableApiTermination')
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertIn('DisableApiTermination', data)
|
||||
self.assertIn('Value', data['DisableApiTermination'])
|
||||
self.assertFalse(data['DisableApiTermination']['Value'])
|
||||
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='groupSet')
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertIn('Groups', data)
|
||||
self.assertNotEmpty(data['Groups'], data)
|
||||
self.assertTrue('GroupId' in data['Groups'][0]
|
||||
or 'GroupName' in data['Groups'][0])
|
||||
self.assertTrue(data['Groups'][0].get('GroupId')
|
||||
or data['Groups'][0].get('GroupName'))
|
||||
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='instanceType')
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertIn('InstanceType', data)
|
||||
self.assertIn('Value', data['InstanceType'])
|
||||
self.assertEqual(instance_type, data['InstanceType']['Value'])
|
||||
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='kernel')
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertIn('KernelId', data)
|
||||
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='ramdisk')
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertIn('RamdiskId', data)
|
||||
|
||||
resp, data = self.client.DescribeInstanceAttribute(
|
||||
InstanceId=instance_id, Attribute='rootDeviceName')
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertIn('RootDeviceName', data)
|
||||
self.assertIn('Value', data['RootDeviceName'])
|
||||
self.assertTrue(data['RootDeviceName']['Value'])
|
||||
|
||||
resp, data = self.client.TerminateInstances(InstanceIds=[instance_id])
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.cancelResourceCleanUp(res_clean)
|
||||
self.get_instance_waiter().wait_delete(instance_id)
|
||||
|
||||
@testtools.skipUnless(CONF.aws.run_incompatible_tests,
|
||||
"Error from nova: "
|
||||
"Invalid input for field/attribute 0. ...")
|
||||
def test_launch_instance_with_creating_blank_volume(self):
|
||||
"""Launch instance with creating blank volume."""
|
||||
device_name = '/dev/xvdh'
|
||||
instance_type = CONF.aws.instance_type
|
||||
resp, data = self.client.RunInstances(
|
||||
ImageId=CONF.aws.image_id, InstanceType=instance_type,
|
||||
Placement={'AvailabilityZone': self.zone}, MinCount=1, MaxCount=1,
|
||||
BlockDeviceMappings=[{'DeviceName': device_name,
|
||||
'Ebs': {'VolumeSize': 1}}])
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
instance_id = data['Instances'][0]['InstanceId']
|
||||
res_clean = self.addResourceCleanUp(self.client.TerminateInstances,
|
||||
InstanceIds=[instance_id])
|
||||
self.get_instance_waiter().wait_available(instance_id,
|
||||
final_set=('running'))
|
||||
|
||||
bdt = self.get_instance_bdm(instance_id, device_name)
|
||||
self.assertIsNotNone(bdt)
|
||||
volume_id = bdt['Ebs'].get('VolumeId')
|
||||
self.assertIsNotNone(volume_id)
|
||||
self.assertTrue(bdt['Ebs']['DeleteOnTermination'])
|
||||
|
||||
resp, data = self.client.DescribeVolumes(VolumeIds=[volume_id])
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.assertEqual(1, len(data['Volumes']))
|
||||
volume = data['Volumes'][0]
|
||||
self.assertEqual(1, volume['Size'])
|
||||
|
||||
resp, data = self.client.TerminateInstances(InstanceIds=[instance_id])
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.cancelResourceCleanUp(res_clean)
|
||||
self.get_instance_waiter().wait_delete(instance_id)
|
||||
|
|
|
@ -211,6 +211,15 @@ class VolumeTest(base.EC2TestCase):
|
|||
self.assertEqual(instance_id, attachment['InstanceId'])
|
||||
self.assertEqual(volume_id, attachment['VolumeId'])
|
||||
|
||||
resp, data = self.client.DescribeInstances(InstanceIds=[instance_id])
|
||||
self.assertEqual(200, resp.status_code)
|
||||
self.assertEqual(1, len(data.get('Reservations', [])))
|
||||
self.assertEqual(1, len(data['Reservations'][0].get('Instances', [])))
|
||||
bdms = data['Reservations'][0]['Instances'][0]['BlockDeviceMappings']
|
||||
self.assertNotEmpty(bdms)
|
||||
self.assertIn('DeviceName', bdms[0])
|
||||
self.assertIn('Ebs', bdms[0])
|
||||
|
||||
resp, data = self.client.DetachVolume(VolumeId=volume_id)
|
||||
self.assertEqual(200, resp.status_code, base.EC2ErrorConverter(data))
|
||||
self.cancelResourceCleanUp(clean_vi)
|
||||
|
|
|
@ -63,7 +63,7 @@ class EC2_EBSInstanceTuneBDM(base.EC2TestCase):
|
|||
@testtools.skipUnless(
|
||||
CONF.aws.run_incompatible_tests,
|
||||
"Error from nova: "
|
||||
"Block Device Mapping is Invalid: Unrecognized legacy format.")
|
||||
"Invalid input for field/attribute 0. ...")
|
||||
def test_launch_ebs_instance_with_persistent_root_device(self):
|
||||
"""
|
||||
|
||||
|
@ -110,7 +110,7 @@ class EC2_EBSInstanceTuneBDM(base.EC2TestCase):
|
|||
@testtools.skipUnless(
|
||||
CONF.aws.run_incompatible_tests,
|
||||
"Error from nova: "
|
||||
"Block Device Mapping is Invalid: Unrecognized legacy format.")
|
||||
"Invalid input for field/attribute 0. ...")
|
||||
def test_launch_ebs_instance_with_resized_root_device(self):
|
||||
"""Launch EBS-backed instance with resizing root device."""
|
||||
new_size = int(math.ceil(self.root_device_size * 1.1))
|
||||
|
@ -148,7 +148,7 @@ class EC2_EBSInstanceTuneBDM(base.EC2TestCase):
|
|||
@testtools.skipUnless(
|
||||
CONF.aws.run_incompatible_tests,
|
||||
"Error from nova: "
|
||||
"Block Device Mapping is Invalid: Unrecognized legacy format.")
|
||||
"Invalid input for field/attribute 0. ...")
|
||||
def test_launch_ebs_instance_with_creating_blank_volume(self):
|
||||
"""Launch instance with creating blank volume."""
|
||||
device_name_prefix = _get_device_name_prefix(self.root_device_name)
|
||||
|
|
|
@ -27,9 +27,9 @@ CONF = config.CONF
|
|||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class MetadataTest(scenario_base.BaseScenarioTest):
|
||||
class InstancesTest(scenario_base.BaseScenarioTest):
|
||||
|
||||
def test_metadata(self):
|
||||
def test_userdata(self):
|
||||
if not CONF.aws.image_id:
|
||||
raise self.skipException('aws image_id does not provided')
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/bash -x
|
||||
|
||||
sudo pip install botocore
|
||||
sudo pip install botocore==0.103
|
||||
|
|
Loading…
Reference in New Issue