blob: 460d9000376b6fb0ff3db61ad4617330ef86fbf7 [file] [log] [blame]
import pytest
import time
import subprocess
import random
import logging
import utils
logger = logging.getLogger(__name__)
def is_parsable(value, to):
"""
Check if value can be converted into some type
:param value: input value that should be converted
:param to: type of output value like int, float. It's not a string!
:return: bool
"""
try:
to(value)
except:
return False
return True
@pytest.fixture
def create_image():
image_size_megabytes = utils.get_configuration().get("IMAGE_SIZE_MB", 9000)
create_file_cmdline = 'dd if=/dev/zero of=/tmp/image_mk_framework.dd ' \
'bs=1M count={} 2>/dev/null' \
''.format(image_size_megabytes)
is_cmd_successful = subprocess.call(create_file_cmdline, shell=True) == 0
logger.info("Created local image file /tmp/image_mk_framework.dd")
yield is_cmd_successful
# teardown
logger.info("Deleting /tmp/image_mk_framework.dd file")
subprocess.call('rm -f /tmp/image_mk_framework.dd', shell=True)
subprocess.call('rm -f /tmp/image_mk_framework.download', shell=True)
def test_speed_glance(create_image, openstack_clients, record_property):
"""
Simplified Performance Tests Download / upload Glance
1. Create file with random data (dd)
2. Upload data as image to glance.
3. Download image.
4. Measure download/upload speed and print them into stdout
"""
image_size_megabytes = utils.get_configuration().get("IMAGE_SIZE_MB")
if not is_parsable(image_size_megabytes, int):
pytest.fail("Can't convert IMAGE_SIZE_MB={} to 'int'".format(
image_size_megabytes))
image_size_megabytes = int(image_size_megabytes)
if not create_image:
pytest.skip("Can't create image, maybe there is lack of disk "
"space to create file {}MB".
format(image_size_megabytes))
image_name = "spt-test-image-{}".format(random.randrange(100, 999))
try:
image = openstack_clients.image.images.create(
name=image_name,
disk_format='iso',
container_format='bare')
logger.info("Created an image {} in Glance.".format(image_name))
except BaseException as e:
logger.info("Could not create image in Glance. See details: {}"
"".format(e))
pytest.fail("Can't create image in Glance. Occurred error: {}"
"".format(e))
logger.info("Testing upload file speed...")
start_time = time.time()
try:
openstack_clients.image.images.upload(
image.id, image_data=open("/tmp/image_mk_framework.dd", 'rb'))
except BaseException as e:
pytest.fail("Can't upload image in Glance. "
"Occurred error: {}".format(e))
end_time = time.time()
speed_upload = image_size_megabytes / (end_time - start_time)
logger.info("Testing download file speed...")
start_time = time.time()
with open("/tmp/image_mk_framework.download", 'wb') as image_file:
for item in openstack_clients.image.images.data(image.id):
image_file.write(item)
end_time = time.time()
speed_download = image_size_megabytes / (end_time - start_time)
logger.info("Deleted image {}.".format(image.id))
openstack_clients.image.images.delete(image.id)
record_property("Upload", speed_upload)
record_property("Download", speed_download)
print("++++++++++++++++++++++++++++++++++++++++")
print(('upload - {} MB/s'.format(speed_upload)))
print(('download - {} MB/s'.format(speed_download)))
print("++++++++++++++++++++++++++++++++++++++++")