summaryrefslogtreecommitdiffstats
path: root/3rd_party/static/testapi-ui/components/guidelines
diff options
context:
space:
mode:
authorxudan <xudan16@huawei.com>2018-07-06 05:16:40 -0400
committerxudan <xudan16@huawei.com>2018-07-06 05:21:42 -0400
commitb3e40f026d655501bfa581452c447784604ecb05 (patch)
tree406f8bfc1abc1b33f98153d03abd34ef7b0e2fe9 /3rd_party/static/testapi-ui/components/guidelines
parentb1b0ea32d1a296c7d055c5391261dcad6be48c63 (diff)
Move all web portal code to the new repo dovetail-webportal
This is only the first step to simply copy the file here. There still need some more work to make sure all work well. All the changes will be submitted with other patches to make it easily to review. JIRA: DOVETAIL-671 Change-Id: I64d32a9df562184166b6199e2719f298687d1a0a Signed-off-by: xudan <xudan16@huawei.com>
Diffstat (limited to '3rd_party/static/testapi-ui/components/guidelines')
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/data/danube.json590
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/data/gen.py16
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json248
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/guidelines.html70
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js188
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html90
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html46
7 files changed, 1248 insertions, 0 deletions
diff --git a/3rd_party/static/testapi-ui/components/guidelines/data/danube.json b/3rd_party/static/testapi-ui/components/guidelines/data/danube.json
new file mode 100644
index 0000000..99613b7
--- /dev/null
+++ b/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/3rd_party/static/testapi-ui/components/guidelines/data/gen.py b/3rd_party/static/testapi-ui/components/guidelines/data/gen.py
new file mode 100644
index 0000000..34fb694
--- /dev/null
+++ b/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/3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json b/3rd_party/static/testapi-ui/components/guidelines/data/mandatory.json
new file mode 100644
index 0000000..ce2ba85
--- /dev/null
+++ b/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/3rd_party/static/testapi-ui/components/guidelines/guidelines.html b/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
new file mode 100644
index 0000000..6e138b8
--- /dev/null
+++ b/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/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js b/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js
new file mode 100644
index 0000000..46d2042
--- /dev/null
+++ b/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/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html b/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
new file mode 100644
index 0000000..05a1ef5
--- /dev/null
+++ b/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/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html b/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
new file mode 100644
index 0000000..5b1d698
--- /dev/null
+++ b/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>