# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
#
# Author: Christian Schwede <christian.schwede@enovance.com>
#
# 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.
# mapping of tests to openstack versions

name_mapping = {
    5: 'Essex (or later)',
    6: 'Folsom (or later)',
    7: 'Grizzly (or later)',
    8: 'Havana (or later)',
    9: 'Icehouse (or later)',
}

service_names = {
    'tempest.api.object_storage': 'Object Storage (Swift)',
    'tempest.api.compute': 'Compute (Nova)',
    'tempest.api.image': 'Image (Cinder)',
    'tempest.api.network': 'Network (Neutron)',
    'tempest.api.orchestration': 'Orchestration (Heat)',
    'tempest.scenario': 'Scenario',
    'tempest.scenario.test_dashboard_basic_ops': 'Dashboard (Horizon)',
    'tempest.cli.simple_read_only.test_cinder': 'Image (Cinder)',
    'tempest.cli.simple_read_only.test_glance': 'Volume (Glance)',
    'tempest.cli.simple_read_only.test_keystone': 'Identity (Keystone)',
    'tempest.cli.simple_read_only.test_neutron': 'Network (Neutron)',
    'tempest.cli.simple_read_only.test_nova': 'Compute (Nova)',
    'tempest.cli.simple_read_only.test_nova_manage': 'Compute (Nova)',
    'tempest_report.tempest_addons:CeilometerTest': 'Metering (Ceilometer)',
    'tempest_report.tempest_addons:NeutronExtensionTest': 'Network (Neutron)',
    'tempest_report.tempest_addons:NovaExtensionTest': 'Compute (Nova)',
    'tempest_report.tempest_addons:CinderExtensionTest': 'Image (Cinder)',
    'nova-extension': 'Compute (Nova)',
    'cinder-extension': 'Image (Cinder)',
    'neutron-extension': 'Network (Neutron)',
    'ceilometer-meter': 'Metering (Ceilometer)',
    'keystone-extension': 'Identity (Keystone)',
    'tempest_report.tempest_addons:Glance': 'Volume (Glance)',
    'tempest_report.tempest_addons:Glance': 'Volume (Glance)',
}

