Prepare for enabling H302 rule (thirdparty)

We can use H302 rule but ignore it now. This commit prepares for
enabling H302 rule. But this commit modifies tempest/thirdparty only
and excludes some violations[1] because if we fix all of them at one
time, it's hard to merge this commit.

[1]
 tempest.test.attr
 tempest.common.rest_client.RestClient
 tempest.common.rest_client.RestClientXML
 tempest.services.compute.xml.common.xml_to_json
 tempest.services.compute.xml.common.Element
 tempest.services.compute.xml.common.Document
 tempest.services.compute.xml.common.Text
 tempest.services.compute.xml.common.XMLNS_11
 tempest.services.compute.xml.common.XMLNS_V3
 tempest/clients.py

Change-Id: Ie5620c283bc5f15e1ae3b257be9749f66f3d91d9
This commit is contained in:
Masayuki Igawa 2014-02-17 15:07:43 +09:00
parent c63239f319
commit 224a827e72
10 changed files with 86 additions and 90 deletions

View File

@ -26,14 +26,12 @@ from boto import s3
import keystoneclient.exceptions
import tempest.clients
from tempest.common.utils.file_utils import have_effective_read_access
from tempest.common.utils import file_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
import tempest.test
from tempest.thirdparty.boto.utils.wait import re_search_wait
from tempest.thirdparty.boto.utils.wait import state_wait
from tempest.thirdparty.boto.utils.wait import wait_exception
from tempest.thirdparty.boto.utils import wait
CONF = config.CONF
LOG = logging.getLogger(__name__)
@ -47,7 +45,7 @@ def decision_maker():
id_matcher = re.compile("[A-Za-z0-9]{20,}")
def all_read(*args):
return all(map(have_effective_read_access, args))
return all(map(file_utils.have_effective_read_access, args))
materials_path = CONF.boto.s3_materials_path
ami_path = materials_path + os.sep + CONF.boto.ami_manifest
@ -327,7 +325,7 @@ class BotoTestCase(tempest.test.BaseTestCase):
final_set = set((final_set,))
final_set |= self.gone_set
lfunction = self.get_lfunction_gone(lfunction)
state = state_wait(lfunction, final_set, valid_set)
state = wait.state_wait(lfunction, final_set, valid_set)
self.assertIn(state, valid_set | self.gone_set)
return state
@ -377,8 +375,8 @@ class BotoTestCase(tempest.test.BaseTestCase):
return "ASSOCIATED"
return "DISASSOCIATED"
state = state_wait(_disassociate, "DISASSOCIATED",
set(("ASSOCIATED", "DISASSOCIATED")))
state = wait.state_wait(_disassociate, "DISASSOCIATED",
set(("ASSOCIATED", "DISASSOCIATED")))
self.assertEqual(state, "DISASSOCIATED")
def assertAddressReleasedWait(self, address):
@ -391,7 +389,7 @@ class BotoTestCase(tempest.test.BaseTestCase):
return "DELETED"
return "NOTDELETED"
state = state_wait(_address_delete, "DELETED")
state = wait.state_wait(_address_delete, "DELETED")
self.assertEqual(state, "DELETED")
def assertReSearch(self, regexp, string):
@ -462,7 +460,7 @@ class BotoTestCase(tempest.test.BaseTestCase):
for instance in reservation.instances:
try:
instance.terminate()
re_search_wait(_instance_state, "_GONE")
wait.re_search_wait(_instance_state, "_GONE")
except BaseException:
LOG.exception("Failed to terminate instance %s " % instance)
exc_num += 1
@ -503,7 +501,8 @@ class BotoTestCase(tempest.test.BaseTestCase):
return volume.status
try:
re_search_wait(_volume_state, "available") # not validates status
wait.re_search_wait(_volume_state, "available")
# not validates status
LOG.info(_volume_state())
volume.delete()
except BaseException:
@ -520,7 +519,7 @@ class BotoTestCase(tempest.test.BaseTestCase):
def _update():
snapshot.update(validate=True)
wait_exception(_update)
wait.wait_exception(_update)
# you can specify tuples if you want to specify the status pattern

View File

