+----------------------------------+---------------+-----------------------------------------------------------+
| Test Name | Keystone API | Description |
+==================================+===============+===========================================================+
+| test_create_project_bad_domain | 3 | Ensures that keystone v3 clients using the domain ID |
+| | | project setting project creation will fail with an invalid|
+| | | domain id/name |
++----------------------------------+---------------+-----------------------------------------------------------+
| test_create_project | 2 & 3 | Tests the creation of a project via the OpenStackProject |
| | | class |
+----------------------------------+---------------+-----------------------------------------------------------+
SNAPS domain object for Projects. Should contain attributes that
are shared amongst cloud providers
"""
- def __init__(self, name, project_id):
+ def __init__(self, name, project_id, domain_id=None):
"""
Constructor
:param name: the project's name
:param project_id: the project's id
+ :param domain_id: the project's domain id
"""
self.name = name
self.id = project_id
+ self.domain_id = domain_id
def __eq__(self, other):
return self.name == other.name and self.id == other.id
Tests the construction of the snaps.domain.test.Project class
"""
- def test_construction_positional(self):
+ def test_construction_positional_minimal(self):
project = Project('foo', '123-456')
self.assertEqual('foo', project.name)
self.assertEqual('123-456', project.id)
+ self.assertIsNone(project.domain_id)
- def test_construction_named(self):
+ def test_construction_positional_all(self):
+ project = Project('foo', '123-456', 'hello')
+ self.assertEqual('foo', project.name)
+ self.assertEqual('123-456', project.id)
+ self.assertEqual('hello', project.domain_id)
+
+ def test_construction_named_minimal(self):
project = Project(project_id='123-456', name='foo')
self.assertEqual('foo', project.name)
self.assertEqual('123-456', project.id)
+ self.assertIsNone(project.domain_id)
+
+ def test_construction_named_all(self):
+ project = Project(domain_id='hello', project_id='123-456', name='foo')
+ self.assertEqual('foo', project.name)
+ self.assertEqual('123-456', project.id)
+ self.assertEqual('hello', project.domain_id)
import unittest
import uuid
+from keystoneclient.exceptions import BadRequest
+
from snaps.openstack.create_project import (
OpenStackProject, ProjectSettings, ProjectSettingsError)
from snaps.openstack.create_security_group import OpenStackSecurityGroup
if self.project_creator:
self.project_creator.clean()
+ def test_create_project_bad_domain(self):
+ """
+ Tests the creation of an OpenStack project with an invalid domain
+ value. This test will not do anything with a keystone v2.0 client.
+ """
+ if self.keystone.version != keystone_utils.V2_VERSION_STR:
+ self.project_settings.domain = 'foo'
+ self.project_creator = OpenStackProject(self.os_creds,
+ self.project_settings)
+
+ with self.assertRaises(BadRequest):
+ self.project_creator.create()
+
def test_create_project(self):
"""
Tests the creation of an OpenStack project.
keystone=self.keystone, project_name=self.project_settings.name)
self.assertIsNotNone(retrieved_project)
self.assertEqual(created_project, retrieved_project)
+ self.assertTrue(validate_project(self.keystone, self.project_settings,
+ created_project))
def test_create_project_2x(self):
"""
project2 = OpenStackProject(self.os_creds,
self.project_settings).create()
self.assertEqual(retrieved_project, project2)
+ self.assertTrue(validate_project(self.keystone, self.project_settings,
+ created_project))
def test_create_delete_project(self):
"""
self.assertIsNone(self.project_creator.get_project())
- # TODO - Expand tests
+ self.assertTrue(validate_project(self.keystone, self.project_settings,
+ created_project))
class CreateProjectUserTests(OSComponentTestCase):
self.assertEqual(self.project_creator.get_project().id,
sec_grp.project_id)
+
+
+def validate_project(keystone, project_settings, project):
+ """
+ Validates that the project_settings used to create the project have been
+ properly set
+ :param keystone: the keystone client for version checking
+ :param project_settings: the settings used to create the project
+ :param project: the SNAPS-OO Project domain object
+ :return: T/F
+ """
+ if keystone.version == keystone_utils.V2_VERSION_STR:
+ return project_settings.name == project.name
+ else:
+ return (project_settings.name == project.name and
+ project_settings.domain == project.domain_id)
projects = keystone.projects.list(**{'name': project_name})
for project in projects:
+ domain_id = None
+ if keystone.version != V2_VERSION_STR:
+ domain_id = project.domain_id
if project.name == project_name:
- return Project(name=project.name, project_id=project.id)
+ return Project(name=project.name, project_id=project.id,
+ domain_id=domain_id)
return None
:param project_settings: the project configuration
:return: SNAPS-OO Project domain object
"""
+ domain_id = None
+
if keystone.version == V2_VERSION_STR:
os_project = keystone.tenants.create(
project_settings.name, project_settings.description,
project_settings.name, project_settings.domain,
description=project_settings.description,
enabled=project_settings.enabled)
+ domain_id = os_project.domain_id
- return Project(name=os_project.name, project_id=os_project.id)
+ return Project(
+ name=os_project.name, project_id=os_project.id, domain_id=domain_id)
def delete_project(keystone, project):