add ubuntu image for testing and port instance_restart test
Change-Id: If19ed3342bdaf6b256a9f5f3a2da6a4bd003e2e3
This commit is contained in:
parent
f3848bfcab
commit
8b13458b19
|
@ -30,6 +30,20 @@ if [[ ! -f $TEST_CONFIG_DIR/$TEST_CONFIG ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# prepare flavor
|
||||||
|
nova flavor-create --is-public True m1.ec2api 16 512 0 1
|
||||||
|
|
||||||
|
REGULAR_IMAGE_URL="https://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-i386-disk1.img"
|
||||||
|
REGULAR_IMAGE_FNAME="precise"
|
||||||
|
glance image-create --disk-format raw --container-format bare --is-public True --name $REGULAR_IMAGE_FNAME --location $REGULAR_IMAGE_URL
|
||||||
|
if [[ "$?" -ne "0" ]]; then
|
||||||
|
echo "Creation precise image failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sleep 60
|
||||||
|
# find this image
|
||||||
|
image_id_ubuntu=$(euca-describe-images --show-empty-fields | grep "precise" | grep "ami-" | head -n 1 | awk '{print $2}')
|
||||||
|
|
||||||
# create separate user/project
|
# create separate user/project
|
||||||
tenant_name="tenant-$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 8)"
|
tenant_name="tenant-$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 8)"
|
||||||
eval $(openstack project create -f shell -c id $tenant_name)
|
eval $(openstack project create -f shell -c id $tenant_name)
|
||||||
|
@ -109,7 +123,10 @@ ec2_url = $EC2_URL
|
||||||
aws_access = $EC2_ACCESS_KEY
|
aws_access = $EC2_ACCESS_KEY
|
||||||
aws_secret = $EC2_SECRET_KEY
|
aws_secret = $EC2_SECRET_KEY
|
||||||
image_id = $image_id
|
image_id = $image_id
|
||||||
|
image_id_ubuntu = $image_id_ubuntu
|
||||||
ebs_image_id = $ebs_image_id
|
ebs_image_id = $ebs_image_id
|
||||||
|
build_timeout = 300
|
||||||
|
instance_type = m1.ec2api
|
||||||
EOF"
|
EOF"
|
||||||
|
|
||||||
# local workaround for LP#1439819. it doesn't work in gating because glance check isatty property.
|
# local workaround for LP#1439819. it doesn't work in gating because glance check isatty property.
|
||||||
|
|
|
@ -35,6 +35,7 @@ logging.getLogger('botocore').setLevel(logging.INFO)
|
||||||
logging.getLogger(
|
logging.getLogger(
|
||||||
'botocore.vendored.requests.packages.urllib3.connectionpool'
|
'botocore.vendored.requests.packages.urllib3.connectionpool'
|
||||||
).setLevel(logging.WARNING)
|
).setLevel(logging.WARNING)
|
||||||
|
logging.getLogger('paramiko.transport').setLevel(logging.WARNING)
|
||||||
|
|
||||||
|
|
||||||
class EC2Waiter(object):
|
class EC2Waiter(object):
|
||||||
|
|
|
@ -58,13 +58,19 @@ AWSGroup = [
|
||||||
help="Instance type"),
|
help="Instance type"),
|
||||||
cfg.StrOpt('image_id',
|
cfg.StrOpt('image_id',
|
||||||
default=None,
|
default=None,
|
||||||
help="Image ID for instance running"),
|
help="Image ID for instance running(can be cirros)"),
|
||||||
cfg.StrOpt('ebs_image_id',
|
cfg.StrOpt('ebs_image_id',
|
||||||
default=None,
|
default=None,
|
||||||
help="EBS Image ID for testing snapshots, volumes, instances"),
|
help="EBS Image ID for testing snapshots, volumes, instances"),
|
||||||
cfg.StrOpt('image_user',
|
cfg.StrOpt('image_user',
|
||||||
default='cirros',
|
default='cirros',
|
||||||
help="User for sshing into instance based on configured image"),
|
help="User for sshing into instance based on configured image"),
|
||||||
|
cfg.StrOpt('image_id_ubuntu',
|
||||||
|
default=None,
|
||||||
|
help="Fully functional image ID for instance running"),
|
||||||
|
cfg.StrOpt('image_user_ubuntu',
|
||||||
|
default='ubuntu',
|
||||||
|
help="User for sshing into instance based on configured image"),
|
||||||
cfg.BoolOpt('run_incompatible_tests',
|
cfg.BoolOpt('run_incompatible_tests',
|
||||||
default=False,
|
default=False,
|
||||||
help='Will run all tests plus incompatible with Amazon.'),
|
help='Will run all tests plus incompatible with Amazon.'),
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
# Copyright 2015 OpenStack Foundation
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from oslo_log import log
|
||||||
|
from tempest_lib.common import ssh
|
||||||
|
from tempest_lib.common.utils import data_utils
|
||||||
|
|
||||||
|
from ec2api.tests.functional import base
|
||||||
|
from ec2api.tests.functional import config
|
||||||
|
from ec2api.tests.functional.scenario import base as scenario_base
|
||||||
|
|
||||||
|
CONF = config.CONF
|
||||||
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceRestartTest(scenario_base.BaseScenarioTest):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@base.safe_setup
|
||||||
|
def setUpClass(cls):
|
||||||
|
super(InstanceRestartTest, cls).setUpClass()
|
||||||
|
if not CONF.aws.image_id_ubuntu:
|
||||||
|
raise cls.skipException('ubuntu image_id does not provided')
|
||||||
|
cls.zone = CONF.aws.aws_zone
|
||||||
|
|
||||||
|
def test_stop_start_instance(self):
|
||||||
|
key_name = data_utils.rand_name('testkey')
|
||||||
|
pkey = self.create_key_pair(key_name)
|
||||||
|
sec_group_name = self.create_standard_security_group()
|
||||||
|
instance_id = self.run_instance(KeyName=key_name,
|
||||||
|
ImageId=CONF.aws.image_id_ubuntu,
|
||||||
|
SecurityGroups=[sec_group_name])
|
||||||
|
ip_address = self.get_instance_ip(instance_id)
|
||||||
|
|
||||||
|
ssh_client = ssh.Client(ip_address, CONF.aws.image_user_ubuntu,
|
||||||
|
pkey=pkey)
|
||||||
|
ssh_client.exec_command('last -x')
|
||||||
|
|
||||||
|
self.client.stop_instances(InstanceIds=[instance_id])
|
||||||
|
self.get_instance_waiter().wait_available(instance_id,
|
||||||
|
final_set=('stopped'))
|
||||||
|
|
||||||
|
self.client.start_instances(InstanceIds=[instance_id])
|
||||||
|
self.get_instance_waiter().wait_available(instance_id,
|
||||||
|
final_set=('running'))
|
||||||
|
|
||||||
|
data = ssh_client.exec_command('last -x')
|
||||||
|
self.assertIn("shutdown", data)
|
||||||
|
|
||||||
|
def test_reboot_instance(self):
|
||||||
|
key_name = data_utils.rand_name('testkey')
|
||||||
|
pkey = self.create_key_pair(key_name)
|
||||||
|
sec_group_name = self.create_standard_security_group()
|
||||||
|
instance_id = self.run_instance(KeyName=key_name,
|
||||||
|
ImageId=CONF.aws.image_id_ubuntu,
|
||||||
|
SecurityGroups=[sec_group_name])
|
||||||
|
ip_address = self.get_instance_ip(instance_id)
|
||||||
|
|
||||||
|
ssh_client = ssh.Client(ip_address, CONF.aws.image_user_ubuntu,
|
||||||
|
pkey=pkey)
|
||||||
|
last_lines = ssh_client.exec_command('last -x').split('\n')
|
||||||
|
|
||||||
|
self.client.reboot_instances(InstanceIds=[instance_id])
|
||||||
|
|
||||||
|
def _last_state():
|
||||||
|
current = ssh_client.exec_command('last -x').split('\n')
|
||||||
|
if len(current) > len(last_lines):
|
||||||
|
return
|
||||||
|
raise Exception()
|
||||||
|
|
||||||
|
waiter = base.EC2Waiter(_last_state)
|
||||||
|
waiter.wait_no_exception()
|
||||||
|
|
||||||
|
data = ssh_client.exec_command('last -x')
|
||||||
|
self.assertIn("shutdown", data)
|
Loading…
Reference in New Issue