5. SNAPS OpenStack API Testing
Tests designated as component tests extend the snaps.openstack.tests.OSComponentTestCase class and must be exercised
with OpenStack credentials for all as well as an external network for many. When leveraging the unit_test_suite.py
application, the -e argument and -n arguments will suffice. When attempting to execute these tests within your IDE
of choice (tested on IntelliJ), you will need to edit the [repo_dir]/snaps/openstack/tests/conf/os_env.yaml file as well
as ensuring that your run configuration’s working directory is set to [repo_dir]/snaps.
6. The Test Classes
6.1. glance_utils_tests.py - GlanceSmokeTests
Ensures that a Glance client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
6.2. keystone_utils_tests.py - KeystoneSmokeTests
Ensures that a Keystone client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
6.3. neutron_utils_tests.py - NeutronSmokeTests
Ensures that a Neutron client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
6.4. nova_utils_tests.py - NovaSmokeTests
Ensures that a Nova client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
6.5. cinder_utils_tests.py - CinderSmokeTests
Ensures that a Cinder client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
6.6. heat_utils_tests.py - HeatSmokeTests
Ensures that a Heat client can be obtained as well as the proper
exceptions thrown with the wrong credentials.
6.7. keystone_utils_tests.py - KeystoneUtilsTests
Test Name |
Keystone API |
Description |
test_create_user_minimal |
2 & 3 |
Tests the creation of a user with minimal configuration
settings via the utility functions |
test_create_project_minimal |
2 & 3 |
Tests the creation of a project with minimal configuration
settings via the utility functions |
test_get_endpoint_success |
2 & 3 |
Tests to ensure that proper credentials and proper service
type can succeed |
test_get_endpoint_fail_without
_proper_service |
2 & 3 |
Tests to ensure that proper credentials and improper
service type cannot succeed |
test_get_endpoint_fail_without
_proper_credentials |
2 & 3 |
Tests to ensure that improper credentials and proper
service type cannot succeed |
test_get_endpoint_with_each
_interface |
2 & 3 |
Tests to ensure that an interface URL is returned for each
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 |
6.8. create_user_tests.py - CreateUserSuccessTests
Test Name |
Keystone API |
Description |
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 |
6.9. create_project_tests.py - CreateProjectSuccessTests
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 |
test_create_project_quota
_override |
2 & 3 |
Tests the creation of a project via the OpenStackProject
class with overriding the default quota values |
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_project |
2 & 3 |
Tests the creation and deletion of a project via the
OpenStackProject class to ensure that clean will not raise
an exception |
test_update_quotas |
2 & 3
nova & neutron |
Tests the ability to update quota values |
6.10. create_project_tests.py - CreateProjectUserTests
Test Name |
Keystone API |
Description |
test_create_project_sec_grp_one_user |
2 & 3 |
Tests the creation of an OpenStack object to a project
with a new users and to create a security group |
test_create_project_sec_grp_two_users |
2 & 3 |
Tests the creation of an OpenStack object to a project
with two new users and to create a security group under
each |
6.11. glance_utils_tests.py - GlanceUtilsTests
Test Name |
Glance API |
Description |
test_create_image_minimal_url |
1 |
Tests the glance_utils.create_image() function with a URL |
test_create_image_minimal_file |
1 |
Tests the glance_utils.create_image() function with a file |
6.12. neutron_utils_tests.py - NeutronUtilsNetworkTests
Test Name |
Neutron API |
Description |
test_create_network |
2 |
Ensures neutron_utils.create_network() properly creates a
network |
test_create_network_empty_name |
2 |
Ensures neutron_utils.create_network() raises an exception
when the network name is an empty string |
test_create_network_null_name |
2 |
Ensures neutron_utils.create_network() raises an exception
when the network name is None |
6.13. neutron_utils_tests.py - NeutronUtilsSubnetTests
Test Name |
Neutron API |
Description |
test_create_subnet |
2 |
Ensures neutron_utils.create_network() can properly create
an OpenStack subnet object |
test_create_subnet_null_name |
2 |
Ensures neutron_utils.create_network() raises an exception
when the subnet name is None |
test_create_subnet_empty_name |
2 |
Ensures neutron_utils.create_network() raises an exception
when the subnet name is an empty string |
test_create_subnet_null_cidr |
2 |
Ensures neutron_utils.create_network() raises an exception
when the subnet CIDR is None |
test_create_subnet_empty_cidr |
2 |
Ensures neutron_utils.create_network() raises an exception
when the subnet CIDR is an empty string |
6.14. neutron_utils_tests.py - NeutronUtilsIPv6Tests
Test Name |
Neutron API |
Description |
test_create_network_slaac |
2 |
Ensures neutron_utils.create_network() can properly create
an OpenStack network with an IPv6 subnet when DHCP is True
and modes are ‘slaac’ |
test_create_network_stateful |
2 |
Ensures neutron_utils.create_network() can properly create
an OpenStack network with an IPv6 subnet when DHCP is True
and modes are ‘stateful’ |
test_create_network_stateless |
2 |
Ensures neutron_utils.create_network() can properly create
an OpenStack network with an IPv6 subnet when DHCP is True
and modes are ‘stateless’ |
test_create_network_no_dhcp_slaac |
2 |
Ensures neutron_utils.create_network() raises a BadRequest
exception when deploying the network with an IPv6 subnet
when DHCP is False and modes are ‘slaac’ |
test_create_network_invalid_start_ip |
2 |
Ensures neutron_utils.create_network() sets the start IP
address to the minimum value when the start configuration
parameter is some garbage value |
test_create_network_invalid_end_ip |
2 |
Ensures neutron_utils.create_network() sets the end IP
address to the maximum value when the end configuration
parameter is some garbage value |
test_create_network_with_bad_cidr |
2 |
Ensures neutron_utils.create_network() raises a BadRequest
exception when the IPv6 CIDR is incorrect |
test_create_network_invalid_gateway_ip |
2 |
Ensures neutron_utils.create_network() raises a BadRequest
exception when the IPv6 gateway IP does not match the CIDR |
test_create_network_with_bad_dns |
2 |
Ensures neutron_utils.create_network() raises a BadRequest
exception when the IPv6 DNS IP address is not a valid IPv6
address |
6.15. neutron_utils_tests.py - NeutronUtilsRouterTests
Test Name |
Neutron API |
Description |
test_create_router_simple |
2 |
Ensures neutron_utils.create_router() can properly create
a simple OpenStack router object |
test_create_router_with_public_inter
face |
2 |
Ensures neutron_utils.create_router() can properly create
an OpenStack router object with an interface to the
external network |
test_add_interface_router |
2 |
Ensures neutron_utils.add_interface_router() properly adds
an interface to another subnet |
test_add_interface_router_null_router |
2 |
Ensures neutron_utils.add_interface_router() raises an
exception when the router object is None |
test_add_interface_router_null_subnet |
2 |
Ensures neutron_utils.add_interface_router() raises an
exception when the subnet object is None |
test_add_interface_router_missing_sub
net |
2 |
Ensures neutron_utils.add_interface_router() raises an
exception when the subnet object had been deleted |
test_create_port |
2 |
Ensures neutron_utils.create_port() can properly create an
OpenStack port object |
test_create_port_empty_name |
2 |
Ensures neutron_utils.create_port() raises an exception
when the port name is an empty string |
test_create_port_null_name |
2 |
Ensures neutron_utils.create_port() raises an exception
when the port name is None |
test_create_port_null_network_object |
2 |
Ensures neutron_utils.create_port() raises an exception
when the network object is None |
test_create_port_null_ip |
2 |
Ensures neutron_utils.create_port() raises an exception
when the assigned IP value is None |
test_create_port_invalid_ip |
2 |
Ensures neutron_utils.create_port() raises an exception
when the assigned IP value is invalid |
test_create_port_invalid_ip_to_subnet |
2 |
Ensures neutron_utils.create_port() raises an exception
when the assigned IP value is not part of CIDR |
6.16. neutron_utils_tests.py - NeutronUtilsSecurityGroupTests
Test Name |
Neutron API |
Description |
test_create_delete_simple_sec_grp |
2 |
Ensures that a security group can be created
(neutron_utils.create_security_group() and deleted via
neutron_utils.delete_security_group() |
test_create_sec_grp_no_name |
2 |
Ensures that neutron_utils.create_security_group() raises
an exception when attempting to create a security group
without a name |
test_create_sec_grp_no_rules |
2 |
Ensures that neutron_utils.create_security_group() can
create a security group without any rules |
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 |
6.17. neutron_utils_tests.py - NeutronUtilsFloatingIpTests
Test Name |
Neutron API |
Description |
test_floating_ips |
2 |
Ensures that a floating IP can be created |
6.18. cinder_utils_tests.py - CinderUtilsQoSTests
Test Name |
Cinder API |
Description |
test_create_qos_both |
2 & 3 |
Ensures that a QoS Spec can be created with a Consumer
value of ‘both’ |
test_create_qos_front |
2 & 3 |
Ensures that a QoS Spec can be created with a Consumer
value of ‘front-end’ |
test_create_qos_back |
2 & 3 |
Ensures that a QoS Spec can be created with a Consumer
value of ‘back-end’ |
test_create_delete_qos |
2 & 3 |
Ensures that a QoS Spec can be created and deleted |
6.19. cinder_utils_tests.py - CinderUtilsSimpleVolumeTypeTests
Test Name |
Cinder API |
Description |
test_create_simple_volume_type |
2 & 3 |
Tests the creation of a simple volume type with the
function cinder_utils#create_volume_type() |
test_create_delete_volume_type |
2 & 3 |
Tests the creation of a simple volume type with the
function cinder_utils#create_volume_type() then deletes
with the function cinder_utils#delete_volume_type() |
6.20. cinder_utils_tests.py - CinderUtilsAddEncryptionTests
Test Name |
Cinder API |
Description |
test_create_simple_encryption |
2 & 3 |
Tests the creation of a simple volume type encryption
with the function cinder_utils#create_volume_encryption() |
test_create_delete_encryption |
2 & 3 |
Tests the creation of a simple volume type encryption
with the function cinder_utils#create_volume_encryption()
then deletes with the function
cinder_utils#delete_volume_type_encryption() |
test_create_with_all_attrs |
2 & 3 |
Tests the creation of a simple volume type encryption
with the function cinder_utils#create_volume_encryption()
where all configuration attributes have been set |
test_create_bad_key_size |
2 & 3 |
Tests to ensure that the function
cinder_utils#create_volume_encryption() raises a
BadRequest exception when the key_size attribute is -1 |
6.21. cinder_utils_tests.py - CinderUtilsVolumeTypeCompleteTests
Test Name |
Cinder API |
Description |
test_create_with_encryption |
2 & 3 |
Tests the creation of a volume type with encryption
with the function cinder_utils#create_volume_type() |
test_create_with_qos |
2 & 3 |
Tests the creation of a volume type with a QoS Spec
with the function cinder_utils#create_volume_type() |
test_create_with_invalid_qos |
2 & 3 |
Tests the creation of a volume type with an invalid QoS
Spec with the function cinder_utils#create_volume_type() |
test_create_with_qos_and_encryption |
2 & 3 |
Tests the creation of a volume type with a QoS Spec and
encryption with the function
cinder_utils#create_volume_type() |
6.22. cinder_utils_tests.py - CinderUtilsVolumeTests
Test Name |
Cinder API |
Description |
test_create_simple_volume |
2 & 3 |
Tests the creation of a simple volume with the function
cinder_utils#create_volume() |
test_create_delete_volume |
2 & 3 |
Tests the creation of a volume with the function
cinder_utils#create_volume() then deletion with the
function cinder_utils#delete_volume() |
6.23. nova_utils_tests.py - NovaUtilsKeypairTests
Test Name |
Nova API |
Description |
test_create_keypair |
2 |
Ensures that a keypair can be properly created via
nova_utils.upload_keypair() with a public_key object |
test_create_delete_keypair |
2 |
Ensures that a keypair can be properly deleted via
nova_utils.delete_keypair() |
test_create_key_from_file |
2 |
Ensures that a keypair can be properly created via
nova_utils.upload_keypair_file() |
6.24. nova_utils_tests.py - NovaUtilsFlavorTests
Test Name |
Nova API |
Description |
test_create_flavor |
2 |
Ensures that a flavor can be properly created via
nova_utils.create_flavor() |
test_create_delete_flavor |
2 |
Ensures that a flavor can be properly deleted via
nova_utils.delete_flavor() |
6.25. 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() |
6.26. nova_utils_tests.py - NovaUtilsInstanceVolumeTests
Test Name |
Nova API |
Description |
test_add_remove_volume |
2 |
Ensures that a VM instance can properly attach and detach
a volume using the nova interface while waiting for
the update to fully occur |
test_attach_volume_nowait |
2 |
Ensures that the call to nova_utils.attach_volume raises
an exception when the timeout is too short to return an
properly updated VmInst object |
test_detach_volume_nowait |
2 |
Ensures that the call to nova_utils.detach_volume raises
an exception when the timeout is too short to return an
properly updated VmInst object |
6.27. create_flavor_tests.py - CreateFlavorTests
Test Name |
Nova API |
Description |
test_create_flavor |
2 |
Ensures that the OpenStackFlavor class’s create() method
creates an OpenStack flavor object |
test_create_flavor_existing |
2 |
Ensures that the OpenStackFlavor class’s create() will not
create a flavor with the same name more than once |
test_create_clean_flavor |
2 |
Ensures that the OpenStackFlavor class’s clean() method
will delete the flavor object |
test_create_delete_flavor |
2 |
Ensures that the OpenStackFlavor class’s clean() method
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 |
6.28. heat_utils_tests.py - HeatUtilsCreateSimpleStackTests
Test Name |
Heat API |
Description |
test_create_stack |
1-3 |
Tests the heat_utils.create_stack() with a test template |
test_create_stack_x2 |
1-3 |
Tests the heat_utils.create_stack() with a test template
and attempts to deploy a second time w/o actually
deploying any objects |
6.29. heat_utils_tests.py - HeatUtilsCreateComplexStackTests
Test Name |
Heat API |
Description |
test_get_settings_from_stack |
1-3 |
Tests the heat_utils functions that are responsible for
reverse engineering settings objects of the types deployed
by Heat |
6.30. heat_utils_tests.py - HeatUtilsRouterTests
Test Name |
Heat API |
Description |
test_create_router_with_stack |
1-3 |
Tests ability of the function
heat_utils.get_stack_routers() to return the correct
OpenStackRouter instance |
6.31. heat_utils_tests.py - HeatUtilsVolumeTests
Test Name |
Heat API |
Description |
test_create_vol_with_stack |
1-3 |
Tests ability of the function
heat_utils.create_stack() to return the correct
Volume domain objects deployed with Heat |
test_create_vol_types_with_stack |
1-3 |
Tests ability of the function
heat_utils.get_stack_volumes_types() to return the correct
VolumeType domain objects deployed with Heat |
6.32. heat_utils_tests.py - HeatUtilsKeypairTests
Test Name |
Heat API |
Description |
test_create_keypair_with_stack |
1-3 |
Tests ability of the function
heat_utils.get_stack_keypairs() to return the correct
Keypair domain objects deployed with Heat |
6.33. heat_utils_tests.py - HeatUtilsSecurityGroupTests
Test Name |
Heat API |
Description |
test_create_security_group_with_stack |
1-3 |
Tests ability of the function
heat_utils.get_stack_security_groups() to return the
correct SecurityGroup domain objects deployed with Heat |
6.34. heat_utils_tests.py - HeatUtilsFlavorTests
Test Name |
Heat API |
Description |
test_create_flavor_with_stack |
1-3 |
Tests ability of the function
heat_utils.get_stack_flavors() to return the correct
Flavor domain objects deployed with Heat |
6.35. magnum_utils_tests.py - MagnumUtilsTests
Test Name |
Magnum API |
Description |
test_create_cluster_template_simple |
1 |
Tests ability of the function
magnum_utils.create_cluster_template() to create a simple
cluster template OpenStack object with minimal config |
test_create_cluster_template_all |
1 |
Tests ability of the function
magnum_utils.create_cluster_template() to create a
cluster template OpenStack object with maximum config |
test_create_cluster_template_bad_image |
1 |
Ensures the function
magnum_utils.create_cluster_template() will raise a
BadRequest exception when the image does not exist |
test_create_cluster_template_bad_ext
_net |
1 |
Ensures the function
magnum_utils.create_cluster_template() will raise a
BadRequest exception when the external network does not
exist |
test_create_cluster_template_bad
_flavor |
1 |
Ensures the function
magnum_utils.create_cluster_template() will raise a
BadRequest exception when the flavor does not exist |
test_create_cluster_template_bad
_master_flavor |
1 |
Ensures the function
magnum_utils.create_cluster_template() will raise a
BadRequest exception when the master flavor does not exist |
test_create_cluster_template_bad
_network_driver |
1 |
Ensures the function
magnum_utils.create_cluster_template() will raise a
BadRequest exception when the network driver is invalid |
test_create_cluster_template_bad
_volume_driver |
1 |
Ensures the function
magnum_utils.create_cluster_template() will raise a
BadRequest exception when the volume driver is invalid |
6.36. settings_utils_tests.py - SettingsUtilsNetworkingTests
Test Name |
API |
Description |
test_derive_net_settings_no_subnet |
Neutron 2 |
Tests to ensure that derived NetworkConfig from an
OpenStack network are correct without a subnet |
test_derive_net_settings_two_subnets |
Neutron 2 |
Tests to ensure that derived NetworkConfig from an
OpenStack network are correct with two subnets |
6.37. settings_utils_tests.py - SettingsUtilsVmInstTests