def test_publish_volume_with_node_id_only_has_wwns(self, enter): context = utils.FakeContext() self.request.node_id = "hostname;;500143802426baf4" self.mediator.get_host_by_host_identifiers.return_value = self.hostname, ["fc"] self.mediator.get_array_fc_wwns = Mock() self.mediator.get_array_fc_wwns.return_value = ["500143802426baf4"] enter.return_value = self.mediator res = self.servicer.ControllerPublishVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.assertEqual(res.publish_context["PUBLISH_CONTEXT_LUN"], '1') self.assertEqual(res.publish_context["PUBLISH_CONTEXT_CONNECTIVITY"], "fc") self.assertEqual( res.publish_context["PUBLISH_CONTEXT_ARRAY_FC_INITIATORS"], "500143802426baf4") self.request.node_id = "hostname;;500143802426baf4:500143806626bae2" self.mediator.get_host_by_host_identifiers.return_value = self.hostname, ["fc"] self.mediator.get_array_fc_wwns = Mock() self.mediator.get_array_fc_wwns.return_value = ["500143802426baf4", "500143806626bae2"] enter.return_value = self.mediator res = self.servicer.ControllerPublishVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.assertEqual(res.publish_context["PUBLISH_CONTEXT_LUN"], '1') self.assertEqual(res.publish_context["PUBLISH_CONTEXT_CONNECTIVITY"], "fc") self.assertEqual( res.publish_context["PUBLISH_CONTEXT_ARRAY_FC_INITIATORS"], "500143802426baf4,500143806626bae2")
def test_create_volume_get_volume_exception(self, a_enter, get_volume, array_type): a_enter.return_value = self.mediator self.mediator.get_volume.side_effect = [Exception("error")] context = utils.FakeContext() res = self.servicer.CreateVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.INTERNAL) self.assertTrue("error" in context.details) self.mediator.get_volume.assert_called_once_with(vol_name)
def test_create_volume_with_get_array_type_exception(self, a_enter, a_exit, array_type): a_enter.return_value = self.mediator context = utils.FakeContext() array_type.side_effect = [array_errors.FailedToFindStorageSystemType("endpoint")] res = self.servicer.CreateVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.INTERNAL, "failed to find storage system") msg = array_errors.FailedToFindStorageSystemType("endpoint").message self.assertTrue(msg in context.details)
def test_publish_volume_get_volume_mappings_more_then_one_mapping(self, enter): context = utils.FakeContext() self.mediator.get_volume_mappings = Mock() self.mediator.get_volume_mappings.return_value = {"other-hostname": 3, self.hostname: 4} enter.return_value = self.mediator self.servicer.ControllerPublishVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.FAILED_PRECONDITION) self.assertTrue("Volume is already mapped" in context.details)
def delete_volume_returns_error(self, a_enter, delete_volume, error, return_code): a_enter.return_value = self.mediator delete_volume.side_effect = [error] context = utils.FakeContext() res = self.servicer.DeleteVolume(self.request, context) self.assertEqual(context.code, return_code) if return_code != grpc.StatusCode.OK: msg = str(error) self.assertTrue(msg in context.details, "msg : {0} is not in : {1}".format(msg, context.details))
def test_create_volume_with_get_volume_illegal_object_name_exception(self, a_enter, get_volume, array_type): a_enter.return_value = self.mediator self.mediator.get_volume.side_effect = [array_errors.IllegalObjectName("vol")] context = utils.FakeContext() res = self.servicer.CreateVolume(self.request, context) msg = array_errors.IllegalObjectName("vol").message self.assertEqual(context.code, grpc.StatusCode.INVALID_ARGUMENT) self.assertTrue(msg in context.details) self.mediator.get_volume.assert_called_once_with(vol_name)
def test_create_volume_succeeds(self, a_exit, a_enter, array_type): a_enter.return_value = self.mediator context = utils.FakeContext() self.mediator.create_volume = Mock() self.mediator.create_volume.return_value = utils.get_mock_mediator_response_volume(10, "vol", "wwn", "xiv") array_type.return_value = "a9k" res = self.servicer.CreateVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.mediator.get_volume.assert_called_once_with(vol_name) self.mediator.create_volume.assert_called_once_with(vol_name, 10, {}, 'pool1')
def test_publish_volume_get_volume_mappings_one_map_for_existing_host(self, enter): context = utils.FakeContext() self.mediator.get_volume_mappings = Mock() self.mediator.get_volume_mappings.return_value = {self.hostname: 2} enter.return_value = self.mediator res = self.servicer.ControllerPublishVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.assertEqual(res.publish_context["PUBLISH_CONTEXT_LUN"], '2') self.assertEqual(res.publish_context["PUBLISH_CONTEXT_CONNECTIVITY"], "iscsi")
def test_create_volume_with_zero_size(self, a_exit, a_enter, array_type): a_enter.return_value = self.mediator context = utils.FakeContext() self.request.capacity_range.required_bytes = 0 self.mediator.create_volume = Mock() self.mediator.create_volume.return_value = utils.get_mock_mediator_response_volume(10, "vol", "wwn", "xiv") array_type.return_value = "a9k" res = self.servicer.CreateVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.mediator.create_volume.assert_called_once_with(self.request.name, 1 * 1024 * 1024 * 1024, {}, "pool1")
def test_create_volume_cuts_name_if_its_too_long(self, a_exit, a_enter, array_type): a_enter.return_value = self.mediator context = utils.FakeContext() self.request.name = "a" * 128 self.mediator.create_volume = Mock() self.mediator.create_volume.return_value = utils.get_mock_mediator_response_volume(10, "vol", "wwn", "xiv") array_type.return_value = "a9k" res = self.servicer.CreateVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.mediator.get_volume.assert_called_once_with("a" * self.mediator.max_vol_name_length)
def test_create_volume_with_name_prefix(self, a_exit, a_enter, array_type): a_enter.return_value = self.mediator context = utils.FakeContext() self.request.name = "some_name" self.request.parameters[PARAMETERS_PREFIX] = "prefix" self.mediator.create_volume = Mock() self.mediator.create_volume.return_value = utils.get_mock_mediator_response_volume(10, "vol", "wwn", "xiv") array_type.return_value = "a9k" res = self.servicer.CreateVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.mediator.create_volume.assert_called_once_with("prefix_some_name", 10, {}, "pool1")
def create_volume_returns_error(self, a_enter, create_volume, array_type, return_code, err): a_enter.return_value = self.mediator create_volume.side_effect = [err] context = utils.FakeContext() res = self.servicer.CreateVolume(self.request, context) msg = str(err) self.assertEqual(context.code, return_code) self.assertTrue(msg in context.details) self.mediator.get_volume.assert_called_once_with(vol_name) self.mediator.create_volume.assert_called_once_with(vol_name, self.capacity_bytes, {}, self.pool)
def test_unpublish_volume_get_host_by_host_identifiers_exception(self, enter): context = utils.FakeContext() self.mediator.get_host_by_host_identifiers = Mock() self.mediator.get_host_by_host_identifiers.side_effect = [array_errors.MultipleHostsFoundError("", "")] enter.return_value = self.mediator self.servicer.ControllerUnpublishVolume(self.request, context) self.assertTrue("Multiple hosts" in context.details) self.assertEqual(context.code, grpc.StatusCode.INTERNAL) self.mediator.get_host_by_host_identifiers.side_effect = [array_errors.HostNotFoundError("")] enter.return_value = self.mediator self.servicer.ControllerUnpublishVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.NOT_FOUND)
def test_publish_volume_with_connectivity_type_fc(self, enter): context = utils.FakeContext() self.mediator.get_host_by_host_identifiers.return_value = self.hostname, ["iscsi", "fc"] self.mediator.get_array_fc_wwns = Mock() self.mediator.get_array_fc_wwns.return_value = ["500143802426baf4"] self.mediator.get_array_iqns = Mock() self.mediator.get_array_iqns.return_value = [ "iqn.1994-05.com.redhat:686358c930fe"] enter.return_value = self.mediator res = self.servicer.ControllerPublishVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.OK) self.assertEqual(res.publish_context["PUBLISH_CONTEXT_LUN"], '1') self.assertEqual(res.publish_context["PUBLISH_CONTEXT_CONNECTIVITY"], "fc") self.assertEqual(res.publish_context["PUBLISH_CONTEXT_ARRAY_FC_INITIATORS"], "500143802426baf4")
def test_delete_volume_with_wrong_secrets(self, a_enter, a_exit): a_enter.return_value = self.mediator context = utils.FakeContext() self.request.secrets = {"password": "******", "management_address": "mg"} res = self.servicer.DeleteVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.INVALID_ARGUMENT, "username is missing in secrets") self.assertTrue("secret" in context.details) self.request.secrets = {"username": "******", "management_address": "mg"} res = self.servicer.DeleteVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.INVALID_ARGUMENT, "password is missing in secrets") self.assertTrue("secret" in context.details) self.request.secrets = {"username": "******", "password": "******"} res = self.servicer.DeleteVolume(self.request, context) self.assertEqual(context.code, grpc.StatusCode.INVALID_ARGUMENT, "mgmt address is missing in secrets") self.assertTrue("secret" in context.details)