@ -16,23 +16,21 @@
from boto import exception
from tempest.common.utils import data_utils
from tempest.common.utils.linux.remote_client import RemoteClient
from tempest.common.utils.linux import remote_client
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
from tempest.test import attr
from tempest.test import skip_because
from tempest.thirdparty.boto.test import BotoTestCase
from tempest.thirdparty.boto.utils.s3 import s3_upload_dir
from tempest.thirdparty.boto.utils.wait import re_search_wait
from tempest.thirdparty.boto.utils.wait import state_wait
from tempest import test
from tempest.thirdparty.boto import test as boto_test
from tempest.thirdparty.boto.utils import s3
from tempest.thirdparty.boto.utils import wait
CONF = config.CONF
LOG = logging.getLogger(__name__)
class InstanceRunTest(BotoTestCase):
class InstanceRunTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
@ -57,7 +55,7 @@ class InstanceRunTest(BotoTestCase):
cls.addResourceCleanUp(cls.destroy_bucket,
cls.s3_client.connection_data,
cls.bucket_name)
s3_upload_dir(bucket, cls.materials_path)
s3.s3_upload_dir(bucket, cls.materials_path)
cls.images = {"ami":
{"name": data_utils.rand_name("ami-name-"),
"location": cls.bucket_name + "/" + ami_manifest},
@ -78,14 +76,14 @@ class InstanceRunTest(BotoTestCase):
def _state():
retr = cls.ec2_client.get_image(image["image_id"])
return retr.state
state = state_wait(_state, "available")
state = wait.state_wait(_state, "available")
if state != "available":
for _image in cls.images.itervalues():
cls.ec2_client.deregister_image(_image["image_id"])
raise exceptions.EC2RegisterImageException(image_id=
image["image_id"])
@attr(type='smoke')
@test.attr(type='smoke')
def test_run_idempotent_instances(self):
# EC2 run instances idempotently
@ -123,7 +121,7 @@ class InstanceRunTest(BotoTestCase):
_terminate_reservation(reservation_1, rcuk_1)
_terminate_reservation(reservation_2, rcuk_2)
@attr(type='smoke')
@test.attr(type='smoke')
def test_run_stop_terminate_instance(self):
# EC2 run, stop and terminate instance
image_ami = self.ec2_client.get_image(self.images["ami"]
@ -148,7 +146,7 @@ class InstanceRunTest(BotoTestCase):
instance.terminate()
self.cancelResourceCleanUp(rcuk)
@attr(type='smoke')
@test.attr(type='smoke')
def test_run_stop_terminate_instance_with_tags(self):
# EC2 run, stop and terminate instance with tags
image_ami = self.ec2_client.get_image(self.images["ami"]
@ -195,8 +193,8 @@ class InstanceRunTest(BotoTestCase):
instance.terminate()
self.cancelResourceCleanUp(rcuk)
@skip_because(bug="1098891")
@attr(type='smoke')
@test.skip_because(bug="1098891")
@test.attr(type='smoke')
def test_run_terminate_instance(self):
# EC2 run, terminate immediately
image_ami = self.ec2_client.get_image(self.images["ami"]
@ -222,8 +220,8 @@ class InstanceRunTest(BotoTestCase):
# NOTE(afazekas): doctored test case,
# with normal validation it would fail
@skip_because(bug="1182679")
@attr(type='smoke')
@test.skip_because(bug="1182679")
@test.attr(type='smoke')
def test_integration_1(self):
# EC2 1. integration test (not strict)
image_ami = self.ec2_client.get_image(self.images["ami"]["image_id"])
@ -271,9 +269,9 @@ class InstanceRunTest(BotoTestCase):
self.assertVolumeStatusWait(volume, "available")
# NOTE(afazekas): it may be reports available before it is available
ssh = RemoteClient(address.public_ip,
CONF.compute.ssh_user,
pkey=self.keypair.material)
ssh = remote_client.RemoteClient(address.public_ip,
CONF.compute.ssh_user,
pkey=self.keypair.material)
text = data_utils.rand_name("Pattern text for console output -")
resp = ssh.write_to_console(text)
self.assertFalse(resp)
@ -282,7 +280,7 @@ class InstanceRunTest(BotoTestCase):
output = instance.get_console_output()
return output.output
re_search_wait(_output, text)
wait.re_search_wait(_output, text)
part_lines = ssh.get_partitions().split('\n')
volume.attach(instance.id, "/dev/vdh")
@ -291,7 +289,7 @@ class InstanceRunTest(BotoTestCase):
return volume.status
self.assertVolumeStatusWait(_volume_state, "in-use")
re_search_wait(_volume_state, "in-use")
wait.re_search_wait(_volume_state, "in-use")
# NOTE(afazekas): Different Hypervisor backends names
# differently the devices,
@ -305,7 +303,7 @@ class InstanceRunTest(BotoTestCase):
return 'DECREASE'
return 'EQUAL'
state_wait(_part_state, 'INCREASE')
wait.state_wait(_part_state, 'INCREASE')
part_lines = ssh.get_partitions().split('\n')
# TODO(afazekas): Resource compare to the flavor settings
@ -313,10 +311,10 @@ class InstanceRunTest(BotoTestCase):
volume.detach()
self.assertVolumeStatusWait(_volume_state, "available")
re_search_wait(_volume_state, "available")
wait.re_search_wait(_volume_state, "available")
LOG.info("Volume %s state: %s", volume.id, volume.status)
state_wait(_part_state, 'DECREASE')
wait.state_wait(_part_state, 'DECREASE')
instance.stop()
address.disassociate()

View File

@ -14,9 +14,8 @@
# under the License.
from tempest.common.utils import data_utils
from tempest.test import attr
from tempest.test import skip_because
from tempest.thirdparty.boto.test import BotoTestCase
from tempest import test
from tempest.thirdparty.boto import test as boto_test
def compare_key_pairs(a, b):
@ -24,7 +23,7 @@ def compare_key_pairs(a, b):
a.fingerprint == b.fingerprint)
class EC2KeysTest(BotoTestCase):
class EC2KeysTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
@ -33,7 +32,7 @@ class EC2KeysTest(BotoTestCase):
cls.ec = cls.ec2_error_code
# TODO(afazekas): merge create, delete, get test cases
@attr(type='smoke')
@test.attr(type='smoke')
def test_create_ec2_keypair(self):
# EC2 create KeyPair
key_name = data_utils.rand_name("keypair-")
@ -42,8 +41,8 @@ class EC2KeysTest(BotoTestCase):
self.assertTrue(compare_key_pairs(keypair,
self.client.get_key_pair(key_name)))
@skip_because(bug="1072318")
@attr(type='smoke')
@test.skip_because(bug="1072318")
@test.attr(type='smoke')
def test_delete_ec2_keypair(self):
# EC2 delete KeyPair
key_name = data_utils.rand_name("keypair-")
@ -51,7 +50,7 @@ class EC2KeysTest(BotoTestCase):
self.client.delete_key_pair(key_name)
self.assertEqual(None, self.client.get_key_pair(key_name))
@attr(type='smoke')
@test.attr(type='smoke')
def test_get_ec2_keypair(self):
# EC2 get KeyPair
key_name = data_utils.rand_name("keypair-")
@ -60,7 +59,7 @@ class EC2KeysTest(BotoTestCase):
self.assertTrue(compare_key_pairs(keypair,
self.client.get_key_pair(key_name)))
@attr(type='smoke')
@test.attr(type='smoke')
def test_duplicate_ec2_keypair(self):
# EC2 duplicate KeyPair
key_name = data_utils.rand_name("keypair-")

View File

@ -13,12 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
from tempest.test import attr
from tempest.test import skip_because
from tempest.thirdparty.boto.test import BotoTestCase
from tempest import test
from tempest.thirdparty.boto import test as boto_test
class EC2NetworkTest(BotoTestCase):
class EC2NetworkTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
@ -26,8 +25,8 @@ class EC2NetworkTest(BotoTestCase):
cls.client = cls.os.ec2api_client
# Note(afazekas): these tests for things duable without an instance
@skip_because(bug="1080406")
@attr(type='smoke')
@test.skip_because(bug="1080406")
@test.attr(type='smoke')
def test_disassociate_not_associated_floating_ip(self):
# EC2 disassociate not associated floating ip
ec2_codes = self.ec2_error_code

View File

@ -14,18 +14,18 @@
# under the License.
from tempest.common.utils import data_utils
from tempest.test import attr
from tempest.thirdparty.boto.test import BotoTestCase
from tempest import test
from tempest.thirdparty.boto import test as boto_test
class EC2SecurityGroupTest(BotoTestCase):
class EC2SecurityGroupTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
super(EC2SecurityGroupTest, cls).setUpClass()
cls.client = cls.os.ec2api_client
@attr(type='smoke')
@test.attr(type='smoke')
def test_create_authorize_security_group(self):
# EC2 Create, authorize/revoke security group
group_name = data_utils.rand_name("securty_group-")

View File

@ -14,8 +14,8 @@
# under the License.
from tempest.openstack.common import log as logging
from tempest.test import attr
from tempest.thirdparty.boto.test import BotoTestCase
from tempest import test
from tempest.thirdparty.boto import test as boto_test
LOG = logging.getLogger(__name__)
@ -25,7 +25,7 @@ def compare_volumes(a, b):
a.size == b.size)
class EC2VolumesTest(BotoTestCase):
class EC2VolumesTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
@ -33,7 +33,7 @@ class EC2VolumesTest(BotoTestCase):
cls.client = cls.os.ec2api_client
cls.zone = cls.client.get_good_zone()
@attr(type='smoke')
@test.attr(type='smoke')
def test_create_get_delete(self):
# EC2 Create, get, delete Volume
volume = self.client.create_volume(1, self.zone)
@ -46,7 +46,7 @@ class EC2VolumesTest(BotoTestCase):
self.client.delete_volume(volume.id)
self.cancelResourceCleanUp(cuk)
@attr(type='smoke')
@test.attr(type='smoke')
def test_create_volume_from_snapshot(self):
# EC2 Create volume from snapshot
volume = self.client.create_volume(1, self.zone)

View File

@ -14,20 +14,19 @@
# under the License.
from tempest.common.utils import data_utils
from tempest.test import attr
from tempest.test import skip_because
from tempest.thirdparty.boto.test import BotoTestCase
from tempest import test
from tempest.thirdparty.boto import test as boto_test
class S3BucketsTest(BotoTestCase):
class S3BucketsTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
super(S3BucketsTest, cls).setUpClass()
cls.client = cls.os.s3_client
@skip_because(bug="1076965")
@attr(type='smoke')
@test.skip_because(bug="1076965")
@test.attr(type='smoke')
def test_create_and_get_delete_bucket(self):
# S3 Create, get and delete bucket
bucket_name = data_utils.rand_name("s3bucket-")

View File

@ -17,14 +17,14 @@ import os
from tempest.common.utils import data_utils
from tempest import config
from tempest.test import attr
from tempest.thirdparty.boto.test import BotoTestCase
from tempest.thirdparty.boto.utils.s3 import s3_upload_dir
from tempest import test
from tempest.thirdparty.boto import test as boto_test
from tempest.thirdparty.boto.utils import s3
CONF = config.CONF
class S3ImagesTest(BotoTestCase):
class S3ImagesTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
@ -46,9 +46,9 @@ class S3ImagesTest(BotoTestCase):
cls.addResourceCleanUp(cls.destroy_bucket,
cls.s3_client.connection_data,
cls.bucket_name)
s3_upload_dir(bucket, cls.materials_path)
s3.s3_upload_dir(bucket, cls.materials_path)
@attr(type='smoke')
@test.attr(type='smoke')
def test_register_get_deregister_ami_image(self):
# Register and deregister ami image
image = {"name": data_utils.rand_name("ami-name-"),

View File

@ -18,18 +18,18 @@ import contextlib
import boto.s3.key
from tempest.common.utils import data_utils
from tempest.test import attr
from tempest.thirdparty.boto.test import BotoTestCase
from tempest import test
from tempest.thirdparty.boto import test as boto_test
class S3BucketsTest(BotoTestCase):
class S3BucketsTest(boto_test.BotoTestCase):
@classmethod
def setUpClass(cls):
super(S3BucketsTest, cls).setUpClass()
cls.client = cls.os.s3_client
@attr(type='smoke')
@test.attr(type='smoke')
def test_create_get_delete_object(self):
# S3 Create, get and delete object
bucket_name = data_utils.rand_name("s3bucket-")

View File

@ -17,7 +17,7 @@ import re
import time
import boto.exception
from testtools import TestCase
import testtools
from tempest import config
from tempest.openstack.common import log as logging
@ -44,10 +44,11 @@ def state_wait(lfunction, final_set=set(), valid_set=None):
return status
dtime = time.time() - start_time
if dtime > CONF.boto.build_timeout:
raise TestCase.failureException("State change timeout exceeded!"
'(%ds) While waiting'
'for %s at "%s"' %
(dtime, final_set, status))
raise testtools.TestCase\
.failureException("State change timeout exceeded!"
'(%ds) While waiting'
'for %s at "%s"' %
(dtime, final_set, status))
time.sleep(CONF.boto.build_interval)
old_status = status
status = lfunction()
@ -67,10 +68,11 @@ def re_search_wait(lfunction, regexp):
return result
dtime = time.time() - start_time
if dtime > CONF.boto.build_timeout:
raise TestCase.failureException('Pattern find timeout exceeded!'
'(%ds) While waiting for'
'"%s" pattern in "%s"' %
(dtime, regexp, text))
raise testtools.TestCase\
.failureException('Pattern find timeout exceeded!'
'(%ds) While waiting for'
'"%s" pattern in "%s"' %
(dtime, regexp, text))
time.sleep(CONF.boto.build_interval)
@ -98,8 +100,8 @@ def wait_no_exception(lfunction, exc_class=None, exc_matcher=None):
# Let the other exceptions propagate
dtime = time.time() - start_time
if dtime > CONF.boto.build_timeout:
raise TestCase.failureException("Wait timeout exceeded! (%ds)" %
dtime)
raise testtools.TestCase\
.failureException("Wait timeout exceeded! (%ds)" % dtime)
time.sleep(CONF.boto.build_interval)
@ -116,8 +118,8 @@ def wait_exception(lfunction):
return exc
dtime = time.time() - start_time
if dtime > CONF.boto.build_timeout:
raise TestCase.failureException("Wait timeout exceeded! (%ds)" %
dtime)
raise testtools.TestCase\
.failureException("Wait timeout exceeded! (%ds)" % dtime)
time.sleep(CONF.boto.build_interval)
# TODO(afazekas): consider strategy design pattern..