def test_add_remove_map_any_wwpn(self): """Tests a loop of add map/remove map when using _ANY_WWPN.""" v_wrap = self.entries[0] len_before = len(v_wrap.vfc_mappings) # A fake mapping to the first IO Server p_map_vio1 = ('10000090FA5371F2', vfc_mapper._FUSED_ANY_WWPN) vfc_mapper.add_map(v_wrap, 'host_uuid', self.lpar_uuid, p_map_vio1) self.assertEqual(len_before + 1, len(v_wrap.vfc_mappings)) # See if we can find that mapping. maps = vfc_mapper.find_maps(v_wrap.vfc_mappings, self.lpar_uuid, port_map=p_map_vio1) self.assertEqual(1, len(maps)) # Even though we were searching for a 'FUSED' wwpn, the mapping itself # will have nothing on it, to indicate that the API should generate # the WWPNs. Therefore, we validate that we found the mapping without # any WWPNs on it. self.assertEqual([], maps[0].client_adapter.wwpns) # Now try to remove it... vfc_mapper.remove_maps(v_wrap, self.lpar_uuid, port_map=p_map_vio1) self.assertEqual(len_before, len(v_wrap.vfc_mappings))
def test_add_map(self): """Validates the add_map method.""" # Determine the vios original values vios_wrap = self.entries[0] vios1_orig_map_count = len(vios_wrap.vfc_mappings) # Subset the WWPNs on that VIOS fabric_wwpns = ['10000090FA5371F2'] # Fake Virtual WWPNs v_fabric_wwpns = ['0', '1'] # Get the mappings fabric_map = vfc_mapper.derive_npiv_map([vios_wrap], fabric_wwpns, v_fabric_wwpns)[0] # Make sure the map was not there initially. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(0, len(maps)) # Now call the add action resp = vfc_mapper.add_map(vios_wrap, 'host_uuid', self.lpar_uuid, fabric_map) self.assertIsNotNone(resp) self.assertIsInstance(resp, pvm_vios.VFCMapping) # Verify the update is now found. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(1, len(maps)) self.assertEqual(vios1_orig_map_count + 1, len(vios_wrap.vfc_mappings)) # Try to add it again...it shouldn't re-add it because its already # there. Flip WWPNs to verify set query. fabric_map = ('10000090FA5371F2', '1 0') resp = vfc_mapper.add_map(vios_wrap, 'host_uuid', self.lpar_uuid, fabric_map) self.assertIsNone(resp) self.assertEqual(vios1_orig_map_count + 1, len(vios_wrap.vfc_mappings)) # We should only find one here...the original add. Not two even though # we've called add twice. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(1, len(maps))
def test_add_map(self): """Validates the add_map method.""" # Determine the vios original values vios_wrap = self.entries[0] vios1_orig_map_count = len(vios_wrap.vfc_mappings) # Subset the WWPNs on that VIOS fabric_wwpns = ['10000090FA5371F2'] # Fake Virtual WWPNs v_fabric_wwpns = ['0', '1'] # Get the mappings fabric_map = vfc_mapper.derive_npiv_map([vios_wrap], fabric_wwpns, v_fabric_wwpns)[0] # Make sure the map was not there initially. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(0, len(maps)) # Now call the add action resp = vfc_mapper.add_map(vios_wrap, 'host_uuid', self.lpar_uuid, fabric_map) self.assertIsNotNone(resp) self.assertIsInstance(resp, pvm_vios.VFCMapping) # Verify the update is now found. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(1, len(maps)) self.assertEqual(vios1_orig_map_count + 1, len(vios_wrap.vfc_mappings)) # Try to add it again...it shouldn't re-add it because its already # there. Flip WWPNs to verify set query. fabric_map = ('10000090FA5371F2', '1 0') resp = vfc_mapper.add_map(vios_wrap, 'host_uuid', self.lpar_uuid, fabric_map) self.assertIsNone(resp) self.assertEqual(vios1_orig_map_count + 1, len(vios_wrap.vfc_mappings)) # We should only find one here...the original add. Not two even though # we've called add twice. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(1, len(maps)) # This time, remove the backing port of the existing mapping and try # the add again. It should return an updated mapping that contains the # backing port. This simulates a VM migrating with a vfc mapping, but # no volume had been previously detached. maps[0].element.remove(maps[0].backing_port.element) resp = vfc_mapper.add_map(vios_wrap, 'host_uuid', self.lpar_uuid, fabric_map) self.assertIsNotNone(resp) self.assertIsInstance(resp, pvm_vios.VFCMapping) self.assertIsNotNone(resp.backing_port) self.assertIn('Port', resp.child_order) # Pass in slot number to be set on the VFC adapter fabric_map = ('10000090FA5371F1', '2 3') resp = vfc_mapper.add_map(vios_wrap, 'host_uuid', self.lpar_uuid, fabric_map, lpar_slot_num=3) self.assertIsNotNone(resp) self.assertEqual(vios1_orig_map_count + 2, len(vios_wrap.vfc_mappings)) # Verify the update is now found. maps = vfc_mapper.find_maps(vios_wrap.vfc_mappings, self.lpar_uuid, port_map=fabric_map) self.assertEqual(1, len(maps)) self.assertEqual(3, maps[0].client_adapter.lpar_slot_num)