summaryrefslogtreecommitdiffstats
path: root/cvp/3rd_party/static/testapi-ui/components/guidelines
diff options
context:
space:
mode:
Diffstat (limited to 'cvp/3rd_party/static/testapi-ui/components/guidelines')
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/data/danube.json590
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/data/gen.py16
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json248
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/guidelines.html70
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js188
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html90
-rw-r--r--cvp/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html46
7 files changed, 1248 insertions, 0 deletions
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/data/danube.json b/cvp/3rd_party/static/testapi-ui/components/guidelines/data/danube.json
new file mode 100644
index 00000000..99613b72
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/data/danube.json
@@ -0,0 +1,590 @@
+{
+ "mandatory": {
+ "name": "Mandatory CVP Test Areas",
+ "value": [
+ {
+ "area_name": "Test Area VIM Operations - Compute",
+ "value": [
+ {
+ "api_name": "Image operations within the Compute API",
+ "value": [
+ "tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_delete_image",
+ "tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_image_specify_multibyte_character_image_name"
+ ]
+ },
+ {
+ "api_name": "Basic support Compute API for server actions such as reboot, rebuild, resize",
+ "value": [
+ "tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_get_instance_action",
+ "tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_list_instance_actions"
+ ]
+ },
+ {
+ "api_name": "Generate, import, and delete SSH keys within Compute services",
+ "value": [
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair"
+ ]
+ },
+ {
+ "api_name": "List supported versions of the Compute API",
+ "value": [
+ "tempest.api.compute.test_versions.TestVersions.test_list_api_versions"
+ ]
+ },
+ {
+ "api_name": "Quotas management in Compute API",
+ "value": [
+ "tempest.api.compute.test_quotas.QuotasTestJSON.test_get_default_quotas",
+ "tempest.api.compute.test_quotas.QuotasTestJSON.test_get_quotas"
+ ]
+ },
+ {
+ "api_name": "Basic server operations in the Compute API",
+ "value": [
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_server_with_admin_password",
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_with_existing_server_name",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_numeric_server_name",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_metadata_exceeds_length_limit",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_name_length_exceeds_256",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_flavor",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_image",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_network_uuid",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_id_exceeding_length_limit",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_negative_id",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_get_non_existent_server",
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_host_name_is_same_as_server_name",
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_host_name_is_same_as_server_name",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_invalid_ip_v6_address",
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers",
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers_with_detail",
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers",
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers_with_detail",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_flavor",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_image",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_name",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_status",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_limit_results",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_flavor",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_image",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_limit",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_name",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_status",
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filtered_by_name_wildcard",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_future_date",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_invalid_date",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_greater_than_actual_count",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_negative_value",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_string",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_flavor",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_image",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_server_name",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_detail_server_is_deleted",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_status_non_existing",
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_with_a_deleted_server",
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_lock_unlock_server",
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_delete_server_metadata_item",
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_get_server_metadata_item",
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_list_server_metadata",
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata",
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata_item",
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_update_server_metadata",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_server_name_blank",
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_reboot_server_hard",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_reboot_non_existent_server",
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_rebuild_server",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_deleted_server",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_non_existent_server",
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_stop_start_server",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_stop_non_existent_server",
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_access_server_address",
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_server_name",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_name_of_non_existent_server",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_name_length_exceeds_256",
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_set_empty_name",
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_created_server_vcpus",
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_server_details",
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_created_server_vcpus",
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_server_details"
+ ]
+ },
+ {
+ "api_name": "Retrieve volume information through the Compute API",
+ "value": [
+ "tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_attach_detach_volume",
+ "tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_list_get_volume_attachments"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area VIM Operations - Identity",
+ "value": [
+ {
+ "api_name": "API discovery operations within the Identity v3 API",
+ "value": [
+ "tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types",
+ "tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources",
+ "tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_statuses"
+ ]
+ },
+ {
+ "api_name": "Auth operations within the Identity API",
+ "value": [
+ "tempest.api.identity.v3.test_tokens.TokensV3Test.test_create_token"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area VIM Operations - Image",
+ "value": [
+ {
+ "api_name": "Image deletion tests using the Glance v2 API",
+ "value": [
+ "tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_delete_image",
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_image_null_id",
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_non_existing_image",
+ "tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_delete_non_existing_tag"
+ ]
+ },
+ {
+ "api_name": "Image get tests using the Glance v2 API",
+ "value": [
+ "tempest.api.image.v2.test_images.ListImagesTest.test_get_image_schema",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_get_images_schema",
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_delete_deleted_image",
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_image_null_id",
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_non_existent_image"
+ ]
+ },
+ {
+ "api_name": "CRUD image operations in Images API v2",
+ "value": [
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_no_params"
+ ]
+ },
+ {
+ "api_name": "Image list tests using the Glance v2 API",
+ "value": [
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_container_format",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_disk_format",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_limit",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_min_max_size",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_size",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_status",
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_visibility"
+ ]
+ },
+ {
+ "api_name": "Image update tests using the Glance v2 API",
+ "value": [
+ "tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_update_image",
+ "tempest.api.image.v2.test_images_tags.ImagesTagsTest.test_update_delete_tags_for_image",
+ "tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_update_tags_for_non_existing_image"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area VIM Operations - Network",
+ "value": [
+ {
+ "api_name": "Basic CRUD operations on L2 networks and L2 network ports",
+ "value": [
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_all_attributes",
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_allocation_pools",
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_dhcp_enabled",
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw",
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw_and_allocation_pools",
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_host_routes_and_dns_nameservers",
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_without_gateway",
+ "tempest.api.network.test_networks.NetworksTest.test_create_update_delete_network_subnet",
+ "tempest.api.network.test_networks.NetworksTest.test_delete_network_with_subnet",
+ "tempest.api.network.test_networks.NetworksTest.test_list_networks",
+ "tempest.api.network.test_networks.NetworksTest.test_list_networks_fields",
+ "tempest.api.network.test_networks.NetworksTest.test_list_subnets",
+ "tempest.api.network.test_networks.NetworksTest.test_list_subnets_fields",
+ "tempest.api.network.test_networks.NetworksTest.test_show_network",
+ "tempest.api.network.test_networks.NetworksTest.test_show_network_fields",
+ "tempest.api.network.test_networks.NetworksTest.test_show_subnet",
+ "tempest.api.network.test_networks.NetworksTest.test_show_subnet_fields",
+ "tempest.api.network.test_networks.NetworksTest.test_update_subnet_gw_dns_host_routes_dhcp",
+ "tempest.api.network.test_ports.PortsTestJSON.test_create_bulk_port",
+ "tempest.api.network.test_ports.PortsTestJSON.test_create_port_in_allowed_allocation_pools",
+ "tempest.api.network.test_ports.PortsTestJSON.test_create_update_delete_port",
+ "tempest.api.network.test_ports.PortsTestJSON.test_list_ports",
+ "tempest.api.network.test_ports.PortsTestJSON.test_list_ports_fields",
+ "tempest.api.network.test_ports.PortsTestJSON.test_show_port",
+ "tempest.api.network.test_ports.PortsTestJSON.test_show_port_fields",
+ "tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_security_group_and_extra_attributes",
+ "tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_two_security_groups_and_extra_attributes"
+ ]
+ },
+ {
+ "api_name": "Basic CRUD operations on security groups",
+ "value": [
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_list_update_show_delete_security_group",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_additional_args",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_icmp_type_code",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_protocol_integer_value",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_group_id",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_ip_prefix",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_show_delete_security_group_rule",
+ "tempest.api.network.test_security_groups.SecGroupTest.test_list_security_groups",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_additional_default_security_group_fails",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_duplicate_security_group_rule_fails",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_ethertype",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_protocol",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_remote_ip_prefix",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_invalid_ports",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_remote_groupid",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_security_group",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_delete_non_existent_security_group",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group",
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group_rule"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area VIM Operations - Volume",
+ "value": [
+ {
+ "api_name": "Volume attach and detach operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_attach_detach_volume_to_instance",
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_get_volume_attachment",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_attach_volumes_with_nonexistent_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_detach_volumes_with_invalid_volume_id"
+ ]
+ },
+ {
+ "api_name": "Volume service availability zone operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list"
+ ]
+ },
+ {
+ "api_name": "Volume cloning operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_as_clone"
+ ]
+ },
+ {
+ "api_name": "Image copy-to-volume operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable",
+ "tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_from_image"
+ ]
+ },
+ {
+ "api_name": "Volume creation and deletion operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_invalid_size",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_source_volid",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_volume_type",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_out_passing_size",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero"
+ ]
+ },
+ {
+ "api_name": "Volume service extension listing operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions"
+ ]
+ },
+ {
+ "api_name": "Volume GET operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id"
+ ]
+ },
+ {
+ "api_name": "Volume listing operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_by_name",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_by_name",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_param_display_name_and_status",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_display_name_and_status",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_metadata",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_details",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_param_metadata",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_availability_zone",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_status",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_availability_zone",
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_status",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_invalid_status",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_nonexistent_name",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_invalid_status",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_nonexistent_name",
+ "tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination",
+ "tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params",
+ "tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination"
+ ]
+ },
+ {
+ "api_name": "Volume metadata operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_create_get_delete_volume_metadata",
+ "tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item"
+ ]
+ },
+ {
+ "api_name": "Verification of read-only status on volumes with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update"
+ ]
+ },
+ {
+ "api_name": "Volume reservation operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_reserve_unreserve_volume",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_negative_volume_status",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_nonexistent_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_unreserve_volume_with_nonexistent_volume_id"
+ ]
+ },
+ {
+ "api_name": "Volume snapshot creation/deletion operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_create_get_delete_snapshot_metadata",
+ "tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_update_snapshot_metadata_item",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_snapshot_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_invalid_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_volume_without_passing_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_delete_nonexistent_volume_id",
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshot_create_get_list_update_delete",
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_volume_from_snapshot",
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_details_with_params",
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_with_params",
+ "tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id",
+ "tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id"
+ ]
+ },
+ {
+ "api_name": "Volume update operations with the Cinder v2 API",
+ "value": [
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id",
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area High Availability",
+ "value": [
+ {
+ "api_name": "Verify high availability of OpenStack controller services",
+ "value": [
+ "opnfv.ha.tc001.nova-api_service_down",
+ "opnfv.ha.tc003.neutron-server_service_down",
+ "opnfv.ha.tc004.keystone_service_down",
+ "opnfv.ha.tc005.glance-api_service_down",
+ "opnfv.ha.tc006.cinder-api_service_down",
+ "opnfv.ha.tc009.cpu_overload",
+ "opnfv.ha.tc010.disk_I/O_block",
+ "opnfv.ha.tc011.load_balance_service_down"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area vPing - Basic VNF Connectivity",
+ "value": [
+ {
+ "api_name": "Verify basic VNF connectivity with ICMP ping packets",
+ "value": [
+ "opnfv.vping.userdata",
+ "opnfv.vping.ssh"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "optional": {
+ "name": "Optional CVP Test Areas",
+ "value": [
+ {
+ "area_name": "Test Area BGP VPN",
+ "value": [
+ {
+ "api_name": "Verify association and dissasocitation of node using route targets",
+ "value": [
+ "opnfv.sdnvpn.subnet_connectivity",
+ "opnfv.sdnvpn.tenant separation",
+ "opnfv.sdnvpn.router_association",
+ "opnfv.sdnvpn.router_association_floating_ip"
+ ]
+ }
+ ]
+ },
+ {
+ "area_name": "Test Area IPv6 Compliance Testing Methodology and Test Cases",
+ "value": [
+ {
+ "api_name": "Test Case 1: Create and Delete an IPv6 Network, Port and Subnet",
+ "value": [
+ "tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_network",
+ "tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_port",
+ "tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_subnet"
+ ]
+ },
+ {
+ "api_name": "Test Case 2: Create, Update and Delete an IPv6 Network and Subnet",
+ "value": [
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_create_update_delete_network_subnet"
+ ]
+ },
+ {
+ "api_name": "Test Case 3: Check External Network Visibility",
+ "value": [
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_external_network_visibility"
+ ]
+ },
+ {
+ "api_name": "Test Case 4: List IPv6 Networks and Subnets of a Tenant",
+ "value": [
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_list_networks",
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_list_subnets"
+ ]
+ },
+ {
+ "api_name": "Test Case 5: Show Information of an IPv6 Network and Subnet",
+ "value": [
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_show_network",
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_show_subnet"
+ ]
+ },
+ {
+ "api_name": "Test Case 6: Create an IPv6 Port in Allowed Allocation Pools",
+ "value": [
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_create_port_in_allowed_allocation_pools"
+ ]
+ },
+ {
+ "api_name": "Test Case 7: Create an IPv6 Port without Security Groups",
+ "value": [
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_create_port_with_no_securitygroups"
+ ]
+ },
+ {
+ "api_name": "Test Case 8: Create, Update and Delete an IPv6 Port",
+ "value": [
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_create_update_delete_port"
+ ]
+ },
+ {
+ "api_name": "Test Case 9: List IPv6 Ports of a Tenant",
+ "value": [
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_list_ports"
+ ]
+ },
+ {
+ "api_name": "Test Case 10: Show Information of an IPv6 Port",
+ "value": [
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_show_port"
+ ]
+ },
+ {
+ "api_name": "Test Case 11: Add Multiple Interfaces for an IPv6 Router",
+ "value": [
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_add_multiple_router_interfaces"
+ ]
+ },
+ {
+ "api_name": "Test Case 12: Add and Remove an IPv6 Router Interface with port_id",
+ "value": [
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_add_remove_router_interface_with_port_id"
+ ]
+ },
+ {
+ "api_name": "Test Case 13: Add and Remove an IPv6 Router Interface with subnet_id",
+ "value": [
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_add_remove_router_interface_with_subnet_id"
+ ]
+ },
+ {
+ "api_name": "Test Case 14: Create, Update, Delete, List and Show an IPv6 Router",
+ "value": [
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_create_show_list_update_delete_router"
+ ]
+ },
+ {
+ "api_name": "Test Case 15: Create, Update, Delete, List and Show an IPv6 Security Group",
+ "value": [
+ "tempest.api.network.test_security_groups.SecGroupIPv6Test.test_create_list_update_show_delete_security_group"
+ ]
+ },
+ {
+ "api_name": "Test Case 16: Create, Delete and Show Security Group Rules",
+ "value": [
+ "tempest.api.network.test_security_groups.SecGroupIPv6Test.test_create_show_delete_security_group_rule"
+ ]
+ },
+ {
+ "api_name": "Test Case 17: List All Security Groups",
+ "value": [
+ "tempest.api.network.test_security_groups.SecGroupIPv6Test.test_list_security_groups"
+ ]
+ },
+ {
+ "api_name": "Test Case 18: IPv6 Address Assignment - Dual Stack, SLAAC, DHCPv6 Stateless",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dhcp6_stateless_from_os"
+ ]
+ },
+ {
+ "api_name": "Test Case 19: IPv6 Address Assignment - Dual Net, Dual Stack, SLAAC, DHCPv6 Stateless",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_dhcp6_stateless_from_os"
+ ]
+ },
+ {
+ "api_name": "Test Case 20: IPv6 Address Assignment - Multiple Prefixes, Dual Stack, SLAAC, DHCPv6 Stateless",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_multi_prefix_dhcpv6_stateless"
+ ]
+ },
+ {
+ "api_name": "Test Case 21: IPv6 Address Assignment - Dual Net, Multiple Prefixes, Dual Stack, SLAAC, DHCPv6 Stateless",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_multi_prefix_dhcpv6_stateless"
+ ]
+ },
+ {
+ "api_name": "Test Case 22: IPv6 Address Assignment - Dual Stack, SLAAC",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_slaac_from_os"
+ ]
+ },
+ {
+ "api_name": "Test Case 23: IPv6 Address Assignment - Dual Net, Dual Stack, SLAAC",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_slaac_from_os"
+ ]
+ },
+ {
+ "api_name": "Test Case 24: IPv6 Address Assignment - Multiple Prefixes, Dual Stack, SLAAC",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_multi_prefix_slaac"
+ ]
+ },
+ {
+ "api_name": "Test Case 25: IPv6 Address Assignment - Dual Net, Dual Stack, Multiple Prefixes, SLAAC",
+ "value": [
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_multi_prefix_slaac"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/data/gen.py b/cvp/3rd_party/static/testapi-ui/components/guidelines/data/gen.py
new file mode 100644
index 00000000..34fb6941
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/data/gen.py
@@ -0,0 +1,16 @@
+import json
+
+with open('danube.json') as f:
+ data = json.load(f)
+mapping = {}
+for i in data['mandatory']['value']:
+ for j in i['value']:
+ for k in j['value']:
+ mapping[k] = True
+for i in data['optional']['value']:
+ for j in i['value']:
+ for k in j['value']:
+ mapping[k] = False
+
+with open('mandatory.json', 'w') as f:
+ f.write(json.dumps(mapping))
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json b/cvp/3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json
new file mode 100644
index 00000000..ce2ba857
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json
@@ -0,0 +1,248 @@
+{
+ "opnfv.ha.tc001.nova-api_service_down": true,
+ "opnfv.ha.tc003.neutron-server_service_down": true,
+ "opnfv.ha.tc004.keystone_service_down": true,
+ "opnfv.ha.tc005.glance-api_service_down": true,
+ "opnfv.ha.tc006.cinder-api_service_down": true,
+ "opnfv.ha.tc009.cpu_overload": true,
+ "opnfv.ha.tc010.disk_I/O_block": true,
+ "opnfv.ha.tc011.load_balance_service_down": true,
+ "opnfv.sdnvpn.router_association": false,
+ "opnfv.sdnvpn.router_association_floating_ip": false,
+ "opnfv.sdnvpn.subnet_connectivity": false,
+ "opnfv.sdnvpn.tenant separation": false,
+ "tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_delete_image": true,
+ "tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_image_specify_multibyte_character_image_name": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_host_name_is_same_as_server_name": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers_with_detail": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_created_server_vcpus": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_server_details": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_host_name_is_same_as_server_name": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers_with_detail": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_created_server_vcpus": true,
+ "tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_server_details": true,
+ "tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_get_instance_action": true,
+ "tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_list_instance_actions": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_flavor": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_image": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_name": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_status": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_limit_results": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_flavor": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_image": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_limit": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_name": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_status": true,
+ "tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filtered_by_name_wildcard": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_future_date": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_invalid_date": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_greater_than_actual_count": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_negative_value": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_string": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_flavor": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_image": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_server_name": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_detail_server_is_deleted": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_status_non_existing": true,
+ "tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_with_a_deleted_server": true,
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_lock_unlock_server": true,
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_reboot_server_hard": true,
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_rebuild_server": true,
+ "tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_stop_start_server": true,
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_delete_server_metadata_item": true,
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_get_server_metadata_item": true,
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_list_server_metadata": true,
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata": true,
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata_item": true,
+ "tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_update_server_metadata": true,
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_server_with_admin_password": true,
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair": true,
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_with_existing_server_name": true,
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_access_server_address": true,
+ "tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_server_name": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_numeric_server_name": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_metadata_exceeds_length_limit": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_name_length_exceeds_256": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_flavor": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_image": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_network_uuid": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_id_exceeding_length_limit": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_negative_id": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_get_non_existent_server": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_invalid_ip_v6_address": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_reboot_non_existent_server": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_deleted_server": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_non_existent_server": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_server_name_blank": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_stop_non_existent_server": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_name_of_non_existent_server": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_name_length_exceeds_256": true,
+ "tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_set_empty_name": true,
+ "tempest.api.compute.test_quotas.QuotasTestJSON.test_get_default_quotas": true,
+ "tempest.api.compute.test_quotas.QuotasTestJSON.test_get_quotas": true,
+ "tempest.api.compute.test_versions.TestVersions.test_list_api_versions": true,
+ "tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_attach_detach_volume": true,
+ "tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_list_get_volume_attachments": true,
+ "tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types": true,
+ "tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources": true,
+ "tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_statuses": true,
+ "tempest.api.identity.v3.test_tokens.TokensV3Test.test_create_token": true,
+ "tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_delete_image": true,
+ "tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_update_image": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_get_image_schema": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_get_images_schema": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_container_format": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_disk_format": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_limit": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_min_max_size": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_size": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_status": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_visibility": true,
+ "tempest.api.image.v2.test_images.ListImagesTest.test_list_no_params": true,
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_image_null_id": true,
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_non_existing_image": true,
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_delete_deleted_image": true,
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_image_null_id": true,
+ "tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_non_existent_image": true,
+ "tempest.api.image.v2.test_images_tags.ImagesTagsTest.test_update_delete_tags_for_image": true,
+ "tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_delete_non_existing_tag": true,
+ "tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_update_tags_for_non_existing_image": true,
+ "tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_network": false,
+ "tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_port": false,
+ "tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_subnet": false,
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_create_update_delete_network_subnet": false,
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_external_network_visibility": false,
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_list_networks": false,
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_list_subnets": false,
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_show_network": false,
+ "tempest.api.network.test_networks.NetworksIpV6Test.test_show_subnet": false,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_all_attributes": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_allocation_pools": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_dhcp_enabled": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw_and_allocation_pools": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_host_routes_and_dns_nameservers": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_without_gateway": true,
+ "tempest.api.network.test_networks.NetworksTest.test_create_update_delete_network_subnet": true,
+ "tempest.api.network.test_networks.NetworksTest.test_delete_network_with_subnet": true,
+ "tempest.api.network.test_networks.NetworksTest.test_list_networks": true,
+ "tempest.api.network.test_networks.NetworksTest.test_list_networks_fields": true,
+ "tempest.api.network.test_networks.NetworksTest.test_list_subnets": true,
+ "tempest.api.network.test_networks.NetworksTest.test_list_subnets_fields": true,
+ "tempest.api.network.test_networks.NetworksTest.test_show_network": true,
+ "tempest.api.network.test_networks.NetworksTest.test_show_network_fields": true,
+ "tempest.api.network.test_networks.NetworksTest.test_show_subnet": true,
+ "tempest.api.network.test_networks.NetworksTest.test_show_subnet_fields": true,
+ "tempest.api.network.test_networks.NetworksTest.test_update_subnet_gw_dns_host_routes_dhcp": true,
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_create_port_in_allowed_allocation_pools": false,
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_create_port_with_no_securitygroups": false,
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_create_update_delete_port": false,
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_list_ports": false,
+ "tempest.api.network.test_ports.PortsIpV6TestJSON.test_show_port": false,
+ "tempest.api.network.test_ports.PortsTestJSON.test_create_bulk_port": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_create_port_in_allowed_allocation_pools": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_create_update_delete_port": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_list_ports": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_list_ports_fields": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_show_port": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_show_port_fields": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_security_group_and_extra_attributes": true,
+ "tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_two_security_groups_and_extra_attributes": true,
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_add_multiple_router_interfaces": false,
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_add_remove_router_interface_with_port_id": false,
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_add_remove_router_interface_with_subnet_id": false,
+ "tempest.api.network.test_routers.RoutersIpV6Test.test_create_show_list_update_delete_router": false,
+ "tempest.api.network.test_security_groups.SecGroupIPv6Test.test_create_list_update_show_delete_security_group": false,
+ "tempest.api.network.test_security_groups.SecGroupIPv6Test.test_create_show_delete_security_group_rule": false,
+ "tempest.api.network.test_security_groups.SecGroupIPv6Test.test_list_security_groups": false,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_list_update_show_delete_security_group": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_additional_args": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_icmp_type_code": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_protocol_integer_value": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_group_id": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_ip_prefix": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_create_show_delete_security_group_rule": true,
+ "tempest.api.network.test_security_groups.SecGroupTest.test_list_security_groups": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_additional_default_security_group_fails": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_duplicate_security_group_rule_fails": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_ethertype": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_protocol": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_remote_ip_prefix": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_invalid_ports": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_remote_groupid": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_security_group": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_delete_non_existent_security_group": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group": true,
+ "tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group_rule": true,
+ "tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list": true,
+ "tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions": true,
+ "tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_create_get_delete_snapshot_metadata": true,
+ "tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_update_snapshot_metadata_item": true,
+ "tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_create_get_delete_volume_metadata": true,
+ "tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item": true,
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_attach_detach_volume_to_instance": true,
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_get_volume_attachment": true,
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_reserve_unreserve_volume": true,
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable": true,
+ "tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update": true,
+ "tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete": true,
+ "tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_as_clone": true,
+ "tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_from_image": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_by_name": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_by_name": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_param_display_name_and_status": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_display_name_and_status": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_metadata": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_details": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_param_metadata": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_availability_zone": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_status": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_availability_zone": true,
+ "tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_status": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_attach_volumes_with_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_invalid_size": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_snapshot_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_source_volid": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_volume_type": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_out_passing_size": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_invalid_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_volume_without_passing_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_detach_volumes_with_invalid_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_invalid_status": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_nonexistent_name": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_invalid_status": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_nonexistent_name": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_negative_volume_status": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_unreserve_volume_with_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_delete_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshot_create_get_list_update_delete": true,
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_details_with_params": true,
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_with_params": true,
+ "tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_volume_from_snapshot": true,
+ "tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id": true,
+ "tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id": true,
+ "tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination": true,
+ "tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params": true,
+ "tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination": true,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dhcp6_stateless_from_os": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_dhcp6_stateless_from_os": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_multi_prefix_dhcpv6_stateless": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_multi_prefix_slaac": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_slaac_from_os": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_multi_prefix_dhcpv6_stateless": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_multi_prefix_slaac": false,
+ "tempest.scenario.test_network_v6.TestGettingAddress.test_slaac_from_os": false
+}
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/guidelines.html b/cvp/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
new file mode 100644
index 00000000..6e138b89
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
@@ -0,0 +1,70 @@
+<h3>OPNFV Ready&#8482; Guidelines</h3>
+
+<!-- Guideline Filters -->
+<div class="row">
+ <div class="col-md-3">
+ <strong>Version:</strong>
+ <!-- Slicing the version file name here gets rid of the '.json' file extension -->
+ <select ng-model="ctrl.version"
+ ng-change="ctrl.update()"
+ class="form-control"
+ ng-options="versionFile.slice(0,10) for versionFile in ctrl.versionList">
+ </select>
+ </div>
+ <!--
+ <div class="col-md-4">
+ <strong>Target Program:</strong>
+ <span class="program-about"><a target="_blank" href="http://www.openstack.org/brand/interop/">About</a></span>
+ <select ng-model="ctrl.target" class="form-control" ng-change="ctrl.updateTargetCapabilities()">
+ <option value="platform">OpenStack Powered Platform</option>
+ <option value="compute">OpenStack Powered Compute</option>
+ <option value="object">OpenStack Powered Object Storage</option>
+ </select>
+ </div>
+ -->
+</div>
+
+<br />
+<!--
+<div ng-if="ctrl.guidelines">
+ <strong>Guideline Status:</strong>
+ {{ctrl.guidelines.status | capitalize}}
+</div>
+
+<div ng-show="ctrl.guidelines">
+ <strong>Corresponding OpenStack Releases:</strong>
+ <ul class="list-inline">
+ <li ng-repeat="release in ctrl.guidelines.releases">
+ {{release | capitalize}}
+ </li>
+ </ul>
+</div>
+-->
+
+<strong>Capability Status:</strong>
+<div class="checkbox">
+ <label>
+ <input type="checkbox" ng-model="ctrl.showMandatory">
+ <span class="mandatory">Mandatory</span>
+ </label>
+ <label>
+ <input type="checkbox" ng-model="ctrl.showOptional">
+ <span class="optional">Optional</span>
+ </label>
+</div>
+<!-- End Capability Filters -->
+
+<!-- Loading animation divs -->
+<div cg-busy="{promise:ctrl.versionsRequest,message:'Loading versions'}"></div>
+<div cg-busy="{promise:ctrl.capsRequest,message:'Loading capabilities'}"></div>
+
+<!-- Get the version-specific template -->
+<div nf-show="ctrl.data" ng-include src="ctrl.detailsTemplate"></div>
+
+<!--
+<div ng-show="ctrl.showError" class="alert alert-danger" role="alert">
+ <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+ <span class="sr-only">Error:</span>
+ {{ctrl.error}}
+</div>
+-->
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js b/cvp/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js
new file mode 100644
index 00000000..46d2042a
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js
@@ -0,0 +1,188 @@
+/*
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('testapiApp')
+ .controller('GuidelinesController', GuidelinesController);
+
+ GuidelinesController.$inject = ['$http', '$uibModal', 'testapiApiUrl'];
+
+ /**
+ * TestAPI Guidelines Controller
+ * This controller is for the '/guidelines' page where a user can browse
+ * through tests belonging to Interop WG defined capabilities.
+ */
+ function GuidelinesController($http, $uibModal, testapiApiUrl) {
+ var ctrl = this;
+
+ ctrl.getVersionList = getVersionList;
+ ctrl.update = update;
+
+ ctrl.showMandatory = true;
+ ctrl.showOptional = false;
+ ctrl.version = '';
+ ctrl.data = null;
+
+ /**
+ * The template to load for displaying capability details.
+ */
+ ctrl.detailsTemplate = 'testapi-ui/components/guidelines/partials/' +
+ 'guidelineDetails.html';
+
+ /**
+ * Retrieve an array of available guideline files from the TestAPI
+ * API server, sort this array reverse-alphabetically, and store it in
+ * a scoped variable. The scope's selected version is initialized to
+ * the latest (i.e. first) version here as well. After a successful API
+ * call, the function to update the capabilities is called.
+ * Sample API return array: ["2015.03.json", "2015.04.json"]
+ */
+ function getVersionList() {
+ ctrl.versionList = ['danube'];
+ ctrl.update();
+ }
+
+ /**
+ * This will contact the TestAPI API server to retrieve the JSON
+ * content of the guideline file corresponding to the selected
+ * version.
+ */
+ function update() {
+ if (ctrl.version != ''){
+ var path = 'testapi-ui/components/guidelines/data/' + ctrl.version + '.json';
+ $http.get(path).success(function(data){
+ ctrl.data = data;
+ }).error(function(error){
+ });
+ }
+ }
+
+
+ ctrl.getVersionList();
+ }
+
+
+
+
+
+ angular
+ .module('testapiApp')
+ .controller('TestListModalController', TestListModalController);
+
+ TestListModalController.$inject = [
+ '$uibModalInstance', '$http', 'version',
+ 'target', 'status', 'testapiApiUrl'
+ ];
+
+ /**
+ * Test List Modal Controller
+ * This controller is for the modal that appears if a user wants to see the
+ * test list corresponding to Interop WG capabilities with the selected
+ * statuses.
+ */
+ function TestListModalController($uibModalInstance, $http, version,
+ target, status, testapiApiUrl) {
+
+ var ctrl = this;
+
+ ctrl.version = version;
+ ctrl.target = target;
+ ctrl.status = status;
+ ctrl.close = close;
+ ctrl.updateTestListString = updateTestListString;
+
+ ctrl.aliases = true;
+ ctrl.flagged = false;
+
+ // Check if the API URL is absolute or relative.
+ if (testapiApiUrl.indexOf('http') > -1) {
+ ctrl.url = testapiApiUrl;
+ }
+ else {
+ ctrl.url = location.protocol + '//' + location.host +
+ testapiApiUrl;
+ }
+
+ /**
+ * This function will close/dismiss the modal.
+ */
+ function close() {
+ $uibModalInstance.dismiss('exit');
+ }
+
+ /**
+ * This function will return a list of statuses based on which ones
+ * are selected.
+ */
+ function getStatusList() {
+ var statusList = [];
+ angular.forEach(ctrl.status, function(value, key) {
+ if (value) {
+ statusList.push(key);
+ }
+ });
+ return statusList;
+ }
+
+ /**
+ * This will get the list of tests from the API and update the
+ * controller's test list string variable.
+ */
+ function updateTestListString() {
+ var statuses = getStatusList();
+ if (!statuses.length) {
+ ctrl.error = 'No tests matching selected criteria.';
+ return;
+ }
+ ctrl.testListUrl = [
+ ctrl.url, '/guidelines/', ctrl.version, '/tests?',
+ 'target=', ctrl.target, '&',
+ 'type=', statuses.join(','), '&',
+ 'alias=', ctrl.aliases.toString(), '&',
+ 'flag=', ctrl.flagged.toString()
+ ].join('');
+ ctrl.testListRequest =
+ $http.get(ctrl.testListUrl).
+ then(function successCallback(response) {
+ ctrl.error = null;
+ ctrl.testListString = response.data;
+ if (!ctrl.testListString) {
+ ctrl.testListCount = 0;
+ }
+ else {
+ ctrl.testListCount =
+ ctrl.testListString.split('\n').length;
+ }
+ }, function errorCallback(response) {
+ ctrl.testListString = null;
+ ctrl.testListCount = null;
+ if (angular.isObject(response.data) &&
+ response.data.message) {
+ ctrl.error = 'Error retrieving test list: ' +
+ response.data.message;
+ }
+ else {
+ ctrl.error = 'Unknown error retrieving test list.';
+ }
+ });
+ }
+
+ // updateTestListString();
+ //getVersionList();
+ update();
+ }
+})();
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html b/cvp/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
new file mode 100644
index 00000000..05a1ef5c
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
@@ -0,0 +1,90 @@
+<!--
+HTML for guidelines page for all OpenStack Powered (TM) guideline schemas
+This expects the JSON data of the guidelines file to be stored in scope
+variable 'guidelines'.
+-->
+
+<h3 ng-show="ctrl.showMandatory">{{ctrl.data.mandatory.name}}</h3>
+<div ng-repeat="area in ctrl.data.mandatory.value" ng-show="ctrl.showMandatory">
+ <h4>{{area.area_name}}</h4>
+ <ol class="capabilities">
+ <li class="capability-list-item" ng-repeat="api in area.value">
+ <span class="capability-name">{{api.api_name}}</span><br />
+ Area: <em>{{area.area_name}}</em><br />
+ Status: <span>Mandatory</span><br />
+
+ <a ng-click="showTests = !showTests">Tests ({{api.value.length}})</a>
+ <ul uib-collapse="!showTests">
+ <li ng-repeat="test in api.value">
+ <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
+ {{test}}
+ </li>
+ </ul>
+ </li>
+ </ol>
+</div>
+
+<h3 ng-show="ctrl.showOptional">{{ctrl.data.optional.name}}</h3>
+<div ng-repeat="area in ctrl.data.optional.value" ng-show="ctrl.showOptional">
+ <h4>{{area.area_name}}</h4>
+ <ol class="capabilities">
+ <li class="capability-list-item" ng-repeat="api in area.value">
+ <span class="capability-name">{{api.api_name}}</span><br />
+ Status: <span>Optional</span><br />
+
+ <a ng-click="showTests = !showTests">Tests ({{api.value.length}})</a>
+ <ul uib-collapse="!showTests">
+ <li ng-repeat="test in api.value">
+ <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
+ {{test}}
+ </li>
+ </ul>
+ </li>
+ </ol>
+</div>
+<!--
+<ol ng-show="ctrl.data" class="capabilities">
+ <li class="capability-list-item" ng-repeat="capability in ctrl.guidelines.capabilities | arrayConverter | filter:ctrl.filterStatus | orderBy:'id'">
+ <span class="capability-name">{{capability.id}}</span><br />
+ <em>{{capability.description}}</em><br />
+ Status: <span class="{{ctrl.targetCapabilities[capability.id]}}">{{ctrl.targetCapabilities[capability.id]}}</span><br />
+ <span ng-if="capability.project">Project: {{capability.project | capitalize}}<br /></span>
+ <a ng-click="showAchievements = !showAchievements">Achievements ({{capability.achievements.length}})</a><br />
+ <ol uib-collapse="!showAchievements" class="list-inline">
+ <li ng-repeat="achievement in capability.achievements">
+ {{achievement}}
+ </li>
+ </ol>
+
+ <a ng-click="showTests = !showTests">Tests ({{ctrl.getObjectLength(capability.tests)}})</a>
+ <ul uib-collapse="!showTests">
+ <li ng-if="ctrl.guidelines.schema === '1.2'" ng-repeat="test in capability.tests">
+ <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
+ {{test}}
+ </li>
+ <li ng-if="ctrl.guidelines.schema > '1.2'" ng-repeat="(testName, testDetails) in capability.tests">
+ <span ng-class="{'glyphicon glyphicon-flag text-warning': testDetails.flagged}" title="{{testDetails.flagged.reason}}"></span>
+ {{testName}}
+ <div class="test-detail" ng-if="testDetails.aliases">
+ <strong>Aliases:</strong>
+ <ul><li ng-repeat="alias in testDetails.aliases">{{alias}}</li></ul>
+ </div>
+ </li>
+ </ul>
+ </li>
+</ol>
+
+<div ng-show="ctrl.guidelines" class="criteria">
+ <hr>
+ <h4><a ng-click="showCriteria = !showCriteria">Criteria</a></h4>
+ <div uib-collapse="showCriteria">
+ <ul>
+ <li ng-repeat="(key, criterion) in ctrl.guidelines.criteria">
+ <span class="criterion-name">{{criterion.name}}</span><br />
+ <em>{{criterion.Description}}</em><br />
+ Weight: {{criterion.weight}}
+ </li>
+ </ul>
+ </div>
+</div>
+-->
diff --git a/cvp/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html b/cvp/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
new file mode 100644
index 00000000..5b1d698d
--- /dev/null
+++ b/cvp/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
@@ -0,0 +1,46 @@
+<div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" aria-hidden="true" ng-click="modal.close()">&times;</button>
+ <h4>Test List ({{modal.testListCount}})</h4>
+ <p>Use this test list with <a title="testapi-client" target="_blank"href="https://github.com/openstack/testapi-client">testapi-client</a>
+ to run only tests in the {{modal.version}} OpenStack Powered&#8482; guideline from capabilities with the following statuses:
+ </p>
+ <ul class="list-inline">
+ <li class="required" ng-if="modal.status.required"> Required</li>
+ <li class="advisory" ng-if="modal.status.advisory"> Advisory</li>
+ <li class="deprecated" ng-if="modal.status.deprecated"> Deprecated</li>
+ <li class="removed" ng-if="modal.status.removed"> Removed</li>
+ </ul>
+ <div class="checkbox checkbox-test-list">
+ <label><input type="checkbox" ng-model="modal.aliases" ng-change="modal.updateTestListString()">Aliases</label>
+ <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true"
+ title="Include test aliases as tests may have been renamed over time. It does not hurt to include these."></span>
+ &nbsp;
+ <label><input type="checkbox" ng-model="modal.flagged" ng-change="modal.updateTestListString()">Flagged</label>
+ <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true"
+ title="Include flagged tests.">
+ </span>
+ </div>
+ <p ng-hide="modal.error"> Alternatively, get the test list directly from the API on your CLI:</p>
+ <code ng-hide="modal.error">wget "{{modal.testListUrl}}" -O {{modal.version}}-test-list.txt</code>
+ </div>
+ <div class="modal-body tests-modal-content">
+ <div cg-busy="{promise:modal.testListRequest,message:'Loading'}"></div>
+ <div ng-show="modal.error" class="alert alert-danger" role="alert">
+ <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+ <span class="sr-only">Error:</span>
+ {{modal.error}}
+ </div>
+ <div class="form-group">
+ <textarea class="form-control" rows="16" id="tests" wrap="off">{{modal.testListString}}</textarea>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <a target="_blank" href="{{modal.testListUrl}}" download="{{modal.version + '-test-list.txt'}}">
+ <button class="btn btn-primary" ng-if="modal.testListCount > 0" type="button">
+ Download
+ </button>
+ </a>
+ <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ </div>
+</div>