description_list = {
    # Levels:
    # 1: feature & extension discovery
    # 2: scenario tests
    # 3: all tempest tests that don't require an admin account

    # Level 1 (default): service/extension discovery, used to make an educated guess about OpenStack release
    'tempest.cli.simple_read_only.test_glance:SimpleReadOnlyGlanceClientTest.test_glance_image_list': {},

    'tempest_report.tempest_addons:NovaExtensionTest': {},
    'tempest_report.tempest_addons:CinderExtensionTest': {},
    'tempest_report.tempest_addons:NeutronExtensionTest': {},
    'tempest_report.tempest_addons:CeilometerTest': {},
    'tempest_report.tempest_addons:KeystoneExtensionTest': {},
    
    # Horizon login - quick scenario (login)
    'tempest.scenario.test_dashboard_basic_ops': {'feature': 'Login'},

    # Swift
    'tempest.api.object_storage.test_container_quotas': {'feature': 'Container Quota', 'release': 7, },
    'tempest.api.object_storage.test_object_version': {'feature': 'Object versioning', 'release': 6, },
    'tempest.api.object_storage.test_object_temp_url:ObjectTempUrlTest.test_get_object_using_temp_url': {
        'feature': 'Temporary object URL', 'release': 5},
    'tempest.api.object_storage.test_container_staticweb': {'feature': 'Static Web'},
    'tempest.api.object_storage.test_container_sync': {'feature': 'Container sync'},
    'tempest.api.object_storage.test_object_expiry': {'feature': 'Object expiring'},

    'tempest_report.tempest_addons:GlanceV1Test': {'feature': 'V1 Api', },
    'tempest_report.tempest_addons:GlanceV2Test': {'feature': 'V2 Api', 'release': 6},

    # List of extensions

    'nova-extension-NMN': {'feature': 'Multinic', 'release': 6, 'dummy': True},
    'nova-extension-os-admin-actions': {'feature': 'Admin Actions', 'release': 6, 'dummy': True},
    'nova-extension-os-agents': {'feature': 'Agents', 'release': 7, 'dummy': True},
    'nova-extension-os-aggregates': {'feature': 'Aggregates', 'release': 6, 'dummy': True},
    'nova-extension-os-assisted-volume-snapshots': {'feature': 'Assisted Volume Snapshots', 'release': 8, 'dummy': True},
    'nova-extension-os-attach-interfaces': {'feature': 'Attach Interfaces', 'release': 7, 'dummy': True},
    'nova-extension-os-availability-zone': {'feature': 'Availability Zone', 'release': 6, 'dummy': True},
    'nova-extension-os-baremetal-nodes': {'feature': 'Bare Metal Nodes', 'release': 7, 'dummy': True},
    'nova-extension-os-block-device-mapping-v2-boot': {'feature': 'Block Device Mapping V2 Boot', 'release': 8, 'dummy': True},
    'nova-extension-os-cell-capacities': {'feature': 'Cell Capacities', 'release': 8, 'dummy': True},
    'nova-extension-os-cells': {'feature': 'Cells', 'release': 7, 'dummy': True},
    'nova-extension-os-certificates': {'feature': 'Certificates', 'release': 6, 'dummy': True},
    'nova-extension-os-cloudpipe': {'feature': 'Cloudpipe', 'release': 6, 'dummy': True},
    'nova-extension-os-cloudpipe-update': {'feature': 'Cloudpipe Update', 'release': 7, 'dummy': True},
    'nova-extension-os-config-drive': {'feature': 'Config Drive', 'release': 6, 'dummy': True},
    'nova-extension-os-console-output': {'feature': 'Console Output', 'release': 6, 'dummy': True},
    'nova-extension-os-consoles': {'feature': 'Consoles', 'release': 6, 'dummy': True},
    'nova-extension-os-coverage': {'feature': 'Coverage', 'release': 7, 'dummy': True},
    'nova-extension-os-create-server-ext': {'feature': 'Createserverext', 'release': 6, 'dummy': True},
    'nova-extension-OS-DCF': {'feature': 'Disk Config', 'release': 6, 'dummy': True},
    'nova-extension-os-deferred-delete': {'feature': 'Deferred Delete', 'release': 6, 'dummy': True},
    'nova-extension-os-evacuate': {'feature': 'Evacuate', 'release': 7, 'dummy': True},
    'nova-extension-OS-EXT-AZ': {'feature': 'Extended Availability Zone', 'release': 7, 'dummy': True},
    'nova-extension-os-extended-floating-ips': {'feature': 'Extended Floating Ips', 'release': 8, 'dummy': True},
    'nova-extension-os-extended-quotas': {'feature': 'Extended Quotas', 'release': 8, 'dummy': True},
    'nova-extension-os-extended-services': {'feature': 'Extended Services', 'release': 8, 'dummy': True},
    'nova-extension-os-extended-volumes': {'feature': 'Extended Volumes', 'release': 8, 'dummy': True},
    'nova-extension-OS-EXT-IMG-SIZE': {'feature': 'Image Size', 'release': 7, 'dummy': True},
    'nova-extension-OS-EXT-IPS': {'feature': 'Extended Ips', 'release': 7, 'dummy': True},
    'nova-extension-OS-EXT-IPS-MAC': {'feature': 'Extended Ips Mac', 'release': 8, 'dummy': True},
    'nova-extension-OS-EXT-SRV-ATTR': {'feature': 'Extended Server Attributes', 'release': 6, 'dummy': True},
    'nova-extension-OS-EXT-STS': {'feature': 'Extended Status', 'release': 6, 'dummy': True},
    'nova-extension-OS-EXT-VIF-NET': {'feature': 'Extended VIF Net', 'release': 8, 'dummy': True},
    'nova-extension-os-fixed-ips': {'feature': 'Fixed I Ps', 'release': 7, 'dummy': True},
    'nova-extension-os-flavor-access': {'feature': 'Flavor Access', 'release': 6, 'dummy': True},
    'nova-extension-os-flavor-extra-specs': {'feature': 'Flavor Extra Specs', 'release': 6, 'dummy': True},
    'nova-extension-os-flavor-manage': {'feature': 'Flavor Manage', 'release': 6, 'dummy': True},
    'nova-extension-os-flavor-rxtx': {'feature': 'Flavor Rxtx', 'release': 6, 'dummy': True},
    'nova-extension-os-flavor-swap': {'feature': 'Flavor Swap', 'release': 6, 'dummy': True},
    'nova-extension-os-floating-ip-dns': {'feature': 'Floating Ip Dns', 'release': 6, 'dummy': True},
    'nova-extension-os-floating-ip-pools': {'feature': 'Floating Ip Pools', 'release': 6, 'dummy': True},
    'nova-extension-os-floating-ips-bulk': {'feature': 'Floating Ips Bulk', 'release': 7, 'dummy': True},
    'nova-extension-os-floating-ips': {'feature': 'Floating Ips', 'release': 6, 'dummy': True},
    'nova-extension-OS-FLV-DISABLED': {'feature': 'Flavor Disabled', 'release': 6, 'dummy': True},
    'nova-extension-OS-FLV-EXT-DATA': {'feature': 'Flavor Extra Data', 'release': 6, 'dummy': True},
    'nova-extension-os-fping': {'feature': 'Fping', 'release': 7, 'dummy': True},
    'nova-extension-os-hide-server-addresses': {'feature': 'Hide Server Addresses', 'release': 7, 'dummy': True},
    'nova-extension-os-hosts': {'feature': 'Hosts', 'release': 6, 'dummy': True},
    'nova-extension-os-hypervisors': {'feature': 'Hypervisors', 'release': 6, 'dummy': True},
    'nova-extension-os-instance-actions': {'feature': 'Instance Actions', 'release': 7, 'dummy': True},
    'nova-extension-os-instance_usage_audit_log': {'feature': 'OS Instance Usage Audit Log', 'release': 6, 'dummy': True},
    'nova-extension-os-keypairs': {'feature': 'Keypairs', 'release': 6, 'dummy': True},
    'nova-extension-os-migrations': {'feature': 'Migrations', 'release': 8, 'dummy': True},
    'nova-extension-os-multiple-create': {'feature': 'Multiple Create', 'release': 6, 'dummy': True},
    'nova-extension-os-networks-associate': {'feature': 'Network Association Support', 'release': 7, 'dummy': True},
    'nova-extension-os-networks': {'feature': 'Networks', 'release': 6, 'dummy': True},
    'nova-extension-os-quota-class-sets': {'feature': 'Quota Classes', 'release': 6, 'dummy': True},
    'nova-extension-os-quota-sets': {'feature': 'Quotas', 'release': 6, 'dummy': True},
    'nova-extension-os-rescue': {'feature': 'Rescue', 'release': 6, 'dummy': True},
    'nova-extension-OS-SCH-HNT': {'feature': 'Scheduler Hints', 'release': 6, 'dummy': True},
    'nova-extension-os-security-group-default-rules': {'feature': 'Security Group Default Rules', 'release': 7, 'dummy': True},
    'nova-extension-os-security-groups': {'feature': 'Security Groups', 'release': 6, 'dummy': True},
    'nova-extension-os-server-diagnostics': {'feature': 'Server Diagnostics', 'release': 6, 'dummy': True},
    'nova-extension-os-server-password': {'feature': 'Server Password', 'release': 7, 'dummy': True},
    'nova-extension-os-server-start-stop': {'feature': 'Server Start Stop', 'release': 6, 'dummy': True},
    'nova-extension-os-services': {'feature': 'Services', 'release': 7, 'dummy': True},
    'nova-extension-os-shelve': {'feature': 'Shelve', 'release': 8, 'dummy': True},
    'nova-extension-os-simple-tenant-usage': {'feature': 'Simple Tenant Usage', 'release': 6, 'dummy': True},
    'nova-extension-OS-SRV-USG': {'feature': 'Server Usage', 'release': 8, 'dummy': True},
    'nova-extension-os-tenant-networks': {'feature': 'OS Tenant Networks', 'release': 7, 'dummy': True},
    'nova-extension-os-used-limits': {'feature': 'Used Limits', 'release': 6, 'dummy': True},
    'nova-extension-os-used-limits-for-admin': {'feature': 'Used Limits For Admin', 'release': 8, 'dummy': True},
    'nova-extension-os-user-data': {'feature': 'User Data', 'release': 6, 'dummy': True},
    'nova-extension-os-user-quotas': {'feature': 'User Quotas', 'release': 8, 'dummy': True},
    'nova-extension-os-virtual-interfaces': {'feature': 'Virtual Interfaces', 'release': 6, 'dummy': True},
    'nova-extension-os-volume-attachment-update': {'feature': 'Volume Attachment Update', 'release': 8, 'dummy': True},
    'nova-extension-os-volumes': {'feature': 'Volumes', 'release': 6, 'dummy': True},
    'nova-extension-os-volume-types': {'feature': 'Volume Types', 'release': 6, 'dummy': True},
    
    'cinder-extension-os-admin-actions': {'feature': 'Enable admin actions', 'release': 6, 'dummy': True},
    'cinder-extension-os-availability-zone': {'feature': 'Describe Availability Zones', 'release': 8, 'dummy': True},
    'cinder-extension-backups': {'feature': 'Backups support', 'release': 7, 'dummy': True},
    'cinder-extension-os-image-create': {'feature': 'Create volume from an image in V1 API', 'release': 6, 'dummy': True},
    'cinder-extension-os-extended-snapshot-attributes': {'feature': 'Extended SnapshotAttributes support', 'release': 6, 'dummy': True},
    'cinder-extension-os-hosts': {'feature': 'Admin-only host administration', 'release': 7, 'dummy': True},
    'cinder-extension-qos-specs': {'feature': 'QoS specs support', 'release': 8, 'dummy': True},
    'cinder-extension-os-quota-class-sets': {'feature': 'Quota classes management support', 'release': 6, 'dummy': True},
    'cinder-extension-os-quota-sets': {'feature': 'Quotas management support', 'release':6, 'dummy': True},
    'cinder-extension-OS-SCH-HNT': {'feature': 'Pass arbitrary key/value pairs to the scheduler', 'dummy': True},
    'cinder-extension-os-services': {'feature': 'Services support', 'release': 7, 'dummy': True},
    'cinder-extension-os-snapshot-actions': {'feature': 'Enable snapshot manager actions', 'release': 8, 'dummy': True},
    'cinder-extension-os-types-extra-specs': {'feature': 'Types extra specs support', 'release': 6, 'dummy': True},
    'cinder-extension-os-types-manage': {'feature': 'Types manage support', 'release': 6, 'dummy': True},
    'cinder-extension-os-vol-image-meta': {'feature': 'Volume image metadata support', 'release': 7, 'dummy': True},
    'cinder-extension-os-vol-mig-status-attr': {'feature': 'Expose migration status as attribute', 'release': 8, 'dummy': True},
    'cinder-extension-os-volume-actions': {'feature': 'Volume actions', 'release': 6, 'dummy': True},
    'cinder-extension-os-volume-transfer': {'feature': 'Volume transfer management support', 'release': 8, 'dummy': True},
    'cinder-extension-encryption': {'feature': 'Volume encryption', 'release': 8, 'dummy': True},

    'neutron-extension-security-group': {'feature': 'security-group', 'release': 7, 'dummy': True},
    'neutron-extension-l3-agent-scheduler': {'feature': 'L3 Agent Scheduler', 'release': 6, 'dummy': True},
    'neutron-extension-ext-gw-mode': {'feature': 'Neutron L3 Configurable external gateway mode', 'release': 8, 'dummy': True},
    'neutron-extension-binding': {'feature': 'Port Binding', 'release': 7, 'dummy': True},
    'neutron-extension-quotas': {'feature': 'Quota management support', 'release': 6, 'dummy': True},
    'neutron-extension-agent': {'feature': 'Agent management extension',  'dummy': True},
    'neutron-extension-dhcp-agent-scheduler': {'feature': 'DHCP Agent Scheduler', 'release': 8, 'dummy': True},
    'neutron-extension-multi-provider': {'feature': 'Multi Provider Network', 'release': 6, 'dummy': True},
    'neutron-extension-external-net': {'feature': 'Neutron external network', 'release': 8, 'dummy': True},
    'neutron-extension-router': {'feature': 'Neutron L3 Router', 'release': 6, 'dummy': True},
    'neutron-extension-allowed-address-pairs': {'feature': 'Allowed Address Pairs', 'release': 8, 'dummy': True},
    'neutron-extension-extra-dhcp-opt': {'feature': 'Neutron Extra DHCP opts', 'release': 8, 'dummy': True},
    'neutron-extension-provider': {'feature': 'Provider Network', 'release': 6, 'dummy': True},
    'neutron-extension-extraroute': {'feature': 'Neutron Extra Route', 'release': 7, 'dummy': True},

    'ceilometer-meter-storage.api.request': {'feature': 'Disk Usage', 'release': 0, 'dummy': True},
    'ceilometer-meter-storage.objects': {'feature': 'Object Store Usage', 'release': 0, 'dummy': True},
    'ceilometer-meter-network': {'feature': 'Network usage', 'release': 0, 'dummy': True},
    'ceilometer-meter-subnet': {'feature': 'Network usage', 'release': 0, 'dummy': True},
    'ceilometer-meter-router': {'feature': 'Network usage', 'release': 0, 'dummy': True},
    'ceilometer-meter-cpu': {'feature': 'CPU', 'release': 0, 'dummy': True},
    'ceilometer-meter-image': {'feature': 'Image', 'release': 0, 'dummy': True},
    'ceilometer-meter-instance': {'feature': 'Instance', 'release': 0, 'dummy': True},
    'ceilometer-meter-memory': {'feature': 'Memory', 'release': 0, 'dummy': True},
    'ceilometer-meter-vcpus': {'feature': 'VCPUs', 'release': 0, 'dummy': True},
    'ceilometer-meter-volume': {'feature': 'Volume', 'release': 0, 'dummy': True},
    
    'keystone-extension-s3tokens': {'feature': 'OpenStack S3 API', 'dummy': True},
    'keystone-extension-OS-EC2': {'feature': 'OpenStack EC2 API', 'dummy': True},
    'keystone-extension-OS-KSCRUD': {'feature': 'OpenStack Keystone User CRUD', 'dummy': True},
    'keystone-extension-OS-KSADM': {'feature': 'OpenStack Keystone Admin Extension API', 'dummy': True},

    # Level 2: Scenario tests
    'tempest.scenario.test_large_ops': {'level': 2, 'feature': 'Large Operation Scenario (Nova & Glance)', },
    'tempest.scenario.test_server_advanced_ops': {'level': 2, 'feature': 'Resize & Suspend (Nova)'},
    'tempest.scenario.test_minimum_basic': {'level': 2, 'feature': 'Minimum Scenario (Nova, Glance, Conder)', },
    'tempest.scenario.test_network_basic_ops': {'level': 2, 'feature': 'Network (Nova & Neutron)'},

    # auto-generated list of possible successful tests
    'tempest.api.compute.flavors.test_flavors': {'level': 3},
    'tempest.api.compute.floating_ips.test_list_floating_ips': {'level': 3},
    'tempest.api.compute.images.test_image_metadata': {'level': 3},
    'tempest.api.compute.images.test_images_oneserver': {'level': 3},
    'tempest.api.compute.images.test_list_images': {'level': 3},
    'tempest.api.compute.floating_ips.test_floating_ips_actions': {'level': 3},
    'tempest.api.compute.limits.test_absolute_limits': {'level': 3},
    'tempest.api.compute.keypairs.test_keypairs': {'level': 3},
    'tempest.api.compute.security_groups.test_security_group_rules': {'level': 3},
    'tempest.api.compute.images.test_images': {'level': 3},
    'tempest.api.compute.security_groups.test_security_groups': {'level': 3},
    'tempest.api.compute.images.test_list_image_filters': {'level': 3},
    'tempest.api.compute.servers.test_create_server': {'level': 3},
    'tempest.api.compute.servers.test_attach_interfaces': {'level': 3},
    'tempest.api.compute.servers.test_instance_actions': {'level': 3},
    'tempest.api.compute.servers.test_multiple_create': {'level': 3},
    'tempest.api.compute.servers.test_disk_config': {'level': 3},
    'tempest.api.compute.servers.test_server_personality': {'level': 3},
    'tempest.api.compute.servers.test_server_addresses': {'level': 3},
    'tempest.api.compute.servers.test_server_actions': {'level': 3},
    'tempest.api.compute.test_auth_token': {'level': 3},
    'tempest.api.compute.test_authorization': {'level': 3},
    'tempest.api.compute.test_extensions': {'level': 3},
    'tempest.api.compute.servers.test_virtual_interfaces': {'level': 3},
    'tempest.api.compute.volumes.test_attach_volume': {'level': 3},
    'tempest.api.compute.volumes.test_volumes_get': {'level': 3},
    'tempest.api.compute.volumes.test_volumes_list': {'level': 3},
    'tempest.api.compute.volumes.test_volumes_negative': {'level': 3},
    'tempest.api.compute.servers.test_servers': {'level': 3},
    'tempest.api.image.v2.test_images_tags': {'level': 3},
    'tempest.api.image.v2.test_images_tags_negative': {'level': 3},
    'tempest.api.network.test_extensions': {'level': 3},
    'tempest.api.image.v2.test_images': {'level': 3},
    'tempest.api.image.v1.test_images': {'level': 3},
    'tempest.api.network.test_security_groups': {'level': 3},
    'tempest.api.network.test_networks': {'level': 3},
    'tempest.api.network.test_security_groups_negative': {'level': 3},
    'tempest.api.network.test_vpnaas_extensions': {'level': 3},
    'tempest.api.object_storage.test_container_services': {'level': 3},
    'tempest.api.orchestration.stacks.test_limits': {'level': 3},
    'tempest.api.orchestration.stacks.test_neutron_resources': {'level': 3},
    'tempest.api.orchestration.stacks.test_non_empty_stack': {'level': 3},
    'tempest.api.orchestration.stacks.test_stacks': {'level': 3},
    'tempest.api.orchestration.stacks.test_server_cfn_init': {'level': 3},
    'tempest.api.orchestration.stacks.test_templates': {'level': 3},
    'tempest.cli.simple_read_only.test_glance': {'level': 3},
    'tempest.scenario.orchestration.test_autoscaling': {'level': 3},
    'tempest.cli.simple_read_only.test_nova_manage': {'level': 3},
    'tempest.scenario.test_stamp_pattern': {'level': 3},
    'tempest.scenario.test_network_quotas': {'level': 3},
    'tempest.thirdparty.boto.test_ec2_instance_run': {'level': 3},
    'tempest.thirdparty.boto.test_ec2_network': {'level': 3},
    'tempest.thirdparty.boto.test_ec2_keys': {'level': 3},
    'tempest.thirdparty.boto.test_ec2_security_groups': {'level': 3},
    'tempest.thirdparty.boto.test_s3_buckets': {'level': 3},
    'tempest.thirdparty.boto.test_s3_ec2_images': {'level': 3},
    'tempest.thirdparty.boto.test_ec2_volumes': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_name': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestJSON.test_list_servers_detailed_limit_results': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestJSON.test_list_servers_filter_by_limit': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestJSON.test_list_servers_filter_by_server_name': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestJSON.test_list_servers_filter_by_server_status': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestJSON.test_list_servers_filtered_by_name_wildcard': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestXML.test_list_servers_detailed_filter_by_server_name': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestXML.test_list_servers_detailed_limit_results': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestXML.test_list_servers_filter_by_limit': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestXML.test_list_servers_filter_by_server_name': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestXML.test_list_servers_filter_by_server_status': {'level': 3},
    'tempest.api.compute.servers.test_list_server_filters:ListServerFiltersTestXML.test_list_servers_filtered_by_name_wildcard': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_numeric_server_name': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_server_metadata_exceeds_length_limit': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_server_name_length_exceeds_256': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_with_invalid_flavor': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_with_invalid_image': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_with_invalid_network_uuid': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_with_non_existant_keypair': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_create_with_nonexistent_security_group': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_delete_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_delete_server_pass_id_exceeding_length_limit': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_delete_server_pass_negative_id': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_get_console_output_of_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_get_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_invalid_access_ip_v4_address': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_invalid_ip_v6_address': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_pause_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_pause_paused_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_personality_file_contents_not_encoded': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_reboot_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_rebuild_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_rebuild_reboot_deleted_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_resize_server_with_non_existent_flavor': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_resize_server_with_null_flavor': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_resume_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_resume_server_invalid_state': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_server_name_blank': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_stop_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_suspend_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_suspend_server_invalid_state': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_unpause_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_unpause_server_invalid_state': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_update_name_of_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_update_server_name_length_exceeds_256': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestJSON.test_update_server_set_empty_name': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_server_metadata_exceeds_length_limit': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_server_name_length_exceeds_256': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_with_invalid_flavor': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_with_invalid_image': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_with_invalid_network_uuid': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_with_non_existant_keypair': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_create_with_nonexistent_security_group': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_delete_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_delete_server_pass_id_exceeding_length_limit': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_delete_server_pass_negative_id': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_get_console_output_of_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_get_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_invalid_access_ip_v4_address': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_invalid_ip_v6_address': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_pause_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_pause_paused_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_personality_file_contents_not_encoded': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_reboot_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_rebuild_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_rebuild_reboot_deleted_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_resize_server_with_non_existent_flavor': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_resize_server_with_null_flavor': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_resume_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_resume_server_invalid_state': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_server_name_blank': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_stop_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_suspend_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_suspend_server_invalid_state': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_unpause_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_unpause_server_invalid_state': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_update_name_of_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_update_server_name_length_exceeds_256': {'level': 3},
    'tempest.api.compute.servers.test_servers_negative:ServersNegativeTestXML.test_update_server_set_empty_name': {'level': 3},
    'tempest.api.network.test_routers:RoutersTest.test_add_remove_router_interface_with_port_id': {'level': 3},
    'tempest.api.network.test_routers:RoutersTest.test_add_remove_router_interface_with_subnet_id': {'level': 3},
    'tempest.api.object_storage.test_account_services:AccountTest.test_create_and_delete_account_metadata': {'level': 3},
    'tempest.api.object_storage.test_account_services:AccountTest.test_list_account_metadata': {'level': 3},
    'tempest.api.object_storage.test_account_services:AccountTest.test_list_containers': {'level': 3},
    'tempest.api.object_storage.test_account_services:AccountTest.test_list_containers_with_limit': {'level': 3},
    'tempest.api.object_storage.test_account_services:AccountTest.test_list_containers_with_limit_and_marker': {'level': 3},
    'tempest.api.object_storage.test_account_services:AccountTest.test_list_containers_with_marker': {'level': 3},
    'tempest.api.object_storage.test_object_services:PublicObjectTest.test_access_public_container_object_without_using_creds': {'level': 3},
    'tempest.api.object_storage.test_object_services:PublicObjectTest.test_access_public_object_with_another_user_creds': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_bashcompletion': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_catalog_list': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_debug_list': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_discover': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_fake_action': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_help': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_timeout': {'level': 3},
    'tempest.cli.simple_read_only.test_keystone:SimpleReadOnlyKeystoneClientTest.test_admin_version': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_agent_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_debug_net_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_ext_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_fake_action': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_floatingip_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_help': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_net_external_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_net_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_port_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_quiet_net_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_router_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_security_group_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_security_group_rule_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_subnet_list': {'level': 3},
    'tempest.cli.simple_read_only.test_neutron:SimpleReadOnlyNeutronClientTest.test_neutron_version': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_admin_help': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_absolute_limit_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_availability_zone_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_backup_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_bash_completion': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_credentials': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_debug_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_endpoints': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_extra_specs_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_fake_action': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_list_extensions': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_quota_defaults': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_rate_limits': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_region_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_retries_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_snapshot_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_transfer_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_type_list': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_version': {'level': 3},
    'tempest.cli.simple_read_only.test_cinder:SimpleReadOnlyCinderClientTest.test_cinder_volumes_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_absolute_limites': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_credentials': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_debug_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_endpoints': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_fake_action': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_flavor_acces_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_flavor_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_floating_ip_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_floating_ip_pool_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_help': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_image_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_keypair_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_list_extensions': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_net_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_network_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_rate_limits': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_secgroup_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_timeout': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_timing': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_usage': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_version': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_volume_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_volume_snapshot_list': {'level': 3},
    'tempest.cli.simple_read_only.test_nova:SimpleReadOnlyNovaClientTest.test_admin_volume_type_list': {'level': 3},
    'tempest.api.compute.servers.test_server_rescue:ServerRescueTestJSON.test_rescue_non_existent_server': {'level': 3},
    'tempest.api.compute.servers.test_server_rescue:ServerRescueTestJSON.test_rescue_paused_instance': {'level': 3},
    'tempest.api.compute.servers.test_server_rescue:ServerRescueTestJSON.test_rescue_unrescue_instance': {'level': 3},
    'tempest.api.compute.servers.test_server_rescue:ServerRescueTestJSON.test_rescued_vm_add_remove_security_group': {'level': 3},
    'tempest.api.compute.servers.test_server_rescue:ServerRescueTestJSON.test_rescued_vm_reboot': {'level': 3},
    'tempest.api.compute.servers.test_server_rescue:ServerRescueTestJSON.test_rescued_vm_rebuild': {'level': 3},
}
