cloudkitty-tempest-plugin/cloudkitty_tempest_plugin/tests/api/test_hashmap_api.py

329 lines
13 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2017 Objectif Libre
#
# 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 tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from cloudkitty_tempest_plugin.tests.api import base
class CloudkittyHashmapAPITest(base.BaseRatingTest):
credentials = ['admin']
@decorators.idempotent_id('7037a3f8-b462-4243-a0bc-ffa3b4700397')
def test_get_hashmap_rating_types(self):
self.rating_client.get_hashmap_mapping_types()
def _setup_dummy_service(self):
service = self.rating_client.create_hashmap_service(
data_utils.rand_name('service'),
)
self._created_resources['hashmap_service'].append(
service['service_id'])
return service['service_id']
@decorators.idempotent_id('9e968284-7209-46e1-9742-4882b6e2cf2f')
def test_create_delete_hashmap_service(self):
service_id = self._setup_dummy_service()
self.rating_client.delete_hashmap_service(service_id)
@decorators.idempotent_id('9e9a67d1-e53d-46cf-8e13-8a332c40c32f')
def test_get_hashmap_services(self):
self.rating_client.get_hashmap_service()
@decorators.idempotent_id('6c4260c0-8701-4959-b00e-4789d31715a7')
def test_get_hashmap_service(self):
service_id = self._setup_dummy_service()
self.rating_client.get_hashmap_service(service_id=service_id)
def _setup_dummy_fields(self, service_id):
field_ids = list()
for i in range(3):
field = self.rating_client.create_hashmap_field(
data_utils.rand_name('hashmap_field'),
service_id,
)
field_ids.append(field['field_id'])
self._created_resources['hashmap_field'].append(field['field_id'])
return field_ids
@decorators.idempotent_id('974669f9-392e-4aec-8e15-d24db23f08d4')
def test_create_delete_hashmap_field(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
for field_id in field_ids:
self.rating_client.delete_hashmap_field(field_id)
self.rating_client.delete_hashmap_service(service_id)
@decorators.idempotent_id('9ae98590-ff55-47f9-885e-baa4da1957d1')
def test_get_hashmap_field(self):
service_id = self._setup_dummy_service()
self._setup_dummy_fields(service_id)
fields = self.rating_client.get_hashmap_fields(service_id)
for field in fields['fields']:
field_info = self.rating_client.get_hashmap_field(
field['field_id'],
)
self.assertEqual(field_info['field_id'], field['field_id'])
self.assertEqual(field_info['service_id'], field['service_id'])
self.assertEqual(field_info['name'], field['name'])
def _find_item(self, haystack, needle, key):
found = False
for item in haystack:
try:
if item[key] == needle:
found = True
except KeyError:
continue
self.assertTrue(found)
@decorators.idempotent_id('4deb6914-7ba0-4219-a119-61b39bd58807')
def test_get_hashmap_mappings(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
field_mapping = self.rating_client.create_hashmap_mapping(
field_id=field_ids[0],
value='dummy mapping',
)
service_mapping = self.rating_client.create_hashmap_mapping(
service_id=service_id,
)
self._created_resources['hashmap_mapping'].append(
field_mapping['mapping_id'],
)
self._created_resources['hashmap_mapping'].append(
service_mapping['mapping_id'],
)
service_filtered_mappings = self.rating_client.get_hashmap_mappings(
service_id=service_id,
)
field_filtered_mappings = self.rating_client.get_hashmap_mappings(
field_id=field_ids[0],
)
self._find_item(service_filtered_mappings['mappings'],
service_mapping['mapping_id'],
'mapping_id')
self._find_item(field_filtered_mappings['mappings'],
field_mapping['mapping_id'],
'mapping_id')
@decorators.idempotent_id('b7ad24e5-c72c-469a-886b-db43aab8f328')
def test_create_delete_hashmap_mapping(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
mapping_ids = list()
for field_id in field_ids:
mapping = self.rating_client.create_hashmap_mapping(
field_id=field_id,
value='dummy mapping',
)
self.assertEqual('dummy mapping', mapping['value'])
mapping_ids.append(mapping['mapping_id'])
mapping = self.rating_client.create_hashmap_mapping(
service_id=service_id,
)
mapping_ids.append(mapping['mapping_id'])
self._created_resources['hashmap_mapping'] += mapping_ids
for mapping_id in mapping_ids:
self.rating_client.delete_hashmap_mapping(mapping_id)
@decorators.idempotent_id('6a04634d-2d3a-406e-980a-e7c7c9cc081b')
def test_update_hashmap_mapping(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
mapping = self.rating_client.create_hashmap_mapping(
field_id=field_ids[0],
value='dummy field',
)
self._created_resources['hashmap_mapping'].append(
mapping['mapping_id'],
)
self.assertEqual('dummy field', mapping['value'])
self.rating_client.update_hashmap_mapping(
mapping['mapping_id'],
value='new value',
)
mapping = self.rating_client.get_hashmap_mapping(
mapping['mapping_id']
)
self.assertEqual('new value', mapping['value'])
@decorators.idempotent_id('0f9200ab-146b-4349-a579-ce12062f465b')
def test_create_delete_hashmap_group(self):
group = self.rating_client.create_hashmap_group(
data_utils.rand_name('dummy_group'),
)
self._created_resources['hashmap_group'].append(group['group_id'])
self.rating_client.delete_hashmap_group(group['group_id'])
@decorators.idempotent_id('858a019a-fb64-4656-b7a6-c92917f641ab')
def test_get_hashmap_group(self):
group = self.rating_client.create_hashmap_group(
data_utils.rand_name('dummy_group'),
)
self._created_resources['hashmap_group'].append(group['group_id'])
group_name = group['name']
groups = self.rating_client.get_hashmap_group()
self._find_item(groups['groups'], group_name, 'name')
group = self.rating_client.get_hashmap_group(group['group_id'])
self.assertEqual(group['name'], group_name)
@decorators.idempotent_id('98ca42dd-a9e2-477a-8e42-16389aed1f44')
def test_get_hashmap_mapping_group(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
group = self.rating_client.create_hashmap_group(
data_utils.rand_name('dummy_group'),
)
group_name = group['name']
self._created_resources['hashmap_group'].append(group['group_id'])
mapping = self.rating_client.create_hashmap_mapping(
field_id=field_ids[0],
group_id=group['group_id'],
value='dummy mapping',
)
self._created_resources['hashmap_mapping'].append(
mapping['mapping_id'],
)
group = self.rating_client.get_hashmap_mapping_group(
mapping['mapping_id'],
)
self.assertEqual(group['name'], group_name)
@decorators.idempotent_id('92860fc8-596a-42fd-b0d5-97e0f5a7bd2c')
def test_get_hashmap_group_mappings(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
group = self.rating_client.create_hashmap_group(
data_utils.rand_name('dummy_group'),
)
self._created_resources['hashmap_group'].append(group['group_id'])
for i in range(3):
mapping = self.rating_client.create_hashmap_mapping(
field_id=field_ids[i],
group_id=group['group_id'],
value='dummy mapping {}'.format(i),
)
self._created_resources['hashmap_mapping'].append(
mapping['mapping_id']
)
mappings = self.rating_client.get_hashmap_group_mappings(
group['group_id'],
)
for i in range(3):
self._find_item(mappings['mappings'],
'dummy mapping {}'.format(i),
'value')
@decorators.idempotent_id('d2b3dba3-91df-4aa7-9ae2-96d971df2dbf')
def test_create_delete_update_hashmap_threshold(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
thresholds = list()
thresholds.append(self.rating_client.create_hashmap_threshold(
service_id=service_id,
level=0.95,
cost=12,
))
self._created_resources['hashmap_threshold'].append(
thresholds[-1]['threshold_id']
)
for idx, field_id in enumerate(field_ids):
thresholds.append(self.rating_client.create_hashmap_threshold(
field_id=field_id,
level=0.95 * (idx + 1),
cost=12 * (idx + 1),
))
self._created_resources['hashmap_threshold'].append(
thresholds[-1]['threshold_id']
)
for threshold in thresholds:
self.rating_client.update_hashmap_threshold(
threshold['threshold_id'],
cost=42,
level=1.23,
)
for threshold in thresholds:
self.rating_client.delete_hashmap_threshold(
threshold['threshold_id'],
)
@decorators.idempotent_id('dc463432-3b92-44ac-8caf-b789857f9db7')
def test_get_hashmap_threshold(self):
service_id = self._setup_dummy_service()
self._setup_dummy_fields(service_id)
created_threshold = self.rating_client.create_hashmap_threshold(
service_id=service_id,
level=1.95,
cost=42,
)
self._created_resources['hashmap_threshold'].append(
created_threshold['threshold_id'],
)
threshold = self.rating_client.get_hashmap_threshold(
created_threshold['threshold_id'],
)
self.assertEqual(threshold['level'], created_threshold['level'])
self.rating_client.delete_hashmap_threshold(
created_threshold['threshold_id'],
)
@decorators.idempotent_id('d04caad5-eb18-40ce-817e-13c257633cca')
def test_get_hashmap_thresholds(self):
service_id = self._setup_dummy_service()
field_ids = self._setup_dummy_fields(service_id)
group = self.rating_client.create_hashmap_group(
data_utils.rand_name('dummy_group'),
)
self._created_resources['hashmap_group'].append(group['group_id'])
field_threshold = self.rating_client.create_hashmap_threshold(
group_id=group['group_id'],
field_id=field_ids[0],
level=1.95,
cost=42,
)
self._created_resources['hashmap_threshold'].append(
field_threshold['threshold_id'],
)
service_threshold = self.rating_client.create_hashmap_threshold(
service_id=service_id,
group_id=group['group_id'],
level=1.95,
cost=42,
)
self._created_resources['hashmap_threshold'].append(
service_threshold['threshold_id'],
)
thresholds = self.rating_client.get_hashmap_thresholds(
service_id=service_id,
)
self._find_item(thresholds['thresholds'],
group['group_id'],
'group_id')
thresholds = self.rating_client.get_hashmap_thresholds(
field_id=field_ids[0],
)
self._find_item(thresholds['thresholds'],
group['group_id'],
'group_id')
thresholds = self.rating_client.get_hashmap_thresholds(
group_id=group['group_id']
)
self._find_item(thresholds['thresholds'], service_id, 'service_id')
self._find_item(thresholds['thresholds'], field_ids[0], 'field_id')