summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/how-to-use/APITests.rst70
-rw-r--r--docs/how-to-use/IntegrationTests.rst106
-rw-r--r--docs/how-to-use/LibraryUsage.rst5
-rw-r--r--docs/how-to-use/Testing.rst3
-rw-r--r--docs/how-to-use/UnitTests.rst126
-rw-r--r--snaps/openstack/create_keypairs.py33
-rw-r--r--snaps/openstack/create_network.py17
-rw-r--r--snaps/openstack/create_router.py5
-rw-r--r--snaps/openstack/create_security_group.py5
-rw-r--r--snaps/openstack/tests/create_keypairs_tests.py209
-rw-r--r--snaps/openstack/tests/create_network_tests.py60
-rw-r--r--snaps/openstack/tests/create_router_tests.py86
-rw-r--r--snaps/openstack/tests/create_security_group_tests.py57
-rw-r--r--snaps/openstack/tests/os_source_file_test.py3
-rw-r--r--snaps/test_suite_builder.py7
15 files changed, 726 insertions, 66 deletions
diff --git a/docs/how-to-use/APITests.rst b/docs/how-to-use/APITests.rst
index 62efd1c..68a1a07 100644
--- a/docs/how-to-use/APITests.rst
+++ b/docs/how-to-use/APITests.rst
@@ -34,6 +34,12 @@ nova_utils_tests.py - NovaSmokeTests
Ensures that a Nova client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
+heat_utils_tests.py - HeatSmokeTests
+------------------------------------
+
+Ensures that a Heat client can be obtained as well as the proper
+exceptions thrown with the wrong credentials.
+
keystone_utils_tests.py - KeystoneUtilsTests
--------------------------------------------
@@ -55,6 +61,12 @@ keystone_utils_tests.py - KeystoneUtilsTests
| test_get_endpoint_fail_without | 2 & 3 | Tests to ensure that improper credentials and proper |
| _proper_credentials | | service type cannot succeed |
+----------------------------------+---------------+-----------------------------------------------------------+
+| test_get_endpoint_with_each | 2 & 3 | Tests to ensure that an interface URL is returned for each|
+| _interface | | supported interface type (i.e. public, internal, & admin) |
++----------------------------------+---------------+-----------------------------------------------------------+
+| test_grant_user_role_to_project | 2 & 3 | Tests to ensure that one can grant a new user's role to a |
+| | | new project |
++----------------------------------+---------------+-----------------------------------------------------------+
create_user_tests.py - CreateUserSuccessTests
---------------------------------------------
@@ -64,6 +76,14 @@ create_user_tests.py - CreateUserSuccessTests
| test_create_user | 2 & 3 | Tests the creation of a user with minimal configuration |
| | | settings via the utility functions |
+----------------------------------+---------------+-----------------------------------------------------------+
+| test_create_user_2x | 2 & 3 | Tests the creation of a user 2x and ensure it has been |
+| | | done only once |
++----------------------------------+---------------+-----------------------------------------------------------+
+| test_create_delete_user | 2 & 3 | Tests the creation of a user and ensure clean can be |
+| | | called 2x without exceptions being raised |
++----------------------------------+---------------+-----------------------------------------------------------+
+| test_create_admin_user | 2 & 3 | Tests the creation of a user with an 'admin' role |
++----------------------------------+---------------+-----------------------------------------------------------+
create_project_tests.py - CreateProjectSuccessTests
---------------------------------------------------
@@ -71,13 +91,14 @@ create_project_tests.py - CreateProjectSuccessTests
+----------------------------------+---------------+-----------------------------------------------------------+
| Test Name | Keystone API | Description |
+==================================+===============+===========================================================+
-| test_create_user_minimal | 2 & 3 | Tests the creation of a user via the OpenStackUser class |
+| test_create_project | 2 & 3 | Tests the creation of a project via the OpenStackProject |
+| | | class |
+----------------------------------+---------------+-----------------------------------------------------------+
-| test_create_user_2x | 2 & 3 | Tests the creation of a user a second time via the |
-| | | OpenStackUser class to ensure it is only created once |
+| test_create_project_2x | 2 & 3 | Tests the creation of a project a second time via the |
+| | | OpenStackProject class to ensure it is only created once |
+----------------------------------+---------------+-----------------------------------------------------------+
-| test_create_delete_user | 2 & 3 | Tests the creation and deletion of a user via the |
-| | | OpenStackUser class to ensure that clean will not raise |
+| test_create_delete_project | 2 & 3 | Tests the creation and deletion of a project via the |
+| | | OpenStackProject class to ensure that clean will not raise|
| | | an exception |
+----------------------------------+---------------+-----------------------------------------------------------+
@@ -215,6 +236,18 @@ neutron_utils_tests.py - NeutronUtilsSecurityGroupTests
| test_create_sec_grp_one_rule | 2 | Ensures that neutron_utils.create_security_group_rule() |
| | | can add a rule to a security group |
+---------------------------------------+---------------+-----------------------------------------------------------+
+| test_get_sec_grp_by_id | 2 | Ensures that neutron_utils.get_security_group_by_id() |
+| | | returns the expected security group |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
+neutron_utils_tests.py - NeutronUtilsFloatingIpTests
+----------------------------------------------------
+
++---------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Neutron API | Description |
++=======================================+===============+===========================================================+
+| test_floating_ips | 2 | Ensures that a floating IP can be created |
++---------------------------------------+---------------+-----------------------------------------------------------+
nova_utils_tests.py - NovaUtilsKeypairTests
-------------------------------------------
@@ -231,10 +264,6 @@ nova_utils_tests.py - NovaUtilsKeypairTests
| test_create_key_from_file | 2 | Ensures that a keypair can be properly created via |
| | | nova_utils.upload_keypair_file() |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_floating_ips | 2 | Ensures that a floating IP can be properly created via |
-| | | nova_utils.create_floating_ip() [note: this test should |
-| | | be moved to a new class] |
-+---------------------------------------+---------------+-----------------------------------------------------------+
nova_utils_tests.py - NovaUtilsFlavorTests
------------------------------------------
@@ -249,6 +278,16 @@ nova_utils_tests.py - NovaUtilsFlavorTests
| | | nova_utils.delete_flavor() |
+---------------------------------------+---------------+-----------------------------------------------------------+
+nova_utils_tests.py - NovaUtilsInstanceTests
+--------------------------------------------
+
++---------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Nova API | Description |
++=======================================+===============+===========================================================+
+| test_create_instance | 2 | Ensures that a VM instance can be properly created via |
+| | | nova_utils.create_server() |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
create_flavor_tests.py - CreateFlavorTests
------------------------------------------
@@ -268,3 +307,16 @@ create_flavor_tests.py - CreateFlavorTests
| | | will not raise an exception when called and the object no |
| | | longer exists |
+---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_delete_flavor_all_settings| 2 | Ensures that the OpenStackFlavor class will create a |
+| | | a flavor properly with all supported settings |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
+heat_utils_tests.py - HeatUtilsCreateStackTests
+-----------------------------------------------
+
++---------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Glance API | Description |
++=======================================+===============+===========================================================+
+| test_create_stack | 1 | Tests the heat_utils.create_stack() with a test template |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
diff --git a/docs/how-to-use/IntegrationTests.rst b/docs/how-to-use/IntegrationTests.rst
index ec549cf..70e51b9 100644
--- a/docs/how-to-use/IntegrationTests.rst
+++ b/docs/how-to-use/IntegrationTests.rst
@@ -16,6 +16,12 @@ create_security_group_tests.py - CreateSecurityGroupTests
| test_create_group_without_rules | Keysone 2 & 3 | Ensures the OpenStackSecurityGroup class can create a |
| | Neutron 2 | security group without any rules |
+---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_group_admin_user_to_new | Keysone 2 & 3 | Ensures the OpenStackSecurityGroup class can be created |
+| _project | Neutron 2 | by the admin user and associated with a new project |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_group_new_user_to_admin | Keysone 2 & 3 | Ensures the OpenStackSecurityGroup class can be created |
+| _project | Neutron 2 | by the new user and associated with the admin project |
++---------------------------------------+---------------+-----------------------------------------------------------+
| test_create_delete_group | Keysone 2 & 3 | Ensures the OpenStackSecurityGroup class clean() method |
| | Neutron 2 | will not raise an exception should the group be deleted by|
| | | some other process |
@@ -43,20 +49,23 @@ create_image_tests.py - CreateImageSuccessTests
+---------------------------------------+---------------+-----------------------------------------------------------+
| Test Name | Glance API | Description |
+=======================================+===============+===========================================================+
-| test_create_image_clean_url | 1 | Ensures the OpenStackImage class can create an image from |
+| test_create_image_clean_url | 1 & 2 | Ensures the OpenStackImage class can create an image from |
| | | a download URL location |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_create_image_clean_file | 1 | Ensures the OpenStackImage class can create an image from |
+| test_create_image_clean_url_properties| 1 & 2 | Ensures the OpenStackImage class can create an image from |
+| | | a download URL location with custom properties |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_image_clean_file | 1 & 2 | Ensures the OpenStackImage class can create an image from |
| | | a locally sourced image file |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_create_delete_image | 1 | Ensures the OpenStackImage.clean() method deletes an image|
+| test_create_delete_image | 1 & 2 | Ensures the OpenStackImage.clean() method deletes an image|
| | | and does not raise an exception on subsequent calls to the|
| | | clean() method |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_create_same_image | 1 | Ensures the OpenStackImage.create() method does not create|
+| test_create_same_image | 1 & 2 | Ensures the OpenStackImage.create() method does not create|
| | | another image when one already exists with the same name |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_create_same_image_new_settings | 1 | Tests the creation of an OpenStack image when the image |
+| test_create_same_image_new_settings | 1 & 2 | Tests the creation of an OpenStack image when the image |
| | | already exists and the configuration only contains the |
| | | the name. |
+---------------------------------------+---------------+-----------------------------------------------------------+
@@ -67,14 +76,17 @@ create_image_tests.py - CreateImageNegativeTests
+---------------------------------------+---------------+-----------------------------------------------------------+
| Test Name | Glance API | Description |
+=======================================+===============+===========================================================+
-| test_bad_image_name | 1 | Ensures OpenStackImage.create() results in an Exception |
+| test_bad_image_name | 1 & 2 | Ensures OpenStackImage.create() results in an Exception |
| | | being raised when the ImageSettings.name attribute has |
| | | not been set |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_bad_image_url | 1 | Ensures OpenStackImage.create() results in an Exception |
+| test_bad_image_url | 1 & 2 | Ensures OpenStackImage.create() results in an Exception |
| | | being raised when the download URL is invalid |
+---------------------------------------+---------------+-----------------------------------------------------------+
-| test_bad_image_file | 1 | Ensures OpenStackImage.create() results in an Exception |
+| test_bad_image_type | 1 & 2 | Ensures OpenStackImage.create() results in an Exception |
+| | | being raised when the image format is 'foo' |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_bad_image_file | 1 & 2 | Ensures OpenStackImage.create() results in an Exception |
| | | being raised when the image file does not exist |
+---------------------------------------+---------------+-----------------------------------------------------------+
@@ -84,11 +96,14 @@ create_image_tests.py - CreateMultiPartImageTests
+----------------------------------------+---------------+-----------------------------------------------------------+
| Test Name | Glance API | Description |
+========================================+===============+===========================================================+
-| test_create_three_part_image_from_url | 1 | Ensures that a 3-part image can be created when each part |
+| test_create_three_part_image_from_url | 1 & 2 | Ensures that a 3-part image can be created when each part |
| | | is being sourced from URLs |
+----------------------------------------+---------------+-----------------------------------------------------------+
-| test_create_three_part_image_from_file | 1 | Ensures that a 3-part image can be created when each part |
-| | | is being sourced from local files |
+| test_create_three_part_image_from_file | 1 & 2 | Ensures that a 3-part image can be created when each part |
+| _3_creators | | is being sourced from local files and 3 creators are used |
++----------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_three_part_image_from_url | 1 & 2 | Ensures that a 3-part image can be created when each part |
+| _3_creators | | is being sourced from a URL and 3 creators are used |
+----------------------------------------+---------------+-----------------------------------------------------------+
create_keypairs_tests.py - CreateKeypairsTests
@@ -114,6 +129,29 @@ create_keypairs_tests.py - CreateKeypairsTests
| | | existing public key file |
+---------------------------------------+---------------+-----------------------------------------------------------+
+create_keypairs_tests.py - CreateKeypairsCleanupTests
+-----------------------------------------------------
+
++---------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Nova API | Description |
++=======================================+===============+===========================================================+
+| test_create_keypair_gen_files_delete_1| 2 | Ensures that new keypair files are deleted by default |
+| | | by OpenStackKeypair#clean() |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_keypair_gen_files_delete_2| 2 | Ensures that new keypair files are deleted by |
+| | | OpenStackKeypair#clean() when the settings delete_on_clean|
+| | | attribute is set to True |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_keypair_gen_files_keep | 2 | Ensures that new keypair files are not deleted by |
+| | | OpenStackKeypair#clean() |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_keypair_exist_files_keep | 2 | Ensures that existing keypair files are not deleted by |
+| | | OpenStackKeypair#clean() |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_keypair_exist_files_delete| 2 | Ensures that existing keypair files are deleted by |
+| | | OpenStackKeypair#clean() |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
create_network_tests.py - CreateNetworkSuccessTests
---------------------------------------------------
@@ -132,6 +170,14 @@ create_network_tests.py - CreateNetworkSuccessTests
| test_create_networks_same_name | 2 | Ensures that the OpenStackNetwork.create() method will not|
| | | create a network with the same name |
+---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_networks_router_admin_user| 2 | Ensures that the networks, subnets, and routers can be |
+| _to_new_project | | create created by an admin user and assigned to a new |
+| | | project ID |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_networks_router_new_user | 2 | Ensures that the networks, subnets, and routers can be |
+| _to_admin_project | | create created by a new admin user and assigned to the |
+| | | 'admin' project ID |
++---------------------------------------+---------------+-----------------------------------------------------------+
create_router_tests.py - CreateRouterSuccessTests
-------------------------------------------------
@@ -142,6 +188,12 @@ create_router_tests.py - CreateRouterSuccessTests
| test_create_router_vanilla | 2 | Ensures that a router can be created via the |
| | | OpenStackRouter class with minimal settings |
+---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_router_admin_user_to_new | 2 | Ensures that a router can be created by an admin user and |
+| _project | | assigned to a new project |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_router_new_user_to_admin | 2 | Ensures that a router can be created by a new user and |
+| _project | | assigned to the admin project |
++---------------------------------------+---------------+-----------------------------------------------------------+
| test_create_delete_router | 2 | Ensures that a router can be deleted via the |
| | | OpenStackRouter.clean() method |
+---------------------------------------+---------------+-----------------------------------------------------------+
@@ -171,6 +223,38 @@ create_router_tests.py - CreateRouterNegativeTests
| | | create a router to an external network that does not exist|
+----------------------------------------+---------------+-----------------------------------------------------------+
+create_stack_tests.py - CreateStackSuccessTests
+-----------------------------------------------
+
++---------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Neutron API | Description |
++=======================================+===============+===========================================================+
+| test_create_stack_template_file | 2 | Ensures that a Heat stack can be created with a file-based|
+| | | Heat template file |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_stack_template_dict | 2 | Ensures that a Heat stack can be created with a dictionary|
+| | | Heat template |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_delete_stack | 2 | Ensures that a Heat stack can be created and deleted |
+| | | while having clean() called 2x without an exception |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_same_stack | 2 | Ensures that a Heat stack with the same name cannot be |
+| | | created 2x |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
+create_stack_tests.py - CreateStackNegativeTests
+--------------------------------------------------
+
++----------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Neutron API | Description |
++========================================+===============+===========================================================+
+| test_missing_dependencies | 2 | Ensures that a Heat template fails to deploy when expected|
+| | | dependencies are missing |
++----------------------------------------+---------------+-----------------------------------------------------------+
+| test_bad_stack_file | 2 | Ensures that a Heat template fails to deploy when the Heat|
+| | | template file does not exist |
++----------------------------------------+---------------+-----------------------------------------------------------+
+
create_instance_tests.py - CreateInstanceSimpleTests
----------------------------------------------------
diff --git a/docs/how-to-use/LibraryUsage.rst b/docs/how-to-use/LibraryUsage.rst
index 9efb26f..0a137ba 100644
--- a/docs/how-to-use/LibraryUsage.rst
+++ b/docs/how-to-use/LibraryUsage.rst
@@ -34,12 +34,17 @@ attributes are listed below:
- image\_api\_version (Glance version 1 currently only validated)
- network\_api\_version (Neutron version 2 currently only validated)
- compute\_api\_version (Nova version 2 currently only validated)
+- heat\_api\_version (Heat version 1 currently only validated)
- user\_domain\_id (default='default')
- project\_domain\_id (default='default')
+- interface (default='admin', used to specify the endpoint type for keystone: public, admin, internal)
+- cacert (default=False, expected values T|F to denote server certificate verification, else value contains the path to an HTTPS certificate)
- proxy\_settings
- host (the HTTP proxy host)
- port (the HTTP proxy port)
+ - https\_host (the HTTPS proxy host, default value of host)
+ - https\_port (the HTTPS proxy port, default value of port)
- ssh\_proxy\_cmd (same as the value placed into ssh -o
ProxyCommand='<this config value>')
diff --git a/docs/how-to-use/Testing.rst b/docs/how-to-use/Testing.rst
index af66c28..92340ab 100644
--- a/docs/how-to-use/Testing.rst
+++ b/docs/how-to-use/Testing.rst
@@ -17,6 +17,7 @@ Execute the tests
| \* -s [optional - the proxy command used for SSH connections]
| \* -l [(default INFO) The log level]
| \* -u [optional - When set, the unit tests will be executed]
+| \* -st [optional - When set, the staging tests will be executed]
| \* -c [optional - When set, the connection tests will be executed]
| \* -a [optional - When set, the API tests will be executed]
| \* -i [optional - When set, the integration tests will be executed]
@@ -24,5 +25,7 @@ Execute the tests
if host running tests has access to the cloud's admin network]
| \* -f [optional - When set, will execute tests requiring Floating
IPS]
+| \* -im [optional - File containing image endpoints to override
| \* -fm [optional - JSON string containing a dict() for flavor metadata default='{\"hw:mem_page_size\": \"any\"}']
+| \* -ci [optional - runs the tests required by SNAPS-OO CI]
| \* -r [optional with default value of '1' - The number of test iterations to execute]
diff --git a/docs/how-to-use/UnitTests.rst b/docs/how-to-use/UnitTests.rst
index efd6426..9da89be 100644
--- a/docs/how-to-use/UnitTests.rst
+++ b/docs/how-to-use/UnitTests.rst
@@ -24,68 +24,194 @@ FileUtilsTests
- testReadOSEnvFile - ensures that an OpenStack RC file can be properly
parsed
+ProxySettingsUnitTests
+----------------------
+
+Ensures that all required members are included when constructing a
+ProxySettings object
+
+OSCredsUnitTests
+----------------
+
+Ensures that all required members are included when constructing a
+OSCreds object
+
SecurityGroupRuleSettingsUnitTests
----------------------------------
Ensures that all required members are included when constructing a
SecurityGroupRuleSettings object
+SecurityGroupRuleDomainObjectTests
+----------------------------------
+
+Ensures that all required members are included when constructing a
+SecurityGroupRule domain object
+
SecurityGroupSettingsUnitTests
------------------------------
Ensures that all required members are included when constructing a
SecuirtyGroupSettings object
+SecurityGroupDomainObjectTests
+------------------------------
+
+Ensures that all required members are included when constructing a
+SecurityGroup domain object
+
ImageSettingsUnitTests
----------------------
Ensures that all required members are included when constructing a
ImageSettings object
+ImageDomainObjectTests
+----------------------
+
+Ensures that all required members are included when constructing a
+Image domain object
+
+FlavorSettingsUnitTests
+-----------------------
+
+Ensures that all required members are included when constructing a
+FlavorSettings object
+
+FlavorDomainObjectTests
+-----------------------
+
+Ensures that all required members are included when constructing a
+Flavor domain object
+
KeypairSettingsUnitTests
------------------------
Ensures that all required members are included when constructing a
KeypairSettings object
+KeypairDomainObjectTests
+------------------------
+
+Ensures that all required members are included when constructing a
+Keypair domain object
+
UserSettingsUnitTests
---------------------
Ensures that all required members are included when constructing a
UserSettings object
+UserDomainObjectTests
+---------------------
+
+Ensures that all required members are included when constructing a
+User domain object
+
ProjectSettingsUnitTests
------------------------
Ensures that all required members are included when constructing a
ProjectSettings object
+ProjectDomainObjectTests
+------------------------
+
+Ensures that all required members are included when constructing a
+Project domain object
+
+RoleDomainObjectTests
+---------------------
+
+Ensures that all required members are included when constructing a
+Role domain object
+
NetworkSettingsUnitTests
------------------------
Ensures that all required members are included when constructing a
NetworkSettings object
+NetworkObjectTests
+------------------
+
+Ensures that all required members are included when constructing a
+Network domain object
+
SubnetSettingsUnitTests
-----------------------
Ensures that all required members are included when constructing a
SubnetSettings object
+SubnetObjectTests
+-----------------
+
+Ensures that all required members are included when constructing a
+Subnet domain object
+
PortSettingsUnitTests
---------------------
Ensures that all required members are included when constructing a
PortSettings object
+PortDomainObjectTests
+---------------------
+
+Ensures that all required members are included when constructing a
+Port domain object
+
+RouterSettingsUnitTests
+-----------------------
+
+Ensures that all required members are included when constructing a
+RouterSettings object
+
+RouterDomainObjectTests
+-----------------------
+
+Ensures that all required members are included when constructing a
+Router domain object
+
+InterfaceRouterDomainObjectTests
+--------------------------------
+
+Ensures that all required members are included when constructing a
+InterfaceRouter domain object
+
+StackSettingsUnitTests
+----------------------
+
+Ensures that all required members are included when constructing a
+StackSettings object
+
+StackDomainObjectTests
+----------------------
+
+Ensures that all required members are included when constructing a
+Stack domain object
+
FloatingIpSettingsUnitTests
---------------------------
Ensures that all required members are included when constructing a
FloatingIpSettings object
+FloatingIpDomainObjectTests
+---------------------------
+
+Ensures that all required members are included when constructing a
+FloatingIp domain object
+
VmInstanceSettingsUnitTests
---------------------------
Ensures that all required members are included when constructing a
VmInstanceSettings object
+
+VmInstDomainObjectTests
+-----------------------
+
+Ensures that all required members are included when constructing a
+VmInst domain object
diff --git a/snaps/openstack/create_keypairs.py b/snaps/openstack/create_keypairs.py
index 03ff7ec..16374ad 100644
--- a/snaps/openstack/create_keypairs.py
+++ b/snaps/openstack/create_keypairs.py
@@ -15,7 +15,10 @@
import logging
import os
+from neutronclient.common.utils import str2bool
from novaclient.exceptions import NotFound
+
+from snaps import file_utils
from snaps.openstack.utils import nova_utils
__author__ = 'spisarski'
@@ -63,7 +66,11 @@ class OpenStackKeypair:
self.__keypair = nova_utils.upload_keypair_file(
self.__nova, self.keypair_settings.name,
self.keypair_settings.public_filepath)
- self.__delete_keys_on_clean = False
+
+ if self.keypair_settings.delete_on_clean is not None:
+ self.__delete_keys_on_clean = self.keypair_settings.delete_on_clean
+ else:
+ self.__delete_keys_on_clean = False
else:
logger.info("Creating new keypair")
# TODO - Make this value configurable
@@ -74,7 +81,11 @@ class OpenStackKeypair:
nova_utils.save_keys_to_files(
keys, self.keypair_settings.public_filepath,
self.keypair_settings.private_filepath)
- self.__delete_keys_on_clean = True
+
+ if self.keypair_settings.delete_on_clean is not None:
+ self.__delete_keys_on_clean = self.keypair_settings.delete_on_clean
+ else:
+ self.__delete_keys_on_clean = True
elif self.__keypair and not os.path.isfile(
self.keypair_settings.private_filepath):
logger.warn("The public key already exist in OpenStack \
@@ -94,10 +105,14 @@ class OpenStackKeypair:
self.__keypair = None
if self.__delete_keys_on_clean:
- if self.keypair_settings.public_filepath:
+ if (self.keypair_settings.public_filepath and
+ file_utils.file_exists(
+ self.keypair_settings.public_filepath)):
os.chmod(self.keypair_settings.public_filepath, 0o777)
os.remove(self.keypair_settings.public_filepath)
- if self.keypair_settings.private_filepath:
+ if (self.keypair_settings.private_filepath and
+ file_utils.file_exists(
+ self.keypair_settings.private_filepath)):
os.chmod(self.keypair_settings.private_filepath, 0o777)
os.remove(self.keypair_settings.private_filepath)
@@ -122,6 +137,8 @@ class KeypairSettings:
public key file is or will be stored
:param private_filepath: The path where the generated private key file
will be stored
+ :param delete_on_clean: when True, the key files will be deleted when
+ OpenStackKeypair#clean() is called
:return:
"""
@@ -129,6 +146,14 @@ class KeypairSettings:
self.public_filepath = kwargs.get('public_filepath')
self.private_filepath = kwargs.get('private_filepath')
+ if kwargs.get('delete_on_clean') is not None:
+ if isinstance(kwargs.get('delete_on_clean'), bool):
+ self.delete_on_clean = kwargs.get('delete_on_clean')
+ else:
+ self.delete_on_clean = str2bool(kwargs.get('delete_on_clean'))
+ else:
+ self.delete_on_clean = None
+
if not self.name:
raise KeypairSettingsError('Name is a required attribute')
diff --git a/snaps/openstack/create_network.py b/snaps/openstack/create_network.py
index 4f27eec..2f26c43 100644
--- a/snaps/openstack/create_network.py
+++ b/snaps/openstack/create_network.py
@@ -190,7 +190,6 @@ class NetworkSettings:
if not self.name or len(self.name) < 1:
raise NetworkSettingsError('Name required for networks')
- raise NetworkSettingsError('Name required for networks')
def get_project_id(self, os_creds):
"""
@@ -203,8 +202,8 @@ class NetworkSettings:
else:
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone,
- self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
if project:
return project.id
@@ -231,7 +230,7 @@ class NetworkSettings:
if self.project_name:
project_id = self.get_project_id(os_creds)
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
raise NetworkSettingsError(
'Could not find project ID for project named - ' +
@@ -345,12 +344,13 @@ class SubnetSettings:
out['name'] = self.name
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
project_id = None
if project:
project_id = project.id
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
raise SubnetSettingsError(
'Could not find project ID for project named - ' +
@@ -492,7 +492,8 @@ class PortSettings:
project_id = None
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
if project:
project_id = project.id
@@ -512,7 +513,7 @@ class PortSettings:
out['name'] = self.name
if self.project_name:
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
raise PortSettingsError(
'Could not find project ID for project named - ' +
diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py
index e50009c..acf6602 100644
--- a/snaps/openstack/create_router.py
+++ b/snaps/openstack/create_router.py
@@ -238,12 +238,13 @@ class RouterSettings:
out['name'] = self.name
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
project_id = None
if project:
project_id = project.id
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
raise RouterSettingsError(
'Could not find project ID for project named - ' +
diff --git a/snaps/openstack/create_security_group.py b/snaps/openstack/create_security_group.py
index 4291796..bde5d01 100644
--- a/snaps/openstack/create_security_group.py
+++ b/snaps/openstack/create_security_group.py
@@ -265,12 +265,13 @@ class SecurityGroupSettings:
if self.description:
out['description'] = self.description
if self.project_name:
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
project_id = None
if project:
project_id = project.id
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
raise SecurityGroupSettingsError(
'Could not find project ID for project named - ' +
diff --git a/snaps/openstack/tests/create_keypairs_tests.py b/snaps/openstack/tests/create_keypairs_tests.py
index aeeefaf..2824c34 100644
--- a/snaps/openstack/tests/create_keypairs_tests.py
+++ b/snaps/openstack/tests/create_keypairs_tests.py
@@ -16,6 +16,8 @@ import unittest
import uuid
import os
+
+from snaps import file_utils
from snaps.openstack.create_keypairs import (
KeypairSettings, OpenStackKeypair, KeypairSettingsError)
from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
@@ -42,18 +44,21 @@ class KeypairSettingsUnitTests(unittest.TestCase):
self.assertEqual('foo', settings.name)
self.assertIsNone(settings.public_filepath)
self.assertIsNone(settings.private_filepath)
+ self.assertIsNone(settings.delete_on_clean)
def test_config_with_name_only(self):
settings = KeypairSettings(**{'name': 'foo'})
self.assertEqual('foo', settings.name)
self.assertIsNone(settings.public_filepath)
self.assertIsNone(settings.private_filepath)
+ self.assertIsNone(settings.delete_on_clean)
def test_name_pub_only(self):
settings = KeypairSettings(name='foo', public_filepath='/foo/bar.pub')
self.assertEqual('foo', settings.name)
self.assertEqual('/foo/bar.pub', settings.public_filepath)
self.assertIsNone(settings.private_filepath)
+ self.assertIsNone(settings.delete_on_clean)
def test_config_with_name_pub_only(self):
settings = KeypairSettings(
@@ -61,12 +66,14 @@ class KeypairSettingsUnitTests(unittest.TestCase):
self.assertEqual('foo', settings.name)
self.assertEqual('/foo/bar.pub', settings.public_filepath)
self.assertIsNone(settings.private_filepath)
+ self.assertIsNone(settings.delete_on_clean)
def test_name_priv_only(self):
settings = KeypairSettings(name='foo', private_filepath='/foo/bar')
self.assertEqual('foo', settings.name)
self.assertIsNone(settings.public_filepath)
self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertIsNone(settings.delete_on_clean)
def test_config_with_name_priv_only(self):
settings = KeypairSettings(
@@ -74,21 +81,88 @@ class KeypairSettingsUnitTests(unittest.TestCase):
self.assertEqual('foo', settings.name)
self.assertIsNone(settings.public_filepath)
self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertIsNone(settings.delete_on_clean)
+
+ def test_all_delete_bool(self):
+ settings = KeypairSettings(
+ name='foo', public_filepath='/foo/bar.pub',
+ private_filepath='/foo/bar', delete_on_clean=True)
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertTrue(settings.delete_on_clean)
+
+ def test_all_delete_str_true_cap(self):
+ settings = KeypairSettings(
+ name='foo', public_filepath='/foo/bar.pub',
+ private_filepath='/foo/bar', delete_on_clean='True')
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertTrue(settings.delete_on_clean)
+
+ def test_all_delete_str_true_lc(self):
+ settings = KeypairSettings(
+ name='foo', public_filepath='/foo/bar.pub',
+ private_filepath='/foo/bar', delete_on_clean='true')
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertTrue(settings.delete_on_clean)
+
+ def test_all_delete_str_false_cap(self):
+ settings = KeypairSettings(
+ name='foo', public_filepath='/foo/bar.pub',
+ private_filepath='/foo/bar', delete_on_clean='False')
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertFalse(settings.delete_on_clean)
+
+ def test_all_delete_str_false_lc(self):
+ settings = KeypairSettings(
+ name='foo', public_filepath='/foo/bar.pub',
+ private_filepath='/foo/bar', delete_on_clean='false')
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertFalse(settings.delete_on_clean)
+
+ def test_config_all_delete_false_bool(self):
+ settings = KeypairSettings(
+ **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
+ 'private_filepath': '/foo/bar', 'delete_on_clean': False})
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertFalse(settings.delete_on_clean)
- def test_all(self):
- settings = KeypairSettings(name='foo', public_filepath='/foo/bar.pub',
- private_filepath='/foo/bar')
+ def test_config_all_delete_false_str_cap(self):
+ settings = KeypairSettings(
+ **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
+ 'private_filepath': '/foo/bar', 'delete_on_clean': 'False'})
+ self.assertEqual('foo', settings.name)
+ self.assertEqual('/foo/bar.pub', settings.public_filepath)
+ self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertFalse(settings.delete_on_clean)
+
+ def test_config_all_delete_false_str_lc(self):
+ settings = KeypairSettings(
+ **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
+ 'private_filepath': '/foo/bar', 'delete_on_clean': 'false'})
self.assertEqual('foo', settings.name)
self.assertEqual('/foo/bar.pub', settings.public_filepath)
self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertFalse(settings.delete_on_clean)
- def test_config_all(self):
+ def test_config_all_delete_false_str_foo(self):
settings = KeypairSettings(
**{'name': 'foo', 'public_filepath': '/foo/bar.pub',
- 'private_filepath': '/foo/bar'})
+ 'private_filepath': '/foo/bar', 'delete_on_clean': 'foo'})
self.assertEqual('foo', settings.name)
self.assertEqual('/foo/bar.pub', settings.public_filepath)
self.assertEqual('/foo/bar', settings.private_filepath)
+ self.assertFalse(settings.delete_on_clean)
class CreateKeypairsTests(OSIntegrationTestCase):
@@ -221,3 +295,128 @@ class CreateKeypairsTests(OSIntegrationTestCase):
file_key = open(os.path.expanduser(self.pub_file_path)).read()
self.assertEqual(self.keypair_creator.get_keypair().public_key,
file_key)
+
+
+class CreateKeypairsCleanupTests(OSIntegrationTestCase):
+ """
+ Tests for the OpenStackKeypair#clean method to ensure key files are deleted
+ when required
+ """
+
+ def setUp(self):
+ super(self.__class__, self).__start__()
+
+ guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
+ self.priv_file_path = 'tmp/' + guid
+ self.pub_file_path = self.priv_file_path + '.pub'
+ self.nova = nova_utils.nova_client(self.os_creds)
+ self.keypair_name = guid
+
+ self.keypair_creator = None
+
+ def tearDown(self):
+ """
+ Cleanup of created keypair
+ """
+ if self.keypair_creator:
+ self.keypair_creator.clean()
+
+ try:
+ os.remove(self.pub_file_path)
+ except:
+ pass
+
+ try:
+ os.remove(self.priv_file_path)
+ except:
+ pass
+
+ super(self.__class__, self).__clean__()
+
+ def test_create_keypair_gen_files_delete_1(self):
+ """
+ Tests the creation of a generated keypair and ensures that the files
+ are deleted on clean()
+ :return:
+ """
+ self.keypair_creator = OpenStackKeypair(
+ self.os_creds, KeypairSettings(
+ name=self.keypair_name, public_filepath=self.pub_file_path,
+ private_filepath=self.priv_file_path))
+ self.keypair_creator.create()
+ self.keypair_creator.clean()
+
+ self.assertFalse(file_utils.file_exists(self.pub_file_path))
+ self.assertFalse(file_utils.file_exists(self.priv_file_path))
+
+ def test_create_keypair_gen_files_delete_2(self):
+ """
+ Tests the creation of a generated keypair and ensures that the files
+ are deleted on clean()
+ :return:
+ """
+ self.keypair_creator = OpenStackKeypair(
+ self.os_creds, KeypairSettings(
+ name=self.keypair_name, public_filepath=self.pub_file_path,
+ private_filepath=self.priv_file_path, delete_on_clean=True))
+ self.keypair_creator.create()
+ self.keypair_creator.clean()
+
+ self.assertFalse(file_utils.file_exists(self.pub_file_path))
+ self.assertFalse(file_utils.file_exists(self.priv_file_path))
+
+ def test_create_keypair_gen_files_keep(self):
+ """
+ Tests the creation of a generated keypair and ensures that the files
+ are not deleted on clean()
+ :return:
+ """
+ self.keypair_creator = OpenStackKeypair(
+ self.os_creds, KeypairSettings(
+ name=self.keypair_name, public_filepath=self.pub_file_path,
+ private_filepath=self.priv_file_path, delete_on_clean=False))
+ self.keypair_creator.create()
+ self.keypair_creator.clean()
+
+ self.assertTrue(file_utils.file_exists(self.pub_file_path))
+ self.assertTrue(file_utils.file_exists(self.priv_file_path))
+
+ def test_create_keypair_exist_files_keep(self):
+ """
+ Tests the creation of an existing public keypair and ensures the files
+ are not deleted on clean
+ :return:
+ """
+ keys = nova_utils.create_keys()
+ nova_utils.save_keys_to_files(
+ keys=keys, pub_file_path=self.pub_file_path,
+ priv_file_path=self.priv_file_path)
+ self.keypair_creator = OpenStackKeypair(
+ self.os_creds, KeypairSettings(
+ name=self.keypair_name, public_filepath=self.pub_file_path,
+ private_filepath=self.priv_file_path, delete_on_clean=False))
+ self.keypair_creator.create()
+ self.keypair_creator.clean()
+
+ self.assertTrue(file_utils.file_exists(self.pub_file_path))
+ self.assertTrue(file_utils.file_exists(self.priv_file_path))
+
+ def test_create_keypair_exist_files_delete(self):
+ """
+ Tests the creation of an existing public keypair and ensures the files
+ are deleted on clean
+ :return:
+ """
+ keys = nova_utils.create_keys()
+ nova_utils.save_keys_to_files(
+ keys=keys, pub_file_path=self.pub_file_path,
+ priv_file_path=self.priv_file_path)
+ self.keypair_creator = OpenStackKeypair(
+ self.os_creds, KeypairSettings(
+ name=self.keypair_name, public_filepath=self.pub_file_path,
+ private_filepath=self.priv_file_path, delete_on_clean=True))
+ self.keypair_creator.create()
+ self.keypair_creator.clean()
+
+ self.assertFalse(file_utils.file_exists(self.pub_file_path))
+ self.assertFalse(file_utils.file_exists(self.priv_file_path))
diff --git a/snaps/openstack/tests/create_network_tests.py b/snaps/openstack/tests/create_network_tests.py
index 322d383..bd373f1 100644
--- a/snaps/openstack/tests/create_network_tests.py
+++ b/snaps/openstack/tests/create_network_tests.py
@@ -464,6 +464,66 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
self.assertEqual(self.net_creator.get_network().id,
self.net_creator2.get_network().id)
+ def test_create_network_router_admin_user_to_new_project(self):
+ """
+ Tests the creation of an OpenStack network and router with the current
+ user to the admin project.
+ """
+ # Create Network/Subnet where the project names have been changed
+ admin_project_name = self.admin_os_creds.project_name
+ self.net_config.network_settings.project_name = admin_project_name
+ self.net_config.network_settings.subnet_settings[0].project_name = \
+ admin_project_name
+ self.net_creator = OpenStackNetwork(self.os_creds,
+ self.net_config.network_settings)
+ self.net_creator.create()
+
+ retrieved_net = neutron_utils.get_network(
+ self.neutron, self.net_config.network_settings.name)
+
+ self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
+
+ # Create Router
+ self.net_config.router_settings.project_name = admin_project_name
+ self.router_creator = create_router.OpenStackRouter(
+ self.os_creds, self.net_config.router_settings)
+ self.router_creator.create()
+
+ retrieved_router = neutron_utils.get_router_by_name(
+ self.neutron, self.router_creator.get_router().name)
+ self.assertEqual(
+ self.router_creator.get_router().id, retrieved_router.id)
+
+ def test_create_network_router_new_user_to_admin_project(self):
+ """
+ Tests the creation of an OpenStack network and router with the admin
+ user to the new project.
+ """
+ # Create Network/Subnet where the project names have been changed
+ new_project_name = self.os_creds.project_name
+ self.net_config.network_settings.project_name = new_project_name
+ self.net_config.network_settings.subnet_settings[0].project_name = \
+ new_project_name
+ self.net_creator = OpenStackNetwork(self.admin_os_creds,
+ self.net_config.network_settings)
+ self.net_creator.create()
+
+ retrieved_net = neutron_utils.get_network(
+ self.neutron, self.net_config.network_settings.name)
+
+ self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
+
+ # Create Router
+ self.net_config.router_settings.project_name = new_project_name
+ self.router_creator = create_router.OpenStackRouter(
+ self.admin_os_creds, self.net_config.router_settings)
+ self.router_creator.create()
+
+ retrieved_router = neutron_utils.get_router_by_name(
+ self.neutron, self.router_creator.get_router().name)
+ self.assertEqual(
+ self.router_creator.get_router().id, retrieved_router.id)
+
class CreateNetworkTypeTests(OSComponentTestCase):
"""
diff --git a/snaps/openstack/tests/create_router_tests.py b/snaps/openstack/tests/create_router_tests.py
index efa0993..6e10d66 100644
--- a/snaps/openstack/tests/create_router_tests.py
+++ b/snaps/openstack/tests/create_router_tests.py
@@ -21,7 +21,7 @@ from snaps.openstack.create_network import (
NetworkSettings, PortSettings)
from snaps.openstack.create_network import OpenStackNetwork
from snaps.openstack.create_router import (
- RouterSettings, RouterSettingsError, RouterCreationError)
+ RouterSettings, RouterSettingsError)
from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
from snaps.openstack.utils import neutron_utils
@@ -169,6 +169,46 @@ class CreateRouterSuccessTests(OSIntegrationTestCase):
self.assertTrue(verify_router_attributes(
router, self.router_creator, ext_gateway=self.ext_net_name))
+ def test_create_router_admin_user_to_new_project(self):
+ """
+ Test creation of a most basic router with the admin user pointing
+ to the new project.
+ """
+ router_settings = RouterSettings(
+ name=self.guid + '-pub-router', external_gateway=self.ext_net_name,
+ project_name=self.os_creds.project_name)
+
+ self.router_creator = create_router.OpenStackRouter(
+ self.admin_os_creds, router_settings)
+ self.router_creator.create()
+
+ router = neutron_utils.get_router_by_name(self.neutron,
+ router_settings.name)
+ self.assertIsNotNone(router)
+
+ self.assertTrue(verify_router_attributes(
+ router, self.router_creator, ext_gateway=self.ext_net_name))
+
+ def test_create_router_new_user_to_admin_project(self):
+ """
+ Test creation of a most basic router with the new user pointing
+ to the admin project.
+ """
+ router_settings = RouterSettings(
+ name=self.guid + '-pub-router', external_gateway=self.ext_net_name,
+ project_name=self.admin_os_creds.project_name)
+
+ self.router_creator = create_router.OpenStackRouter(
+ self.os_creds, router_settings)
+ self.router_creator.create()
+
+ router = neutron_utils.get_router_by_name(self.neutron,
+ router_settings.name)
+ self.assertIsNotNone(router)
+
+ self.assertTrue(verify_router_attributes(
+ router, self.router_creator, ext_gateway=self.ext_net_name))
+
def test_create_delete_router(self):
"""
Test that clean() will not raise an exception if the router is deleted
@@ -257,14 +297,23 @@ class CreateRouterSuccessTests(OSIntegrationTestCase):
self.network_creator2.create()
port_settings = [
- create_network.PortSettings(name=self.guid + '-port1', ip_addrs=[
- {'subnet_name': network_settings1.subnet_settings[0].name,
- 'ip': static_gateway_ip1}],
- network_name=network_settings1.name),
- create_network.PortSettings(name=self.guid + '-port2', ip_addrs=[
- {'subnet_name': network_settings2.subnet_settings[0].name,
- 'ip': static_gateway_ip2}],
- network_name=network_settings2.name)]
+ create_network.PortSettings(
+ name=self.guid + '-port1',
+ ip_addrs=[{
+ 'subnet_name':
+ network_settings1.subnet_settings[0].name,
+ 'ip': static_gateway_ip1
+ }],
+ network_name=network_settings1.name,
+ project_name=self.os_creds.project_name),
+ create_network.PortSettings(
+ name=self.guid + '-port2',
+ ip_addrs=[{
+ 'subnet_name': network_settings2.subnet_settings[0].name,
+ 'ip': static_gateway_ip2
+ }],
+ network_name=network_settings2.name,
+ project_name=self.os_creds.project_name)]
router_settings = RouterSettings(name=self.guid + '-pub-router',
port_settings=port_settings)
@@ -293,14 +342,17 @@ class CreateRouterSuccessTests(OSIntegrationTestCase):
self.network_creator1.create()
port_settings = [
- create_network.PortSettings(name=self.guid + '-port1', ip_addrs=[
- {'subnet_name': network_settings.subnet_settings[0].name,
- 'ip': static_gateway_ip1}],
- network_name=network_settings.name)]
-
- router_settings = RouterSettings(name=self.guid + '-pub-router',
- external_gateway=self.ext_net_name,
- port_settings=port_settings)
+ create_network.PortSettings(
+ name=self.guid + '-port1',
+ ip_addrs=[{
+ 'subnet_name': network_settings.subnet_settings[0].name,
+ 'ip': static_gateway_ip1}],
+ network_name=network_settings.name,
+ project_name=self.os_creds.project_name)]
+
+ router_settings = RouterSettings(
+ name=self.guid + '-pub-router', external_gateway=self.ext_net_name,
+ port_settings=port_settings)
self.router_creator = create_router.OpenStackRouter(self.os_creds,
router_settings)
self.router_creator.create()
diff --git a/snaps/openstack/tests/create_security_group_tests.py b/snaps/openstack/tests/create_security_group_tests.py
index dd28d7d..7cae62b 100644
--- a/snaps/openstack/tests/create_security_group_tests.py
+++ b/snaps/openstack/tests/create_security_group_tests.py
@@ -16,12 +16,9 @@ import unittest
import uuid
from snaps.openstack import create_security_group
-from snaps.openstack.create_security_group import (SecurityGroupSettings,
- SecurityGroupRuleSettings,
- Direction, Ethertype,
- Protocol,
- SecurityGroupRuleSettingsError,
- SecurityGroupSettingsError)
+from snaps.openstack.create_security_group import (
+ SecurityGroupSettings, SecurityGroupRuleSettings, Direction, Ethertype,
+ Protocol, SecurityGroupRuleSettingsError, SecurityGroupSettingsError)
from snaps.openstack.tests import validation_utils
from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
from snaps.openstack.utils import neutron_utils
@@ -212,6 +209,54 @@ class CreateSecurityGroupTests(OSIntegrationTestCase):
validation_utils.objects_equivalent(self.sec_grp_creator.get_rules(),
rules)
+ def test_create_group_admin_user_to_new_project(self):
+ """
+ Tests the creation of an OpenStack Security Group without custom rules.
+ """
+ # Create Image
+ sec_grp_settings = SecurityGroupSettings(
+ name=self.sec_grp_name, description='hello group',
+ project_name=self.admin_os_creds.project_name)
+ self.sec_grp_creator = create_security_group.OpenStackSecurityGroup(
+ self.os_creds, sec_grp_settings)
+ self.sec_grp_creator.create()
+
+ sec_grp = neutron_utils.get_security_group(self.neutron,
+ self.sec_grp_name)
+ self.assertIsNotNone(sec_grp)
+
+ validation_utils.objects_equivalent(
+ self.sec_grp_creator.get_security_group(), sec_grp)
+ rules = neutron_utils.get_rules_by_security_group(
+ self.neutron, self.sec_grp_creator.get_security_group())
+ self.assertEqual(len(self.sec_grp_creator.get_rules()), len(rules))
+ validation_utils.objects_equivalent(self.sec_grp_creator.get_rules(),
+ rules)
+
+ def test_create_group_new_user_to_admin_project(self):
+ """
+ Tests the creation of an OpenStack Security Group without custom rules.
+ """
+ # Create Image
+ sec_grp_settings = SecurityGroupSettings(
+ name=self.sec_grp_name, description='hello group',
+ project_name=self.os_creds.project_name)
+ self.sec_grp_creator = create_security_group.OpenStackSecurityGroup(
+ self.admin_os_creds, sec_grp_settings)
+ self.sec_grp_creator.create()
+
+ sec_grp = neutron_utils.get_security_group(self.neutron,
+ self.sec_grp_name)
+ self.assertIsNotNone(sec_grp)
+
+ validation_utils.objects_equivalent(
+ self.sec_grp_creator.get_security_group(), sec_grp)
+ rules = neutron_utils.get_rules_by_security_group(
+ self.neutron, self.sec_grp_creator.get_security_group())
+ self.assertEqual(len(self.sec_grp_creator.get_rules()), len(rules))
+ validation_utils.objects_equivalent(self.sec_grp_creator.get_rules(),
+ rules)
+
def test_create_delete_group(self):
"""
Tests the creation of an OpenStack Security Group without custom rules.
diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py
index 2ccee3f..da474a2 100644
--- a/snaps/openstack/tests/os_source_file_test.py
+++ b/snaps/openstack/tests/os_source_file_test.py
@@ -31,6 +31,7 @@ dev_os_env_file = pkg_resources.resource_filename(
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
+
class OSComponentTestCase(unittest.TestCase):
def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None,
@@ -82,7 +83,7 @@ class OSComponentTestCase(unittest.TestCase):
class OSIntegrationTestCase(OSComponentTestCase):
def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None,
- use_keystone=False, flavor_metadata=None, image_metadata=None,
+ use_keystone=True, flavor_metadata=None, image_metadata=None,
log_level=logging.DEBUG):
"""
Super for integration tests requiring a connection to OpenStack
diff --git a/snaps/test_suite_builder.py b/snaps/test_suite_builder.py
index e40aaa9..24c3e65 100644
--- a/snaps/test_suite_builder.py
+++ b/snaps/test_suite_builder.py
@@ -44,7 +44,7 @@ from snaps.openstack.tests.create_instance_tests import (
SimpleHealthCheck, CreateInstanceFromThreePartImage,
CreateInstanceMockOfflineTests)
from snaps.openstack.tests.create_keypairs_tests import (
- CreateKeypairsTests, KeypairSettingsUnitTests)
+ CreateKeypairsTests, KeypairSettingsUnitTests, CreateKeypairsCleanupTests)
from snaps.openstack.tests.create_network_tests import (
CreateNetworkSuccessTests, NetworkSettingsUnitTests, PortSettingsUnitTests,
SubnetSettingsUnitTests, CreateNetworkTypeTests)
@@ -324,6 +324,11 @@ def add_openstack_integration_tests(suite, os_creds, ext_net_name,
flavor_metadata=flavor_metadata, image_metadata=image_metadata,
log_level=log_level))
suite.addTest(OSIntegrationTestCase.parameterize(
+ CreateKeypairsCleanupTests, os_creds=os_creds, ext_net_name=ext_net_name,
+ use_keystone=use_keystone,
+ flavor_metadata=flavor_metadata, image_metadata=image_metadata,
+ log_level=log_level))
+ suite.addTest(OSIntegrationTestCase.parameterize(
CreateNetworkSuccessTests, os_creds=os_creds,
ext_net_name=ext_net_name, use_keystone=use_keystone,
flavor_metadata=flavor_metadata, image_metadata=image_metadata,