neutron-classifier/neutron_classifier/tests/functional/db/test_models.py

158 lines
7.1 KiB
Python

# Copyright (c) 2017 Intel Corporation.
#
# 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.
import copy
from neutron.db import _model_query as mq
from neutron.tests.unit import testlib_api
from neutron_classifier.db import models
from neutron_lib import context
from oslo_utils import uuidutils
class TestDatabaseModels(testlib_api.MySQLTestCaseMixin,
testlib_api.SqlTestCase):
class _MockServicePlugin(object):
def __init__(self):
self.cg_list = []
self.c_list = []
ctx = context.get_admin_context()
standard_group = {'description': "Description of test group",
'project_id': uuidutils.generate_uuid(),
'shared': True,
'operator': 'AND'}
standard_class = {'description': "Description of classification",
'project_id': uuidutils.generate_uuid()}
for n in range(4):
standard_group['name'] = "Test Group " + str(n)
standard_group['id'] = uuidutils.generate_uuid()
standard_class['name'] = "Test Class " + str(n)
standard_class['id'] = uuidutils.generate_uuid()
self._create_db_model(ctx, models.ClassificationGroup,
**standard_group)
self._create_db_model(ctx, models.ClassificationBase,
**standard_class)
self.cg_list.append(copy.copy(standard_group))
self.c_list.append(copy.copy(standard_class))
self.cg_to_c_list = [{'container_cg_id': self.cg_list[0]['id'],
'stored_classification_id':
self.c_list[0]['id']},
{'container_cg_id': self.cg_list[0]['id'],
'stored_classification_id':
self.c_list[1]['id']},
{'container_cg_id': self.cg_list[0]['id'],
'stored_classification_id':
self.c_list[2]['id']},
{'container_cg_id': self.cg_list[1]['id'],
'stored_classification_id':
self.c_list[3]['id']}]
self.cg_to_cg_list = [{'container_cg_id': self.cg_list[0]['id'],
'stored_cg_id': self.cg_list[1]['id']},
{'container_cg_id': self.cg_list[0]['id'],
'stored_cg_id': self.cg_list[2]['id']},
{'container_cg_id': self.cg_list[0]['id'],
'stored_cg_id': self.cg_list[3]['id']},
{'container_cg_id': self.cg_list[3]['id'],
'stored_cg_id': self.cg_list[1]['id']},
{'container_cg_id': self.cg_list[3]['id'],
'stored_cg_id': self.cg_list[2]['id']}]
for n in range(4):
self._create_db_model(ctx, models.CGToClassificationMapping,
**self.cg_to_c_list[n])
self._create_db_model(ctx,
models.CGToClassificationGroupMapping,
**self.cg_to_cg_list[n])
def _create_db_model(self, ctx, model, **kwargs):
model1 = model(**kwargs)
with ctx.session.begin(subtransactions=True):
ctx.session.add(model1)
def _get_collection(self, ctx, model, func):
return mq.get_collection(ctx, model,
models._generate_dict_from_cg_db)
def setUp(self):
super(TestDatabaseModels, self).setUp()
self.ctxt = context.get_admin_context()
self.mock_plugin = self._MockServicePlugin()
def test_read_classification_group(self):
ret = models._read_classification_group(self.ctxt,
self.mock_plugin.cg_list[0]
['id'])
cg = self.mock_plugin.cg_list[0]
self.assertEqual(ret.name, cg['name'])
self.assertEqual(ret.description, cg['description'])
self.assertEqual(ret.shared, cg['shared'])
self.assertEqual(ret.operator, cg['operator'])
def test_read_classifications(self):
ret = models._read_classifications(self.ctxt,
self.mock_plugin.cg_list[0]['id'])
cs = [x.name for x in ret]
self.assertEqual(len(ret), 3)
self.assertIn("Test Class 0", cs)
self.assertIn("Test Class 1", cs)
self.assertIn("Test Class 2", cs)
def test_read_classification_groups(self):
ret = models._read_classification_groups(self.ctxt,
self.mock_plugin.cg_list[0]
['id'])
cg_ids = [x.id for x in ret]
cg_names = [x.name for x in ret]
self.assertEqual(len(ret), 3)
self.assertIn(ret[0].id, cg_ids)
self.assertIn(ret[1].id, cg_ids)
self.assertIn(ret[2].id, cg_ids)
self.assertIn("Test Group 1", cg_names)
self.assertIn("Test Group 2", cg_names)
self.assertIn("Test Group 3", cg_names)
def test_read_all_classification_groups(self):
ret = models._read_all_classification_groups(self.mock_plugin,
self.ctxt)
cgs = [x['name'] for x in ret]
self.assertIn("Test Group 0", cgs)
self.assertIn("Test Group 1", cgs)
self.assertIn("Test Group 2", cgs)
self.assertIn("Test Group 3", cgs)
def test_generate_dict_from_cg_db(self):
model = models._read_classification_group(self.ctxt,
self.mock_plugin.cg_list[2]
['id'])
ret = models._generate_dict_from_cg_db(model)
self.assertEqual(ret['name'], model.name)
self.assertEqual(ret['id'], model.id)
self.assertEqual(ret['description'], model.description)
self.assertEqual(ret['project_id'], model.project_id)
self.assertEqual(ret['classifications'], model.classifications)
self.assertEqual(ret['classification_groups'],
model.classification_groups)
self.assertEqual(ret['shared'], model.shared)
self.assertEqual(ret['operator'], model.operator)