oslo.cache/oslo_cache/tests/functional/test_base.py
Hervé Beraud 83de99cdad Refactoring functional tests based on standard usages
Refactoring the functional tests by using the standard usages [1]
and best pratices available in the oslo.cache documentation.

The main goal of these changes is to help us to
test oslo.cache in the way that quite close to real life usages.

To test new backend now we just need to create the associated test class
dedicated to pass backend's config fixture.

These changes allow to test a new backend by:
- passing the right config to backend by using dedicated config fixture;
- adding the zuul job dedicated to manage functional tests
  against etcd backend;
- adding the right server backend to bindep.

[1] https://docs.openstack.org/oslo.cache/latest/user/usage.html

Change-Id: Iaf196d2d93225afa54e324fb830761049059926e
2020-05-28 14:34:47 +02:00

202 lines
9.0 KiB
Python

# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# 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_utils import uuidutils
from oslotest import base
from oslo_cache import core as cache
NO_VALUE = cache.NO_VALUE
class BaseTestCaseCacheBackend(base.BaseTestCase):
def setUp(self):
super(BaseTestCaseCacheBackend, self).setUp()
if not hasattr(self, 'config_fixture'):
raise Exception("Functional tests base class can't be used "
"directly first you should define a test class "
"backend wrapper to init the related "
"config fixture")
self.region = cache.create_region()
cache.configure_cache_region(self.config_fixture.conf, self.region)
self.region_kwargs = cache.create_region(
function=cache.kwarg_function_key_generator
)
cache.configure_cache_region(
self.config_fixture.conf,
self.region_kwargs
)
def test_backend_get_missing_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, self.region.get(random_key))
def test_backend_set_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
self.region.set(random_key, "dummyValue")
self.assertEqual("dummyValue", self.region.get(random_key))
def test_backend_set_none_as_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
self.region.set(random_key, None)
self.assertIsNone(self.region.get(random_key))
def test_backend_set_blank_as_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
self.region.set(random_key, "")
self.assertEqual("", self.region.get(random_key))
def test_backend_set_same_key_multiple_times(self):
random_key = uuidutils.generate_uuid(dashed=False)
self.region.set(random_key, "dummyValue")
self.assertEqual("dummyValue", self.region.get(random_key))
dict_value = {'key1': 'value1'}
self.region.set(random_key, dict_value)
self.assertEqual(dict_value, self.region.get(random_key))
self.region.set(random_key, "dummyValue2")
self.assertEqual("dummyValue2", self.region.get(random_key))
def test_backend_multi_set_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
random_key1 = uuidutils.generate_uuid(dashed=False)
random_key2 = uuidutils.generate_uuid(dashed=False)
random_key3 = uuidutils.generate_uuid(dashed=False)
mapping = {random_key1: 'dummyValue1',
random_key2: 'dummyValue2',
random_key3: 'dummyValue3'}
self.region.set_multi(mapping)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, self.region.get(random_key))
self.assertFalse(self.region.get(random_key))
self.assertEqual("dummyValue1", self.region.get(random_key1))
self.assertEqual("dummyValue2", self.region.get(random_key2))
self.assertEqual("dummyValue3", self.region.get(random_key3))
def test_backend_multi_get_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
random_key1 = uuidutils.generate_uuid(dashed=False)
random_key2 = uuidutils.generate_uuid(dashed=False)
random_key3 = uuidutils.generate_uuid(dashed=False)
mapping = {random_key1: 'dummyValue1',
random_key2: '',
random_key3: 'dummyValue3'}
self.region.set_multi(mapping)
keys = [random_key, random_key1, random_key2, random_key3]
results = self.region.get_multi(keys)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, results[0])
self.assertEqual("dummyValue1", results[1])
self.assertEqual("", results[2])
self.assertEqual("dummyValue3", results[3])
def test_backend_multi_set_should_update_existing(self):
random_key = uuidutils.generate_uuid(dashed=False)
random_key1 = uuidutils.generate_uuid(dashed=False)
random_key2 = uuidutils.generate_uuid(dashed=False)
random_key3 = uuidutils.generate_uuid(dashed=False)
mapping = {random_key1: 'dummyValue1',
random_key2: 'dummyValue2',
random_key3: 'dummyValue3'}
self.region.set_multi(mapping)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, self.region.get(random_key))
self.assertEqual("dummyValue1", self.region.get(random_key1))
self.assertEqual("dummyValue2", self.region.get(random_key2))
self.assertEqual("dummyValue3", self.region.get(random_key3))
mapping = {random_key1: 'dummyValue4',
random_key2: 'dummyValue5'}
self.region.set_multi(mapping)
self.assertEqual(NO_VALUE, self.region.get(random_key))
self.assertEqual("dummyValue4", self.region.get(random_key1))
self.assertEqual("dummyValue5", self.region.get(random_key2))
self.assertEqual("dummyValue3", self.region.get(random_key3))
def test_backend_multi_set_get_with_blanks_none(self):
random_key = uuidutils.generate_uuid(dashed=False)
random_key1 = uuidutils.generate_uuid(dashed=False)
random_key2 = uuidutils.generate_uuid(dashed=False)
random_key3 = uuidutils.generate_uuid(dashed=False)
random_key4 = uuidutils.generate_uuid(dashed=False)
mapping = {random_key1: 'dummyValue1',
random_key2: None,
random_key3: '',
random_key4: 'dummyValue4'}
self.region.set_multi(mapping)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, self.region.get(random_key))
self.assertEqual("dummyValue1", self.region.get(random_key1))
self.assertIsNone(self.region.get(random_key2))
self.assertEqual("", self.region.get(random_key3))
self.assertEqual("dummyValue4", self.region.get(random_key4))
keys = [random_key, random_key1, random_key2, random_key3, random_key4]
results = self.region.get_multi(keys)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, results[0])
self.assertEqual("dummyValue1", results[1])
self.assertIsNone(results[2])
self.assertEqual("", results[3])
self.assertEqual("dummyValue4", results[4])
mapping = {random_key1: 'dummyValue5',
random_key2: 'dummyValue6'}
self.region.set_multi(mapping)
self.assertEqual(NO_VALUE, self.region.get(random_key))
self.assertEqual("dummyValue5", self.region.get(random_key1))
self.assertEqual("dummyValue6", self.region.get(random_key2))
self.assertEqual("", self.region.get(random_key3))
def test_backend_delete_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
self.region.set(random_key, "dummyValue")
self.assertEqual("dummyValue", self.region.get(random_key))
self.region.delete(random_key)
# should return NO_VALUE as key no longer exists in cache
self.assertEqual(NO_VALUE, self.region.get(random_key))
def test_backend_multi_delete_data(self):
random_key = uuidutils.generate_uuid(dashed=False)
random_key1 = uuidutils.generate_uuid(dashed=False)
random_key2 = uuidutils.generate_uuid(dashed=False)
random_key3 = uuidutils.generate_uuid(dashed=False)
mapping = {random_key1: 'dummyValue1',
random_key2: 'dummyValue2',
random_key3: 'dummyValue3'}
self.region.set_multi(mapping)
# should return NO_VALUE as key does not exist in cache
self.assertEqual(NO_VALUE, self.region.get(random_key))
self.assertEqual("dummyValue1", self.region.get(random_key1))
self.assertEqual("dummyValue2", self.region.get(random_key2))
self.assertEqual("dummyValue3", self.region.get(random_key3))
self.assertEqual(NO_VALUE, self.region.get("InvalidKey"))
keys = mapping.keys()
self.region.delete_multi(keys)
self.assertEqual(NO_VALUE, self.region.get("InvalidKey"))
# should return NO_VALUE as keys no longer exist in cache
self.assertEqual(NO_VALUE, self.region.get(random_key1))
self.assertEqual(NO_VALUE, self.region.get(random_key2))
self.assertEqual(NO_VALUE, self.region.get(random_key3))