@Test public void testIscsiLunDiskWithNoPortCantBeAdded() { LunDisk disk = createISCSILunDisk(); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); initializeCommand(Guid.newGuid(), parameters); disk.getLun().getLunConnections().get(0).setPort(null); assertFalse( "checkIfLunDiskCanBeAdded() succeded for ISCSI lun which LUNs has storage_server_connection with a null port", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); assertTrue( "checkIfLunDiskCanBeAdded() failed but correct can do action hasn't been added to the return response", verifyCanDoActionMessagesContainMessage( EngineMessage.ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS)); clearCanDoActionMessages(); disk.getLun().getLunConnections().get(0).setPort(""); assertFalse( "checkIfLunDiskCanBeAdded() succeded for ISCSI lun which LUNs has storage_server_connection with a empty port", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); assertTrue( "checkIfLunDiskCanBeAdded() failed but correct can do action hasn't been added to the return response", verifyCanDoActionMessagesContainMessage( EngineMessage.ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS)); }
@Test public void canDoActionFailsOnNullDiskInterface() throws Exception { Guid storageId = Guid.newGuid(); DiskImage image = new DiskImage(); image.setvolumeFormat(VolumeFormat.COW); image.setVolumeType(VolumeType.Preallocated); AddDiskParameters params = new AddDiskParameters(Guid.newGuid(), image); initializeCommand(storageId, params); assertFalse(command.validateInputs()); assertTrue( command .getReturnValue() .getCanDoActionMessages() .contains("VALIDATION_DISK_INTERFACE_NOT_NULL")); }
/** Mock a VM. */ private VM mockVm() { VM vm = new VM(); vm.setStatus(VMStatus.Down); vm.setStoragePoolId(Guid.newGuid()); when(vmDao.get(command.getParameters().getVmId())).thenReturn(vm); return vm; }
@Test public void canDoActionSpaceValidationFails() { Guid storageId = Guid.newGuid(); initializeCommand(storageId, VolumeType.Sparse); mockVm(); mockStorageDomain(storageId); mockStoragePoolIsoMap(); mockMaxPciSlots(); doReturn(mockStorageDomainValidatorWithoutSpace()).when(command).createStorageDomainValidator(); assertFalse(command.canDoAction()); assertTrue( command .getReturnValue() .getCanDoActionMessages() .contains( EngineMessage.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN.toString())); }
/** CanDoAction should fail when the requested disk space is larger than 'MaxBlockDiskSize' */ @Test public void canDoActionMaxBlockDiskSizeCheckFails() { Guid storageId = Guid.newGuid(); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(createDiskImage(MAX_BLOCK_SIZE * 2)); initializeCommand(storageId, parameters); mockVm(); mockStorageDomain(storageId, StorageType.ISCSI); mockStoragePoolIsoMap(); mockMaxPciSlots(); assertFalse(command.canDoAction()); assertTrue( command .getReturnValue() .getCanDoActionMessages() .contains(EngineMessage.ACTION_TYPE_FAILED_DISK_MAX_SIZE_EXCEEDED.toString())); }
@Test public void canDoActionSpaceValidationSucceeds() { Guid storageId = Guid.newGuid(); initializeCommand(storageId, VolumeType.Preallocated); mockVm(); mockEntities(storageId); doReturn(mockStorageDomainValidatorWithSpace()).when(command).createStorageDomainValidator(); assertTrue(command.canDoAction()); }
@Test public void testIscsiLunCanBeAdded() { LunDisk disk = createISCSILunDisk(); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); initializeCommand(Guid.newGuid(), parameters); when(diskLunMapDao.getDiskIdByLunId(disk.getLun().getLUNId())).thenReturn(null); assertTrue( "checkIfLunDiskCanBeAdded() failed for valid iscsi lun", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); }
@Test public void testGetLunDiskFails() { VDS vds = mockVds(); LunDisk disk = createISCSILunDisk(); List<LUNs> luns = Collections.emptyList(); initializeCommand(Guid.newGuid()); doReturn(luns) .when(command) .executeGetDeviceList(any(Guid.class), any(StorageType.class), any(String.class)); assertNull(command.getLunDisk(disk.getLun(), vds)); }
@Test public void testIscsiLunCannotBeAddedIfAddingFloatingDisk() { LunDisk disk = createISCSILunDisk(ScsiGenericIO.UNFILTERED, true, DiskInterface.IDE); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); initializeCommand(Guid.newGuid(), parameters); assertFalse( "Floating disk with SCSI reservation set successfully added", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); verifyCanDoActionMessagesContainMessage( EngineMessage.ACTION_TYPE_FAILED_SCSI_RESERVATION_NOT_VALID_FOR_FLOATING_DISK); }
@Test public void testIscsiLunCanBeAddedIfScsiPassthroughEnabledAndScsiReservationEnabled() { LunDisk disk = createISCSILunDisk(ScsiGenericIO.UNFILTERED, true, DiskInterface.IDE); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); initializeCommand(Guid.newGuid(), parameters); mockVm(); mockInterfaceList(); assertTrue( "Failed to add Lun disk when scsi passthrough and scsi reservation are enabled", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); }
@Test public void testIscsiLunCannotBeAddedIfSgioIsFilteredAndScsiReservationEnabled() { LunDisk disk = createISCSILunDisk(ScsiGenericIO.FILTERED, true, DiskInterface.IDE); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); initializeCommand(Guid.newGuid(), parameters); mockVm(); mockInterfaceList(); assertFalse( "Lun disk added successfully WHILE sgio is filtered and scsi reservation is enabled", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); verifyCanDoActionMessagesContainMessage(EngineMessage.ACTION_TYPE_FAILED_SGIO_IS_FILTERED); }
/** CanDoAction should fail when creating a Shareable Disk with COW volume format */ @Test public void canDoActionShareableDiskVolumeFormatFails() { DiskImage image = createShareableDiskImage(); image.setvolumeFormat(VolumeFormat.COW); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(image); Guid storageId = Guid.newGuid(); initializeCommand(storageId, parameters); mockVm(); mockStorageDomain(storageId, Version.v3_1); mockStoragePoolIsoMap(); mockMaxPciSlots(); assertFalse(command.canDoAction()); assertTrue( command .getReturnValue() .getCanDoActionMessages() .contains(EngineMessage.SHAREABLE_DISK_IS_NOT_SUPPORTED_BY_VOLUME_FORMAT.toString())); }
@Test public void canDoActionFailWithUnsupportedDiskInterface() throws Exception { Guid storageId = Guid.newGuid(); initializeCommand(storageId); mockVm(); mockStorageDomain(storageId); mockStoragePoolIsoMap(); mockMaxPciSlots(); when(diskValidator.isReadOnlyPropertyCompatibleWithInterface()) .thenReturn(ValidationResult.VALID); when(diskValidator.isDiskInterfaceSupported(any(VM.class))) .thenReturn(new ValidationResult(EngineMessage.ACTION_TYPE_DISK_INTERFACE_UNSUPPORTED)); when(diskValidator.isVirtIoScsiValid(any(VM.class))).thenReturn(ValidationResult.VALID); when(command.getDiskValidator(any(Disk.class))).thenReturn(diskValidator); assertFalse(command.canDoAction()); assertTrue( command .getReturnValue() .getCanDoActionMessages() .contains(EngineMessage.ACTION_TYPE_DISK_INTERFACE_UNSUPPORTED.toString())); }
@Test public void canDoActionSucceedsOnDiskDomainCheckWhenStorageGuidInParamsMismatches() throws Exception { Guid storageId = Guid.newGuid(); initializeCommand(storageId); mockVmWithDisk(Guid.newGuid()); mockStorageDomain(storageId); mockStoragePoolIsoMap(); mockInterfaceList(); mockMaxPciSlots(); assertTrue(command.canDoAction()); }
@Test public void testUnknownTypeLunCantBeAdded() { LunDisk disk = createISCSILunDisk(); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); initializeCommand(Guid.newGuid(), parameters); disk.getLun().setLunType(StorageType.UNKNOWN); assertFalse( "checkIfLunDiskCanBeAdded() succeded for LUN with UNKNOWN type", command.checkIfLunDiskCanBeAdded(spyDiskValidator(disk))); assertTrue( "checkIfLunDiskCanBeAdded() failed but correct can do action hasn't been added to the return response", verifyCanDoActionMessagesContainMessage( EngineMessage.ACTION_TYPE_FAILED_DISK_LUN_HAS_NO_VALID_TYPE)); }
@Test public void canDoActionShareableDiskOnGlusterFails() { DiskImage image = createShareableDiskImage(); image.setvolumeFormat(VolumeFormat.RAW); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(image); Guid storageId = Guid.newGuid(); initializeCommand(storageId, parameters); mockVm(); mockStorageDomain(storageId, StorageType.GLUSTERFS, Version.v3_1); mockStoragePoolIsoMap(); mockMaxPciSlots(); assertFalse(command.canDoAction()); assertTrue( command .getReturnValue() .getCanDoActionMessages() .contains( EngineMessage.ACTION_TYPE_FAILED_SHAREABLE_DISKS_NOT_SUPPORTED_ON_GLUSTER_DOMAIN .toString())); }
@Test public void testLunDiskValid() { VDS vds = mockVds(); LunDisk disk = createISCSILunDisk(); disk.setDiskInterface(DiskInterface.VirtIO); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); parameters.setVdsId(vds.getId()); initializeCommand(Guid.newGuid(), parameters); command.setVds(vds); mockVm(); mockMaxPciSlots(); mockInterfaceList(); List<LUNs> luns = Collections.singletonList(disk.getLun()); doReturn(luns) .when(command) .executeGetDeviceList(any(Guid.class), any(StorageType.class), (any(String.class))); CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); }
@Test public void testLunDiskInvalid() { VDS vds = mockVds(); LunDisk disk = createISCSILunDisk(); disk.setDiskInterface(DiskInterface.VirtIO); AddDiskParameters parameters = createParameters(); parameters.setDiskInfo(disk); parameters.setVdsId(vds.getId()); initializeCommand(Guid.newGuid(), parameters); command.setVds(vds); mockVm(); mockMaxPciSlots(); mockInterfaceList(); List<LUNs> luns = Collections.emptyList(); doReturn(luns) .when(command) .executeGetDeviceList(any(Guid.class), any(StorageType.class), any(String.class)); CanDoActionTestUtils.runAndAssertCanDoActionFailure( command, EngineMessage.ACTION_TYPE_FAILED_DISK_LUN_INVALID); }
private boolean verifyCanDoActionMessagesContainMessage(EngineMessage message) { return command.getReturnValue().getCanDoActionMessages().contains(message.toString()); }
/** Run the canDoAction and assert that it succeeds */ private void runAndAssertCanDoActionSuccess() { boolean canDoAction = command.canDoAction(); log.info("{}", command.getReturnValue().getCanDoActionMessages()); assertTrue(canDoAction); }
private void clearCanDoActionMessages() { command.getReturnValue().getCanDoActionMessages().clear(); }