summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-07-12 08:34:14 -0600
committerspisarski <s.pisarski@cablelabs.com>2017-07-13 07:31:05 -0600
commitf5f0f1cbcb757a9229a92c3a7f4ea400db11dd07 (patch)
tree1c6ee337f2f135f7564ec603d67c8746b833991b
parente572055192d85954efa81dfa4b3ca5ad80db9434 (diff)
Crteated domain class for projects.
Created Project domain class so keystone_utils.py functions returning project objects will not be leaking out implementation details as each API version can change these data structures and this should all be handled by the SNAPS keystone utility. JIRA: SNAPS-114 Change-Id: Id7bce929604278c8228622161eba1838ecd5e067 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--snaps/domain/project.py32
-rw-r--r--snaps/domain/test/project_tests.py33
-rw-r--r--snaps/openstack/utils/keystone_utils.py11
-rw-r--r--snaps/test_suite_builder.py3
4 files changed, 74 insertions, 5 deletions
diff --git a/snaps/domain/project.py b/snaps/domain/project.py
new file mode 100644
index 0000000..818645b
--- /dev/null
+++ b/snaps/domain/project.py
@@ -0,0 +1,32 @@
+# Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
+# and others. All rights reserved.
+#
+# 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.
+
+
+class Project:
+ """
+ SNAPS domain object for Projects. Should contain attributes that
+ are shared amongst cloud providers
+ """
+ def __init__(self, name, project_id):
+ """
+ Constructor
+ :param name: the project's name
+ :param project_id: the project's id
+ """
+ self.name = name
+ self.id = project_id
+
+ def __eq__(self, other):
+ return self.name == other.name and self.id == other.id
diff --git a/snaps/domain/test/project_tests.py b/snaps/domain/test/project_tests.py
new file mode 100644
index 0000000..4056bba
--- /dev/null
+++ b/snaps/domain/test/project_tests.py
@@ -0,0 +1,33 @@
+# Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
+# and others. All rights reserved.
+#
+# 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 unittest
+from snaps.domain.project import Project
+
+
+class ProjectDomainObjectTests(unittest.TestCase):
+ """
+ Tests the construction of the snaps.domain.test.Project class
+ """
+
+ def test_construction_positional(self):
+ project = Project('foo', '123-456')
+ self.assertEqual('foo', project.name)
+ self.assertEqual('123-456', project.id)
+
+ def test_construction_named(self):
+ project = Project(project_id='123-456', name='foo')
+ self.assertEqual('foo', project.name)
+ self.assertEqual('123-456', project.id)
diff --git a/snaps/openstack/utils/keystone_utils.py b/snaps/openstack/utils/keystone_utils.py
index 0a850d3..6812828 100644
--- a/snaps/openstack/utils/keystone_utils.py
+++ b/snaps/openstack/utils/keystone_utils.py
@@ -19,6 +19,7 @@ from keystoneauth1.identity import v3, v2
from keystoneauth1 import session
import requests
+from snaps.domain.project import Project
from snaps.domain.user import User
logger = logging.getLogger('keystone_utils')
@@ -119,7 +120,7 @@ def get_project(keystone=None, os_creds=None, project_name=None):
for project in projects:
if project.name == project_name:
- return project
+ return Project(name=project.name, project_id=project.id)
return None
@@ -129,7 +130,7 @@ def create_project(keystone, project_settings):
Creates a project
:param keystone: the Keystone client
:param project_settings: the project configuration
- :return:
+ :return: SNAPS-OO Project domain object
"""
if keystone.version == V2_VERSION:
return keystone.tenants.create(
@@ -146,12 +147,12 @@ def delete_project(keystone, project):
"""
Deletes a project
:param keystone: the Keystone clien
- :param project: the OpenStack project object
+ :param project: the SNAPS-OO Project domain object
"""
if keystone.version == V2_VERSION:
- keystone.tenants.delete(project)
+ keystone.tenants.delete(project.id)
else:
- keystone.projects.delete(project)
+ keystone.projects.delete(project.id)
def get_os_user(keystone, user):
diff --git a/snaps/test_suite_builder.py b/snaps/test_suite_builder.py
index 1ab96c1..5c366ab 100644
--- a/snaps/test_suite_builder.py
+++ b/snaps/test_suite_builder.py
@@ -21,6 +21,7 @@ from snaps.domain.test.image_tests import ImageDomainObjectTests
from snaps.domain.test.keypair_tests import KeypairDomainObjectTests
from snaps.domain.test.network_tests import (
SecurityGroupDomainObjectTests, SecurityGroupRuleDomainObjectTests)
+from snaps.domain.test.project_tests import ProjectDomainObjectTests
from snaps.domain.test.stack_tests import StackDomainObjectTests
from snaps.domain.test.user_tests import UserDomainObjectTests
from snaps.domain.test.vm_inst_tests import (
@@ -116,6 +117,8 @@ def add_unit_tests(suite):
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
ProjectSettingsUnitTests))
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
+ ProjectDomainObjectTests))
+ suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
NetworkSettingsUnitTests))
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
SubnetSettingsUnitTests))