103 lines
3.3 KiB
Python
Executable File
103 lines
3.3 KiB
Python
Executable File
#
|
|
# Copyright (c) 2019 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
|
|
import time
|
|
import random
|
|
from datetime import datetime, timedelta
|
|
from pytest import mark, skip
|
|
|
|
from utils.tis_log import LOG
|
|
|
|
from consts.stx import GuestImages
|
|
from consts.auth import Tenant
|
|
from keywords import common, ceilometer_helper, network_helper, \
|
|
glance_helper, system_helper, gnocchi_helper
|
|
|
|
|
|
def _wait_for_measurements(meter, resource_type, extra_query, start_time,
|
|
overlap=None, timeout=1860,
|
|
check_interval=60):
|
|
end_time = time.time() + timeout
|
|
|
|
while time.time() < end_time:
|
|
values = gnocchi_helper.get_aggregated_measures(
|
|
metrics=meter, resource_type=resource_type, start=start_time,
|
|
overlap=overlap, extra_query=extra_query)[1]
|
|
if values:
|
|
return values
|
|
|
|
time.sleep(check_interval)
|
|
|
|
|
|
@mark.cpe_sanity
|
|
@mark.sanity
|
|
@mark.sx_nightly
|
|
@mark.parametrize('meter', [
|
|
'image.size'
|
|
])
|
|
def test_measurements_for_metric(meter):
|
|
"""
|
|
Validate statistics for one meter
|
|
|
|
"""
|
|
LOG.tc_step('Get ceilometer statistics table for image.size meter')
|
|
|
|
now = datetime.utcnow()
|
|
start = (now - timedelta(minutes=10))
|
|
start = start.strftime("%Y-%m-%dT%H:%M:%S")
|
|
image_name = GuestImages.DEFAULT['guest']
|
|
resource_type = 'image'
|
|
extra_query = "name='{}'".format(image_name)
|
|
overlap = None
|
|
|
|
code, output = gnocchi_helper.get_aggregated_measures(
|
|
metrics=meter, resource_type=resource_type, start=start,
|
|
extra_query=extra_query, fail_ok=True)
|
|
if code > 0:
|
|
if "Metrics can't being aggregated" in output:
|
|
# there was another glance image that has the same
|
|
# string in its name
|
|
overlap = '0'
|
|
else:
|
|
assert False, output
|
|
|
|
values = output
|
|
if code == 0 and values:
|
|
assert len(values) <= 4, "Incorrect count for {} {} metric via " \
|
|
"'openstack metric measures aggregation'". \
|
|
format(image_name, meter)
|
|
else:
|
|
values = _wait_for_measurements(meter=meter,
|
|
resource_type=resource_type,
|
|
extra_query=extra_query,
|
|
start_time=start, overlap=overlap)
|
|
assert values, "No measurements for image.size for 25+ minutes"
|
|
|
|
LOG.tc_step('Check that values are larger than zero')
|
|
for val in values:
|
|
assert 0 <= float(val), "{} {} value in metric measurements " \
|
|
"table is less than zero".format(
|
|
image_name, meter)
|
|
|
|
|
|
def check_event_in_tenant_or_admin(resource_id, event_type):
|
|
for auth_ in (None, Tenant.get('admin')):
|
|
traits = ceilometer_helper.get_events(event_type=event_type,
|
|
header='traits:value',
|
|
auth_info=auth_)
|
|
for trait in traits:
|
|
if resource_id in trait:
|
|
LOG.info("Resource found in ceilometer events using "
|
|
"auth: {}".format(auth_))
|
|
break
|
|
else:
|
|
continue
|
|
break
|
|
else:
|
|
assert False, "{} event for resource {} was not found under admin or " \
|
|
"tenant".format(event_type, resource_id)
|