########################################################### # Example: # vnx: # _properties: # properties # serial: serial_1 # name: lun_1 # state: # _side_effect: [Ready, Offline] # side effect for property # # _methods: # methods # get_pool: *pool_1 # return value of method # get_lun: # _raise: # GetLunError: Unkown Error # method raise exception # get_cg: # _side_effect: [cg_1, cg_2] # side effect for method # ########################################################### ########################################################### # Common ########################################################### lun_base: &lun_base _properties: &lun_base_prop name: lun_name lun_id: lun_id wwn: 'fake_wwn' poll: False operation: None state: Ready existed: true cg_base: _properties: &cg_base_prop fake_prop: fake_prop_value cg_snap_base: _properties: &cg_snap_base_prop id: 'cg_snap_id' pool_base: &pool_base _properties: &pool_base_prop name: pool_name pool_id: 0 state: Ready user_capacity_gbs: 1311 total_subscribed_capacity_gbs: 131 available_capacity_gbs: 132 percent_full_threshold: 70 fast_cache: True pool_feature_base: _properties: &pool_feature_base_prop max_pool_luns: 3000 total_pool_luns: 151 vnx_base: &vnx_base _properties: &vnx_base_prop serial: fake_serial snapshot_base: &snapshot_base _properties: &snapshot_base_prop status: existed: true name: snapshot_name state: sg: &sg_base _properties: &sg_base_prop existed: true name: sg_name spa: &spa _enum: VNXSPEnum: SP A spb: &spb _enum: VNXSPEnum: SP B iscsi_port_base: &iscsi_port_base _type: 'VNXPort' _properties: &iscsi_port_base_prop sp: *spa port_id: 0 vport_id: 0 all_iscsi_ports: &all_iscsi_ports - &iscsi_port_a-0-0 <<: *iscsi_port_base _properties: <<: *iscsi_port_base_prop port_id: 0 vport_id: 0 - &iscsi_port_a-0-1 <<: *iscsi_port_base _properties: <<: *iscsi_port_base_prop port_id: 0 vport_id: 1 - &iscsi_port_a-1-0 <<: *iscsi_port_base _properties: <<: *iscsi_port_base_prop port_id: 1 vport_id: 0 - &iscsi_port_b-0-1 <<: *iscsi_port_base _properties: <<: *iscsi_port_base_prop sp: *spb port_id: 0 vport_id: 1 fc_port_base: &fc_port_base _type: 'VNXPort' _properties: &fc_port_base_prop sp: *spa port_id: 1 vport_id: None wwn: 'wwn' link_status: 'Up' port_status: 'Online' all_fc_ports: &all_fc_ports - &fc_port_a-1 <<: *fc_port_base _properties: <<: *fc_port_base_prop port_id: 1 wwn: '50:06:01:60:B6:E0:1C:F4:50:06:01:66:36:E0:1C:A1' - &fc_port_a-2 <<: *fc_port_base _properties: <<: *fc_port_base_prop port_id: 2 wwn: '50:06:01:60:B6:E0:1C:F4:50:06:01:66:36:E0:1C:A2' port_status: 'Offline' - &fc_port_b-2 <<: *fc_port_base _properties: <<: *fc_port_base_prop sp: *spb port_id: 2 wwn: '50:06:01:60:B6:E0:1C:F4:50:06:01:66:36:E0:1C:B2' mirror_base: &mirror_base _properties: &mirror_base_prop image_state: _type: VNXMirrorImageState value: 'SYNCHRONIZED' mirror_group_base: &mirror_group_base _properties: &mirror_group_base_prop condition: 'Active' existed: true name: 'base_group' role: 'Primary' state: 'Synchronized' ########################################################### # TestClient ########################################################### test_create_lun: &test_create_lun lun: &lun_test_create_lun _properties: <<: *lun_base_prop name: lun1 _methods: update: with_no_poll: _context pool: &pool_test_create_lun _properties: <<: *pool_base_prop name: pool1 _methods: create_lun: *lun_test_create_lun with_no_poll: _context vnx: _properties: <<: *vnx_base_prop _methods: get_pool: *pool_test_create_lun test_create_lun_error: &test_create_lun_error pool: &pool_test_create_lun_error _properties: <<: *pool_base_prop _methods: create_lun: _raise: VNXCreateLunError: Unkown Error with_no_poll: _context vnx: _properties: <<: *vnx_base_prop _methods: get_pool: *pool_test_create_lun_error test_is_lun_io_ready_false: lun: _properties: <<: *lun_base_prop state: Initializing _methods: update: with_no_poll: _context test_is_lun_io_ready_true: lun: _properties: <<: *lun_base_prop state: Ready operation: None _methods: update: with_no_poll: _context test_is_lun_io_ready_exception: lun: _properties: <<: *lun_base_prop state: Deleting _methods: update: with_no_poll: _context test_create_lun_in_cg: cg: &cg_test_create_lun_in_cg _properties: <<: *cg_base_prop _methods: add_member: vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_create_lun get_pool: *pool_test_create_lun get_cg: *cg_test_create_lun_in_cg test_create_lun_compression: lun: &lun_test_create_lun_compression _properties: <<: *lun_base_prop name: lun2 _methods: update: with_no_poll: _context pool: &pool_test_create_lun_compression _properties: <<: *pool_base_prop _methods: create_lun: *lun_test_create_lun_compression with_no_poll: _context vnx: _properties: <<: *vnx_base_prop _methods: get_pool: *pool_test_create_lun_compression test_create_lun_already_existed: lun: &lun_test_create_lun_already_existed _properties: <<: *lun_base_prop name: lun3 _methods: update: with_no_poll: _context pool: &pool_test_create_lun_already_existed _properties: <<: *pool_base_prop _methods: with_no_poll: _context create_lun: _raise: VNXLunNameInUseError: Lun already exists(0x712d8d04) vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_create_lun_already_existed get_pool: *pool_test_create_lun_already_existed test_migrate_lun: lun: &lun_migrate _properties: <<: *lun_base_prop _methods: migrate: vnx: _methods: get_lun: *lun_migrate test_migrate_lun_with_retry: lun: &lun_migrate_retry _properties: <<: *lun_base_prop _methods: migrate: _raise: VNXTargetNotReadyError: 'The destination LUN is not available for migration' vnx: _methods: get_lun: *lun_migrate_retry test_session_finished_faulted: session: &session_faulted _properties: existed: true current_state: 'FAULTED' vnx: _methods: get_lun: *lun_base get_migration_session: *session_faulted test_session_finished_migrating: session: &session_migrating _properties: existed: true current_state: 'MIGRATING' vnx: _methods: get_lun: *lun_base get_migration_session: *session_migrating test_session_finished_not_existed: session: &session_not_existed _properties: existed: false vnx: _methods: get_lun: *lun_base get_migration_session: *session_not_existed test_migrate_lun_error: lun1: &lun_migrate_error <<: *lun_base_prop _methods: migrate: _raise: VNXMigrationError: 'Unknown Error' vnx: _methods: get_lun: *lun_migrate_error test_verify_migration: lun1: &src_lun _properties: <<: *lun_base_prop lun2: &dst_lun _properties: poll: false wwn: 'fake_wwn' session: &session_verify _properties: existed: false vnx: _methods: get_lun: _side_effect: [*src_lun, *dst_lun] get_migration_session: *session_verify test_verify_migration_false: vnx: _methods: get_lun: _side_effect: [*src_lun, *dst_lun] get_migration_session: *session_verify test_cleanup_migration: session: &session_cancel _properties: existed: true dest_lu_id: 2 lun: &lun_cancel_migrate _methods: cancel_migrate: vnx: _methods: get_migration_session: *session_cancel get_lun: *lun_cancel_migrate test_cleanup_migration_not_migrating: lun: &lun_cancel_migrate_not_migrating _methods: cancel_migrate: _raise: VNXLunNotMigratingError: The LUN is not migrating vnx: _methods: get_migration_session: *session_cancel get_lun: *lun_cancel_migrate_not_migrating test_cleanup_migration_cancel_failed: lun: &lun_cancel_migrate_cancel_failed _methods: cancel_migrate: _raise: VNXLunSyncCompletedError: The LUN is not migrating _properties: wwn: test vnx: _methods: get_migration_session: _side_effect: [*session_cancel, *session_verify] get_lun: *lun_cancel_migrate_cancel_failed test_get_lun_by_name: lun: &lun_test_get_lun_by_name _properties: <<: *lun_base_prop lun_id: 888 name: lun_name_test_get_lun_by_name vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_get_lun_by_name test_delete_lun: &test_delete_lun lun: &lun_test_delete_lun _properties: <<: *lun_base_prop name: lun_test_delete_lun is_snap_mount_point: False _methods: delete: vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_delete_lun test_delete_smp: &test_delete_smp snapshot: &snapshot_test_delete_smp _properties: name: snapshot_test_delete_smp _methods: delete: lun: &lun_test_delete_smp _properties: <<: *lun_base_prop name: lun_test_delete_smp _methods: delete: vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_delete_smp get_snap: *snapshot_test_delete_smp test_delete_lun_not_exist: lun: &lun_test_delete_lun_not_exist _properties: <<: *lun_base_prop name: lun_test_delete_lun_not_exist is_snap_mount_point: False _methods: delete: _raise: VNXLunNotFoundError: Lun to delete doesn't exist. vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_delete_lun_not_exist test_delete_lun_exception: lun: &lun_test_delete_lun_exception _properties: <<: *lun_base_prop name: lun_test_delete_lun_exception is_snap_mount_point: False _methods: delete: _raise: VNXDeleteLunError: General lun delete error. vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_delete_lun_exception test_cleanup_async_lun: lun: &lun_test_cleanup_async_lun _properties: <<: *lun_base_prop name: lun_test_cleanup_async_lun is_snap_mount_point: True _methods: delete: cancel_migrate: snap: &snap_test_cleanup_async_lun _methods: delete: vnx: _properties: <<: *vnx_base_prop _methods: get_lun: *lun_test_cleanup_async_lun get_snap: *snap_test_cleanup_async_lun get_migration_session: *session_migrating test_create_cg: &test_create_cg cg: &cg_for_create _properties: existed: True _methods: update: with_no_poll: _context vnx: _methods: create_cg: *cg_for_create test_create_cg_already_existed: vnx: _methods: create_cg: _raise: VNXConsistencyGroupNameInUseError: Already in use get_cg: *cg_for_create test_delete_cg: cg: &cg_for_deletion _methods: delete: vnx: _methods: get_cg: *cg_for_deletion test_delete_cg_not_existed: cg: &cg_delete_no_existed _methods: delete: _raise: VNXConsistencyGroupNotFoundError: CG not found vnx: _methods: get_cg: *cg_delete_no_existed test_expand_lun: &test_expand_lun lun: &lun_test_expand_lun _properties: <<: *lun_base_prop name: lun_test_expand_lun total_capacity_gb: 10 _methods: expand: update: with_no_poll: _context vnx: _properties: *vnx_base_prop _methods: get_lun: *lun_test_expand_lun test_expand_lun_not_poll: *test_expand_lun test_expand_lun_already_expanded: lun: &lun_test_expand_lun_already_expanded _properties: <<: *lun_base_prop total_capacity_gb: 10 _methods: update: with_no_poll: _context expand: _raise: VNXLunExpandSizeError: LUN already expanded. vnx: _properties: *vnx_base_prop _methods: get_lun: *lun_test_expand_lun_already_expanded test_expand_lun_not_ops_ready: lun: &lun_test_expand_lun_not_ops_ready _properties: <<: *lun_base_prop total_capacity_gb: 10 operation: 'None' _methods: update: with_no_poll: _context expand: _raise: VNXLunPreparingError: LUN operation not ready. vnx: _properties: *vnx_base_prop _methods: get_lun: *lun_test_expand_lun_not_ops_ready test_create_snapshot: &test_create_snapshot lun: &lun_test_create_snapshot <<: *lun_base _methods: create_snap: vnx: <<: *vnx_base _methods: get_lun: *lun_test_create_snapshot test_create_snapshot_snap_name_exist_error: lun: &lun_test_create_snapshot_snap_name_exist_error <<: *lun_base _methods: create_snap: _raise: VNXSnapNameInUseError: Snapshot name is in use. vnx: <<: *vnx_base _methods: get_lun: *lun_test_create_snapshot_snap_name_exist_error test_delete_snapshot: &test_delete_snapshot snapshot: &snapshot_test_delete_snapshot <<: *snapshot_base _methods: delete: vnx: <<: *vnx_base _methods: get_snap: *snapshot_test_delete_snapshot test_delete_snapshot_delete_attached_error: snapshot: &snapshot_test_delete_snapshot_delete_attached_error <<: *snapshot_base _methods: delete: _raise: VNXDeleteAttachedSnapError: Snapshot is attached to a LUN. vnx: <<: *vnx_base _methods: get_snap: *snapshot_test_delete_snapshot_delete_attached_error test_copy_snapshot: snap: &snap_copy _methods: copy: vnx: _methods: get_snap: *snap_copy test_create_mount_point: lun: &lun_mount_point _methods: create_mount_point: vnx: _methods: get_lun: *lun_mount_point test_attach_mount_point: lun: &lun_attach_snap _methods: attach_snap: vnx: _methods: get_lun: *lun_attach_snap test_detach_mount_point: lun: &lun_detach _methods: detach_snap: vnx: _methods: get_lun: *lun_detach test_modify_snapshot: snap: &snap_modify _methods: modify: vnx: _methods: get_snap: *snap_modify test_restore_snapshot: &test_restore_snapshot lun: &lun_restore _methods: restore_snap: vnx: _methods: get_lun: *lun_restore test_create_cg_snapshot: &test_create_cg_snapshot cg_snap: &cg_snap_exist _properties: existed: True _methods: update: with_no_poll: _context cg: &cg_test_create_cg_snapshot _methods: create_snap: *cg_snap_exist vnx: _methods: get_cg: *cg_test_create_cg_snapshot test_create_cg_snapshot_already_existed: cg: &cg_create_cg_snapshot_in_use_error _methods: with_no_poll: _context create_snap: _raise: VNXSnapNameInUseError: 'Already in use' vnx: _methods: get_cg: *cg_create_cg_snapshot_in_use_error get_snap: *cg_snap_exist test_delete_cg_snapshot: *test_delete_snapshot test_create_sg: sg: &sg_test_create_sg <<: *sg_base vnx: <<: *vnx_base _methods: create_sg: *sg_test_create_sg test_create_sg_name_in_use: vnx: <<: *vnx_base _methods: create_sg: _raise: VNXStorageGroupNameInUseError: Storage group name is in use. get_sg: *sg_base test_get_storage_group: sg: &sg_test_get_storage_group <<: *sg_base vnx: <<: *vnx_base _methods: get_sg: *sg_test_get_storage_group test_register_initiator: sg: &sg_test_register_initiator <<: *sg_base _methods: connect_hba: update: with_poll: _context vnx: *vnx_base test_register_initiator_exception: sg: &sg_test_register_initiator_exception <<: *sg_base _methods: connect_hba: _raise: VNXStorageGroupError: set_path error. update: with_poll: _context vnx: *vnx_base test_ping_node: iscsi_port: &iscsi_port_test_ping_node <<: *iscsi_port_base _methods: ping_node: vnx: <<: *vnx_base _methods: get_iscsi_port: *iscsi_port_test_ping_node test_ping_node_fail: iscsi_port: &iscsi_port_test_ping_node_fail <<: *iscsi_port_base _methods: ping_node: _raise: VNXPingNodeError: Failed to ping node. vnx: <<: *vnx_base _methods: get_iscsi_port: *iscsi_port_test_ping_node_fail test_add_lun_to_sg: sg: &sg_test_add_lun_to_sg <<: *sg_base _methods: attach_alu: 1 vnx: *vnx_base test_add_lun_to_sg_alu_already_attached: sg: &sg_test_add_lun_to_sg_alu_already_attached <<: *sg_base _methods: attach_alu: _raise: VNXAluAlreadyAttachedError: ALU is already attached. get_hlu: 1 vnx: *vnx_base test_add_lun_to_sg_alu_in_use: lun: _properties: <<: *lun_base_prop lun_id: 1 sg: &sg_test_add_lun_to_sg_alu_in_use <<: *sg_base _methods: attach_alu: _raise: VNXNoHluAvailableError: No HLU available. get_hlu: 1 vnx: *vnx_base test_update_consistencygroup_no_lun_in_cg: cg: _properties: <<: *cg_base_prop lun_list: [] _methods: replace_member: lun_1: _properties: <<: *lun_base_prop lun_id: 1 lun_2: _properties: <<: *lun_base_prop lun_id: 2 vnx: *vnx_base test_update_consistencygroup_lun_in_cg: lun_1: &lun_1_test_update_consistencygroup_lun_in_cg _properties: <<: *lun_base_prop lun_id: 1 lun_2: _properties: <<: *lun_base_prop lun_id: 2 cg: _properties: <<: *cg_base_prop lun_list: - *lun_1_test_update_consistencygroup_lun_in_cg _methods: replace_member: vnx: *vnx_base test_update_consistencygroup_remove_all: lun_1: &lun_1_test_update_consistencygroup_remove_all _properties: <<: *lun_base_prop lun_id: 1 cg: _properties: <<: *cg_base_prop lun_list: - *lun_1_test_update_consistencygroup_remove_all _methods: delete_member: vnx: *vnx_base test_create_export_snapshot: test_remove_export_snapshot: test_initialize_connection_snapshot: lun: &lun_test_initialize_connection_snapshot _properties: <<: *lun_base_prop lun_id: 100 vnx: <<: *vnx_base _methods: get_lun: *lun_test_initialize_connection_snapshot test_terminate_connection_snapshot: lun: &lun_test_terminate_connection_snapshot _properties: <<: *lun_base_prop lun_id: 100 vnx: <<: *vnx_base _methods: get_lun: *lun_test_terminate_connection_snapshot test_get_available_ip: vnx: _properties: alive_sp_ip: '192.168.1.5' test_create_mirror: vnx: _methods: get_lun: *lun_base create_mirror_view: *mirror_base test_create_mirror_already_created: vnx: _methods: get_lun: *lun_base create_mirror_view: _raise: VNXMirrorNameInUseError: 'name in use' get_mirror_view: *mirror_base test_delete_mirror: mirror: &mirror_test_delete_mirror _methods: delete: vnx: _methods: get_mirror_view: *mirror_test_delete_mirror test_delete_mirror_already_deleted: mirror: &mirror_delete_error _methods: delete: _raise: VNXMirrorNotFoundError: 'not found' vnx: _methods: get_mirror_view: *mirror_delete_error test_add_image: mirror: &mirror_test_add_image _methods: add_image: update: with_no_poll: _context with_poll: _context _properties: secondary_image: _properties: state: _enum: VNXMirrorImageState: 'Synchronized' vnx: _methods: get_mirror_view: *mirror_test_add_image test_remove_image: mirror: &mirror_remove_image _methods: remove_image: vnx: _methods: get_mirror_view: *mirror_remove_image test_fracture_image: mirror: &mirror_fracture_image _methods: fracture_image: vnx: _methods: get_mirror_view: *mirror_fracture_image test_sync_image: mirror: &mirror_sync_image _properties: <<: *mirror_base_prop secondary_image: _properties: state: _enum: VNXMirrorImageState: 'SYNCHRONIZED' _methods: sync_image: with_no_poll: _context update: vnx: _methods: get_mirror_view: *mirror_sync_image test_promote_image: mirror: &mirror_promote_image _methods: promote_image: vnx: _methods: get_mirror_view: *mirror_promote_image # Mirror group tests start test_create_mirror_group: vnx: _methods: create_mirror_group: *mirror_group_base test_create_mirror_group_name_in_use: vnx: _methods: create_mirror_group: _raise: VNXMirrorGroupNameInUseError: Mirror Group name already in use get_mirror_group: *mirror_group_base test_delete_mirror_group: group: &group_to_delete _methods: delete: vnx: _methods: get_mirror_group: *group_to_delete test_delete_mirror_group_not_found: group: &group_to_delete_not_found _methods: delete: _raise: VNXMirrorGroupNotFoundError: Unable to locate vnx: _methods: get_mirror_group: *group_to_delete_not_found test_add_mirror: group: &group_to_add _methods: add_mirror: vnx: _methods: get_mirror_group: *group_to_add get_mirror_view: *mirror_base test_add_mirror_already_added: group: &group_to_add_added _methods: add_mirror: _raise: VNXMirrorGroupAlreadyMemberError: already a member of a group vnx: _methods: get_mirror_group: *group_to_add_added get_mirror_view: *mirror_base test_remove_mirror: group: &group_to_remove _methods: remove_mirror: vnx: _methods: get_mirror_group: *group_to_remove get_mirror_view: *mirror_base test_remove_mirror_not_member: group: &group_to_remove_not_member _methods: remove_mirror: _raise: VNXMirrorGroupMirrorNotMemberError: not a member of the group vnx: _methods: get_mirror_group: *group_to_remove_not_member get_mirror_view: *mirror_base test_promote_mirror_group: group: &group_to_promote _methods: promote_group: vnx: _methods: get_mirror_group: *group_to_promote test_promote_mirror_group_already_promoted: group: &group_to_promote_already_promoted _methods: promote_group: _raise: VNXMirrorGroupAlreadyPromotedError: no secondary images to promote vnx: _methods: get_mirror_group: *group_to_promote_already_promoted test_sync_mirror_group: group: &group_to_sync _methods: sync_group: vnx: _methods: get_mirror_group: *group_to_sync test_fracture_mirror_group: group: &group_to_fracture _methods: fracture_group: vnx: _methods: get_mirror_group: *group_to_fracture test_get_lun_id: test_get_lun_id_without_provider_location: lun: &test_get_lun_id_without_provider_location <<: *lun_base _properties: <<: *lun_base_prop lun_id: 1 vnx: _methods: get_lun: *test_get_lun_id_without_provider_location test_get_ioclass: ioclass_false: &ioclass_false _properties: existed: False ioclass_true: &ioclass_true _properties: existed: True _methods: add_lun: vnx: _methods: get_ioclass: *ioclass_false create_ioclass: *ioclass_true test_create_ioclass_iops: vnx: _methods: create_ioclass: *ioclass_true test_create_ioclass_bws: vnx: _methods: create_ioclass: *ioclass_true test_create_policy: policy: &policy _properties: state: "Running" existed: False _methods: add_class: run_policy: vnx: _methods: get_policy: *policy create_policy: *policy test_get_running_policy: vnx: _methods: get_policy: [*policy, *policy] test_add_lun_to_ioclass: vnx: _methods: get_ioclass: *ioclass_true test_set_max_luns_per_sg: vnx: *vnx_base ########################################################### # TestCommonAdapter ########################################################### test_create_volume: *test_create_lun test_create_volume_error: *test_create_lun_error test_create_thick_volume: *test_create_lun test_create_volume_with_qos: vnx: _properties: <<: *vnx_base_prop _methods: get_pool: *pool_test_create_lun get_ioclass: *ioclass_true get_policy: [*policy] test_migrate_volume: lun: &src_lun_1 _properties: <<: *lun_base_prop lun_id: 4 wwn: 'src_wwn' poll: false _methods: migrate: update: with_no_poll: _context lun2: &lun_migrate_1 _properties: lun_id: 5 wwn: 'dst_wwn' _methods: cancel_migrate: lun3: &lun_not_existed _properties: wwn: session: &session _properties: existed: false pool: &migrate_pool _methods: create_lun: *src_lun_1 with_no_poll: _context vnx: _methods: get_lun: _side_effect: [*lun_migrate_1, *src_lun_1, *src_lun_1, *lun_not_existed] get_migration_session: *session get_pool: *migrate_pool test_migrate_volume_host_assisted: vnx: _methods: test_create_cloned_volume: snap: &snap_for_clone _methods: delete: thick_base_lun: &test_create_cloned_volume_thick_base_lun _properties: is_thin_lun: fase smp: &smp_migrate _properties: <<: *lun_base_prop lun_id: 4 wwn: 'src_wwn' poll: false is_thin_lun: false total_capacity_gb: 10 primary_lun: *test_create_cloned_volume_thick_base_lun _methods: migrate: update: with_no_poll: _context lun2: &lun_migrate_2 _properties: lun_id: 5 wwn: 'dst_wwn' _methods: cancel_migrate: create_snap: create_mount_point: attach_snap: lun3: &lun_not_existed_2 _properties: wwn: session: &session_2 _properties: existed: false pool: &migrate_pool_2 _methods: create_lun: *smp_migrate with_no_poll: _context vnx: _properties: serial: fake_serial _methods: get_lun: _side_effect: [*lun_migrate_2, *lun_migrate_2, *smp_migrate, *lun_migrate_2, *smp_migrate, *lun_not_existed_2, *smp_migrate, *smp_migrate, *lun_not_existed_2] get_migration_session: *session_2 get_pool: *migrate_pool_2 get_snap: *snap_for_clone test_create_cloned_volume_snapcopy: lun: &lun_for_snapcopy _methods: create_mount_point: create_snap: smp: &smp_for_snapcopy _properties: lun_id: 11 _methods: attach_snap: vnx: _properties: serial: fake_serial _methods: get_lun: _side_effect: [*lun_for_snapcopy, *lun_for_snapcopy, *smp_for_snapcopy, *smp_for_snapcopy] get_pool: *pool_base test_create_volume_from_snapshot: lun: &lun_from_snapshot _properties: lun_id: 16 _methods: create_mount_point: smp: &smp_from_lun _properties: is_thin_lun: false total_capacity_gb: 10 primary_lun: *test_create_cloned_volume_thick_base_lun _methods: attach_snap: vnx: _properties: serial: fake_serial _methods: get_lun: _side_effect: [*lun_from_snapshot, *lun_from_snapshot, *smp_from_lun, *smp_from_lun, *dst_lun, *src_lun_1, *src_lun_1, *lun_not_existed] get_pool: *pool_test_create_lun get_migration_session: *session test_create_volume_from_snapshot_snapcopy: snap: &snap_for_snapcopy _methods: copy: modify: vnx: _properties: serial: fake_serial _methods: get_snap: _side_effect: [*snap_for_snapcopy, *snap_for_snapcopy] get_lun: _side_effect: [*lun_from_snapshot, *lun_from_snapshot, *smp_from_lun] test_parse_pools: &test_parse_pools pool1: &pool_test_parse_pools_1 _properties: <<: *pool_base_prop name: 'pool5' pool2: &pool_test_parse_pools_2 _properties: <<: *pool_base_prop name: 'pool6' vnx: _properties: <<: *vnx_base_prop _methods: get_pool: [*pool_test_parse_pools_1, *pool_test_parse_pools_2] test_parse_pools_one_invalid_pool: *test_parse_pools test_parse_pools_all_invalid_pools: *test_parse_pools test_get_enabler_stats: &test_get_enabler_stats vnx: &vnx_test_get_enabler_stats _properties: <<: *vnx_base_prop _methods: is_compression_enabled: True is_dedup_enabled: True is_fast_cache_enabled: True is_thin_enabled: True is_snap_enabled: True is_auto_tiering_enabled: True test_get_pool_stats: pool_feature: &pool_feature_test_get_pool_stats _properties: <<: *pool_feature_base_prop vnx: _properties: <<: *vnx_base_prop _methods: get_pool: [*pool_test_parse_pools_1, *pool_test_parse_pools_2] get_pool_feature: *pool_feature_test_get_pool_stats is_auto_tiering_enabled: True test_get_pool_stats_max_luns_reached: pool_feature: &pool_feature_test_get_pool_stats_max_luns_reached _properties: <<: *pool_feature_base_prop total_pool_luns: 3001 vnx: _properties: <<: *vnx_base_prop _methods: get_pool: [*pool_test_parse_pools_1, *pool_test_parse_pools_2] get_pool_feature: *pool_feature_test_get_pool_stats_max_luns_reached is_auto_tiering_enabled: True test_get_pool_stats_with_reserved: vnx: _properties: <<: *vnx_base_prop _methods: get_pool: [*pool_test_parse_pools_1, *pool_test_parse_pools_2] get_pool_feature: *pool_feature_test_get_pool_stats is_auto_tiering_enabled: True test_get_pool_stats_offline: pool1: &pool_test_get_pool_stats_offline_1 _properties: <<: *pool_base_prop name: 'pool7' state: 'Offline' pool2: &pool_test_get_pool_stats_offline_2 _properties: <<: *pool_base_prop name: 'pool8' state: 'Offline' vnx: _properties: <<: *vnx_base_prop _methods: get_pool: [*pool_test_get_pool_stats_offline_1, *pool_test_get_pool_stats_offline_2] get_pool_feature: *pool_feature_test_get_pool_stats is_compression_enabled: False is_dedup_enabled: True is_fast_cache_enabled: False is_thin_enabled: True is_snap_enabled: False is_auto_tiering_enabled: True test_update_volume_stats: *test_get_enabler_stats test_append_volume_stats: vnx: _properties: serial: fake_serial test_delete_volume_not_force: *test_delete_lun test_delete_volume_force: *test_delete_lun test_delete_async_volume: snap: &snap_test_delete_async_volume _methods: delete: vnx: _methods: get_lun: *lun_test_delete_lun get_snap: *snap_test_delete_async_volume test_delete_async_volume_migrating: lun: &lun_used_by_feature _properties: is_snap_mount_point: false _methods: cancel_migrate: delete: _raise: VNXLunUsedByFeatureError: vnx: _methods: get_lun: *lun_used_by_feature get_snap: *snap_test_delete_async_volume test_delete_async_volume_not_from_snapshot: vnx: _methods: get_lun: *lun_test_delete_lun test_delete_async_volume_from_snapshot: snap: &snap_test_delete_async_volume_from_snapshot _methods: delete: vnx: _methods: get_lun: *lun_test_delete_lun get_snap: *snap_test_delete_async_volume_from_snapshot test_enable_compression: lun: _properties: <<: *lun_base_prop _methods: enable_compression: test_enable_compression_on_compressed_lun: lun: _properties: <<: *lun_base_prop _methods: enable_compression: _raise: VNXCompressionAlreadyEnabledError: test_lun_has_snapshot_false: lun: _properties: <<: *lun_base_prop _methods: get_snap: [] test_lun_has_snapshot_true: lun: _properties: <<: *lun_base_prop _methods: get_snap: ['fake_snap'] test_get_vnx_enabler_status: vnx: _methods: is_dedup_enabled: True is_compression_enabled: False is_thin_enabled: True is_fast_cache_enabled: True is_auto_tiering_enabled: False is_snap_enabled: True test_retype_type_invalid: vnx: _methods: is_dedup_enabled: True is_compression_enabled: True is_thin_enabled: True is_fast_cache_enabled: True is_auto_tiering_enabled: True is_snap_enabled: True test_retype_need_migration: lun: &lun_retype_need_migration _properties: <<: *lun_base_prop _methods: get_snap: [] with_no_poll: _context update: vnx: _methods: get_lun: _side_effect: [*lun_retype_need_migration] test_retype_turn_on_compression_change_tier: lun: &lun_retype_turn_on_compression_change_tier _properties: <<: *lun_base_prop provision: _enum: VNXProvisionEnum: 'thin' tier: _enum: VNXTieringEnum: 'auto' _methods: enable_compression: get_snap: [] with_no_poll: _context update: vnx: _methods: get_lun: *lun_retype_turn_on_compression_change_tier test_retype_lun_has_snap: lun: &lun_retype_lun_has_snap _properties: <<: *lun_base_prop provision: _enum: VNXProvisionEnum: 'thick' tier: _enum: VNXTieringEnum: 'auto' _methods: get_snap: ['fake_snap'] with_no_poll: _context update: vnx: _methods: get_lun: *lun_retype_lun_has_snap test_retype_change_tier: lun: &lun_retype_change_tier _properties: <<: *lun_base_prop provision: _enum: VNXProvisionEnum: 'thick' tier: _enum: VNXTieringEnum: 'nomovement' _methods: with_no_poll: _context update: vnx: _methods: get_lun: *lun_retype_change_tier test_create_consistencygroup: *test_create_cg test_delete_consistencygroup: vnx: _methods: get_cg: *cg_for_deletion test_delete_consistencygroup_with_volume: vnx: _methods: get_cg: *cg_for_deletion get_lun: *lun_test_delete_lun test_delete_consistencygroup_error: cg: &cg_delete_error _methods: delete: _raise: VNXConsistencyGroupError: Unable to delete cg vnx: _methods: get_cg: *cg_delete_error test_delete_consistencygroup_volume_error: vnx: _methods: get_cg: *cg_for_deletion get_lun: *lun_test_delete_lun_exception test_extend_volume: *test_expand_lun test_create_snapshot_adapter: *test_create_snapshot test_delete_snapshot_adapter: *test_delete_snapshot test_restore_snapshot_adapter: *test_restore_snapshot test_create_cgsnapshot: *test_create_cg_snapshot test_do_create_cgsnap: *test_create_cg_snapshot test_do_delete_cgsnap: cg_snap: &cg_snap_delete _methods: delete: vnx: _methods: get_snap: *cg_snap_delete test_do_create_cg_from_cgsnap: snap: &copied_cg_snap _methods: copy: modify: smp: &smp_from_src_lun _properties: lun_id: 12 _methods: attach_snap: lun: &src_lun_in_cg _methods: create_mount_point: *smp_from_src_lun lun2: &new_lun _properties: poll: false wwn: 'new_wwn' vnx: _properties: _methods: get_snap: _side_effect: [*copied_cg_snap, *copied_cg_snap, *snapshot_test_delete_snapshot] get_lun: _side_effect: [*src_lun_in_cg, *smp_from_src_lun, *smp_from_src_lun, *new_lun, *lun_migrate, *src_lun, *new_lun] get_pool: *pool_test_create_lun get_migration_session: *session_verify create_cg: *cg_for_create test_do_clone_cg: vnx: _properties: _methods: get_cg: *cg_test_create_cg_snapshot get_snap: *snapshot_test_delete_snapshot get_lun: _side_effect: [*src_lun_in_cg, *smp_from_src_lun, *smp_from_src_lun, *new_lun, *lun_migrate, *src_lun, *new_lun] get_pool: *pool_test_create_lun get_migration_session: *session_verify create_cg: *cg_for_create test_validate_ports_iscsi: &test_validate_ports_iscsi iscsi_port_a-0-0: *iscsi_port_a-0-0 vnx: <<: *vnx_base _methods: get_iscsi_port: *all_iscsi_ports test_validate_ports_iscsi_invalid: *test_validate_ports_iscsi test_validate_ports_iscsi_not_exist: *test_validate_ports_iscsi test_validate_ports_fc: &test_validate_ports_fc fc_port_a-1: *fc_port_a-1 vnx: <<: *vnx_base _methods: get_fc_port: *all_fc_ports test_validate_ports_fc_invalid: *test_validate_ports_fc test_validate_ports_fc_not_exist: *test_validate_ports_fc test_manage_existing_lun_no_exist: lun: &lun_manage_lun_not_exist _properties: existed: False vnx: _methods: get_lun: *lun_manage_lun_not_exist test_manage_existing_invalid_ref: lun: *lun_manage_lun_not_exist test_manage_existing_invalid_pool: lun: &lun_manage_in_other_pool _properties: existed: True pool_name: 'unmanaged_pool' vnx: _methods: get_lun: *lun_manage_in_other_pool test_manage_existing_get_size: lun: &lun_manage_get_size _properties: existed: True pool_name: 'unit_test_pool' total_capacity_gb: 5 vnx: _methods: get_lun: *lun_manage_get_size test_manage_existing_type_mismatch: lun: &lun_manage_type_mismatch _properties: existed: True pool_name: 'unit_test_pool' provision: _enum: VNXProvisionEnum: 'thick' tier: _enum: VNXTieringEnum: 'highestavailable' total_capacity_gb: 5 vnx: _methods: get_lun: *lun_manage_type_mismatch test_manage_existing: lun: &lun_manage_existing _properties: &lun_manage_existing_props lun_id: 1 existed: True pool_name: 'unit_test_pool' provision: _enum: VNXProvisionEnum: 'deduplicated' tier: _enum: VNXTieringEnum: 'auto' total_capacity_gb: 5 primary_lun: 'N/A' is_snap_mount_point: False _methods: rename: test_manage_existing_smp: lun: &manage_existing_smp _properties: lun_id: 2 existed: True pool_name: 'unit_test_pool' primary_lun: 'src_lun' is_snap_mount_point: True _methods: rename: vnx: _methods: get_lun: *manage_existing_smp test_assure_storage_group: sg: &sg_test_assure_storage_group _properties: <<: *sg_base_prop existed: True _methods: update: with_poll: _context vnx: <<: *vnx_base _methods: get_sg: *sg_test_assure_storage_group test_assure_storage_group_create_new: sg: &sg_test_assure_storage_group_create_new _properties: <<: *sg_base_prop existed: False _methods: update: with_poll: _context vnx: <<: *vnx_base _methods: get_sg: *sg_test_assure_storage_group_create_new create_sg: *sg_test_assure_storage_group_create_new test_assure_host_access: sg: &sg_test_assure_host_access <<: *sg_base _methods: update: with_poll: _context lun: &lun_test_assure_host_access <<: *lun_base vnx: <<: *vnx_base _methods: get_lun: *lun_test_assure_host_access test_assure_host_access_without_auto_register_new_sg: &test_assure_host_access_without_auto_register_new_sg sg: &sg_test_assure_host_access_without_auto_register_new_sg <<: *sg_base _methods: update: connect_host: with_poll: _context lun: &lun_test_assure_host_access_without_auto_register_new_sg <<: *lun_base vnx: <<: *vnx_base _methods: get_lun: *lun_test_assure_host_access_without_auto_register_new_sg test_assure_host_access_without_auto_register: *test_assure_host_access_without_auto_register_new_sg test_auto_register_initiator: &test_auto_register_initiator allowed_ports: *all_iscsi_ports reg_ports: [*iscsi_port_a-0-0] sg: &sg_auto_register_initiator _properties: <<: *sg_base_prop initiator_uid_list: ['iqn-reg-1', 'iqn-reg-2'] _methods: get_ports: [*iscsi_port_a-0-0] vnx: <<: *vnx_base test_auto_register_initiator_no_white_list: *test_auto_register_initiator test_auto_register_initiator_no_port_to_reg: allowed_ports: [*iscsi_port_a-0-0] reg_ports: [*iscsi_port_a-0-0] sg: _properties: <<: *sg_base_prop initiator_uid_list: ['iqn-reg-1', 'iqn-reg-2'] _methods: get_ports: [*iscsi_port_a-0-0] vnx: <<: *vnx_base test_build_provider_location: vnx: _properties: serial: 'vnx-serial' test_terminate_connection: sg: &sg_terminate_connection _properties: existed: True vnx: _methods: get_sg: *sg_terminate_connection test_terminate_connection_force_detach: sg: &sg_terminate_connection_force_detach_1 _properties: existed: True sg: &sg_terminate_connection_force_detach_2 _properties: existed: True sgs: &sgs_terminate_connection_force_detach _methods: shadow_copy: [*sg_terminate_connection_force_detach_1, *sg_terminate_connection_force_detach_2] vnx: _methods: get_sg: *sgs_terminate_connection_force_detach test_remove_host_access: sg: &sg_remove_host_access _properties: existed: True _methods: detach_alu: vnx: _methods: get_sg: *sg_remove_host_access get_lun: *lun_base test_set_extra_spec_defaults: vnx: <<: *vnx_base_prop _methods: is_auto_tiering_enabled: True test_remove_host_access_sg_absent: sg: &sg_remove_host_access_sg_absent _properties: existed: False vnx: _methods: get_sg: *sg_remove_host_access_sg_absent get_lun: *lun_base test_setup_lun_replication: vnx: _properties: serial: 'vnx-serial' lun: _properties: lun_id: 222 wwn: fake_wwn test_setup_lun_replication_in_group: group: &group_for_enable _methods: add_mirror: vnx: _properties: serial: 'vnx-serial' _methods: get_mirror_view: *mirror_base get_mirror_group: *group_for_enable lun: _properties: lun_id: 222 wwn: fake_wwn test_cleanup_replication: vnx: _properties: serial: 'vnx-serial' _methods: is_mirror_view_sync_enabled: True test_build_mirror_view: vnx: _properties: serial: 'vnx-serial' _methods: is_mirror_view_sync_enabled: True test_build_mirror_view_no_device: vnx: _properties: serial: 'vnx-serial' test_build_mirror_view_2_device: vnx: _properties: serial: 'vnx-serial' _methods: is_mirror_view_sync_enabled: True test_build_mirror_view_no_enabler: vnx: _properties: serial: 'vnx-serial' _methods: is_mirror_view_sync_enabled: False test_build_mirror_view_failover_false: vnx: _properties: serial: 'vnx-serial' _methods: is_mirror_view_sync_enabled: True test_failover_host: lun1: _properties: lun_id: 11 test_failover_host_invalid_backend_id: test_failover_host_failback: lun1: _properties: lun_id: 22 test_failover_host_groups: lun1: _properties: lun_id: 22 test_get_pool_name: lun: &lun_test_get_pool_name _properties: <<: *lun_base_prop pool_name: pool_1 _methods: with_no_poll: _context update: vnx: _methods: get_lun: *lun_test_get_pool_name test_normalize_config_naviseccli_path: test_normalize_config_queue_path: test_normalize_config_naviseccli_path_none: test_normalize_config_pool_names: test_normalize_config_pool_names_none: test_normalize_config_pool_names_empty_list: test_normalize_config_io_port_list: test_normalize_config_io_port_list_none: test_normalize_config_io_port_list_empty_list: ########################################################### # TestISCSIAdapter ########################################################### test_parse_ports_iscsi: &test_parse_ports_iscsi connection_port: &port_test_parse_ports_iscsi _properties: existed: False vnx: _methods: get_sg: *sg_remove_host_access_sg_absent get_lun: *lun_base test_remove_host_access_volume_not_in_sg: sg: &remove_host_access_volume_not_in_sg _properties: *sg_base_prop _methods: detach_alu: _raises: VNXDetachAluNotFoundError vnx: _methods: get_sg: *remove_host_access_volume_not_in_sg get_lun: *lun_base test_terminate_connection_cleanup_remove_sg: sg: _properties: *sg_base_prop _methods: delete: disconnect_host: get_alu_hlu_map: {} update: with_poll: _context test_terminate_connection_cleanup_sg_absent: sg: _properties: existed: False test_terminate_connection_cleanup_deregister: sg: _properties: *sg_base_prop _methods: delete: disconnect_host: get_alu_hlu_map: {} update: with_poll: _context vnx: _methods: delete_hba: test_terminate_connection_cleanup_sg_is_not_empty: sg: _properties: *sg_base_prop _methods: get_alu_hlu_map: {'1': '1'} test_update_consistencygroup: test_do_update_cg: test_update_migrated_volume: test_update_migrated_volume_smp: test_normalize_config_iscsi_initiators: test_normalize_config_iscsi_initiators_none: test_normalize_config_iscsi_initiators_empty_str: test_normalize_config_iscsi_initiators_not_dict: test_create_group_snap: test_create_cgsnapshot: test_create_cloned_cg: test_create_cloned_group: test_create_cg_from_cgsnapshot: test_create_group_from_group_snapshot: test_create_cgsnapshot: test_create_group_snapshot: test_delete_group_snapshot: test_delete_cgsnapshot: ########################################################### # TestISCSIAdapter ########################################################### test_update_volume_stats_iscsi: vnx: _properties: <<: *vnx_base_prop _methods: get_iscsi_port: *all_iscsi_ports test_build_terminate_connection_return_data_iscsi: ########################################################### # TestFCAdapter ########################################################### test_build_terminate_connection_return_data_without_autozone: test_build_terminate_connection_return_data_sg_absent: sg: _properties: <<: *sg_base_prop existed: False test_build_terminate_connection_return_data_auto_zone: sg: _properties: <<: *sg_base_prop name: 'fake_host' fc_ports: - *fc_port_a-1 _methods: get_alu_hlu_map: {} vnx: _methods: get_fc_port: *all_fc_ports test_mock_vnx_objects_foo: *test_create_lun test_get_tgt_list_and_initiator_tgt_map_allow_port_only: sg: _properties: <<: *sg_base_prop fc_ports: - *fc_port_a-1 - <<: *fc_port_base _properties: <<: *fc_port_base_prop sp: *spb port_id: 1 wwn: '50:06:01:60:B6:E0:1C:F4:50:06:01:66:36:E0:1C:B1' - *fc_port_b-2 adapter: _properties: allowed_ports: - <<: *fc_port_base _properties: <<: *fc_port_base_prop sp: *spb port_id: 1 wwn: '50:06:01:60:B6:E0:1C:F4:50:06:01:66:36:E0:1C:B1' - *fc_port_b-2 vnx: _methods: get_fc_port: *all_fc_ports ########################################################## # TestReplicationAdapter ########################################################## test_enable_replication: vnx: _methods: create_mirror_group: *mirror_group_base get_mirror_view: *mirror_base get_mirror_group: *group_for_enable test_disable_replication: group: &group_for_disable _methods: remove_mirror: delete: vnx: _methods: get_mirror_view: *mirror_base get_mirror_group: *group_for_disable test_failover_replication: lun1: *lun_base ########################################################## # TestTaskflow ########################################################## test_copy_snapshot_task: vnx: _methods: get_snap: *snap_copy test_copy_snapshot_task_revert: snap: &snap_copy_error _methods: copy: _raise: VNXSnapError: Unable to copy snap delete: vnx: _methods: get_snap: *snap_copy_error test_create_smp_task: smp: &smp _properties: lun_id: 15 lun: &lun_create_smp _methods: create_mount_point: *smp vnx: _methods: get_lun: _side_effect: [*lun_create_smp, *smp] test_create_smp_task_revert: lun: &lun_create_smp_error _methods: create_mount_point: _raise: VNXCreateLunError: 'Unable to create mount point' delete: _properties: is_snap_mount_point: False vnx: _methods: get_lun: *lun_create_smp_error test_attach_snap_task: vnx: _methods: get_lun: *lun_attach_snap test_attach_snap_task_revert: lun: &lun_attach_snap_error _methods: attach_snap: _raise: VNXAttachSnapError: 'Unable to attach snapshot' detach_snap: vnx: _methods: get_lun: *lun_attach_snap_error test_create_snapshot_task: lun: &lun_snap _methods: create_snap: vnx: _methods: get_lun: *lun_snap test_create_snapshot_task_revert: snap: &snap_delete _methods: delete: lun: &lun_snap_error _methods: create_snap: _raise: VNXCreateSnapError: 'Unable to create snap' vnx: _methods: get_lun: *lun_snap_error get_snap: *snap_delete test_allow_read_write_task: vnx: _methods: get_snap: *snap_modify test_allow_read_write_task_revert: snap: &snap_modify_error _methods: modify: _raise: VNXSnapError: Unable to modify snap vnx: _methods: get_snap: *snap_modify_error test_wait_migrations_task: vnx: test_create_consistency_group_task: vnx: test_create_consistency_group_task_revert: vnx: test_create_cg_snapshot_task: *test_create_cg_snapshot test_create_cg_snapshot_task_revert: cg: &create_cg_snapshot_error _methods: create_snap: _raise: VNXCreateSnapError: 'Create failed' snap: &snap_create_cg_revert _methods: delete: vnx: _methods: get_cg: *create_cg_snapshot_error get_snap: *snap_create_cg_revert test_extend_smp_task: thin_base_lun: &test_extend_smp_task_thin_base_lun _properties: is_thin_lun: true lun: &lun_test_extend_smp_task _properties: <<: *lun_base_prop name: lun_test_extend_smp_task is_thin_lun: true total_capacity_gb: 10 primary_lun: *test_extend_smp_task_thin_base_lun new_lun: &new_lun_test_extend_smp_task _properties: <<: *lun_base_prop name: new_lun_test_extend_smp_task is_thin_lun: true total_capacity_gb: 100 _methods: expand: with_no_poll: _context update: vnx: _methods: get_lun: _side_effect: [*lun_test_extend_smp_task, *new_lun_test_extend_smp_task] test_extend_smp_task_skip_small_size: lun: &lun_test_extend_smp_task_skip_small_size _properties: <<: *lun_base_prop name: lun_test_extend_smp_task_skip_small_size is_thin_lun: true total_capacity_gb: 1 primary_lun: *test_extend_smp_task_thin_base_lun vnx: _methods: get_lun: *lun_test_extend_smp_task_skip_small_size test_extend_smp_task_skip_thick: &test_extend_smp_task_skip_thick thick_base_lun: &test_extend_smp_task_thick_base_lun _properties: is_thin_lun: false lun: &lun_test_extend_smp_task_skip_thick _properties: <<: *lun_base_prop name: lun_test_extend_smp_task_skip_thick is_thin_lun: false total_capacity_gb: 10 primary_lun: *test_extend_smp_task_thick_base_lun vnx: _methods: get_lun: *lun_test_extend_smp_task_skip_thick ########################################################### # TestExtraSpecs ########################################################### test_generate_extra_specs_from_lun: lun: _properties: provision: _enum: VNXProvisionEnum: 'compressed' tier: _enum: VNXTieringEnum: 'highestavailable' deduped_lun: _properties: provision: _enum: VNXProvisionEnum: 'deduplicated' tier: _enum: VNXTieringEnum: 'auto' test_extra_specs_match_with_lun: lun: _properties: provision: _enum: VNXProvisionEnum: 'thin' tier: _enum: VNXTieringEnum: 'nomovement' deduped_lun: _properties: provision: _enum: VNXProvisionEnum: 'deduplicated' tier: _enum: VNXTieringEnum: 'nomovement' test_extra_specs_not_match_with_lun: lun: _properties: provision: _enum: VNXProvisionEnum: 'thick' tier: _enum: VNXTieringEnum: 'lowestavailable'