package org.ovirt.engine.core.bll.gluster; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Collections; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.ovirt.engine.core.bll.BaseCommandTest; import org.ovirt.engine.core.bll.utils.GlusterUtil; import org.ovirt.engine.core.common.action.gluster.CreateBrickParameters; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.RaidType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice; import org.ovirt.engine.core.compat.Guid; public class CreateBrickCommandTest extends BaseCommandTest { private final Guid HOST_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); @Mock private VDS vds; @Mock private GlusterUtil glusterUtil; @Mock private Cluster cluster; /** * The command under test. */ @InjectMocks @Spy private CreateBrickCommand cmd = new CreateBrickCommand(new CreateBrickParameters(), null); @Test public void validateSucceeds() { doReturn(new CreateBrickParameters(HOST_ID, "brick1", "/gluster-bricks/brick1", RaidType.RAID0, null, null, Collections.singletonList(getStorageDevice("sda")))) .when(cmd).getParameters(); prepareMocks(VDSStatus.Up); assertTrue(cmd.validate()); } @Test public void validateFailsForCluster() { prepareMocks(VDSStatus.Up); mockIsGlusterEnabled(false); assertFalse(cmd.validate()); mockIsGlusterEnabled(true); assertFalse(cmd.validate()); } @Test public void validateFailsForVdsNonUp() { prepareMocks(VDSStatus.Down); assertFalse(cmd.validate()); doReturn(VDSStatus.Error).when(vds).getStatus(); assertFalse(cmd.validate()); doReturn(VDSStatus.Maintenance).when(vds).getStatus(); assertFalse(cmd.validate()); } @Test public void validateFailsForNoStorageDevice() { doReturn(new CreateBrickParameters(HOST_ID, "brick1", "/gluster-bricks/brick1", RaidType.RAID0, null, null, Collections.emptyList())) .when(cmd).getParameters(); prepareMocks(VDSStatus.Up); assertFalse(cmd.validate()); } @Test public void validateFailsForDeviceAlreadyInUse() { StorageDevice storageDevice = getStorageDevice("sda"); storageDevice.setCanCreateBrick(false); doReturn(new CreateBrickParameters(HOST_ID, "brick1", "/gluster-bricks/brick1", RaidType.RAID0, null, null, Collections.singletonList(storageDevice))) .when(cmd).getParameters(); prepareMocks(VDSStatus.Up); assertFalse(cmd.validate()); } @Test public void validateFailsForDifferentStorageDevice() { StorageDevice storageDevice1 = getStorageDevice("sda"); StorageDevice storageDevice2 = getStorageDevice("sdb"); storageDevice2.setDevType("SDA"); doReturn(new CreateBrickParameters(HOST_ID, "brick1", "/gluster-bricks/brick1", RaidType.RAID0, null, null, Arrays.asList(storageDevice1, storageDevice2))) .when(cmd).getParameters(); prepareMocks(VDSStatus.Up); assertFalse(cmd.validate()); } protected void prepareMocks(VDSStatus status) { when(cmd.getCluster()).thenReturn(cluster); doReturn(vds).when(cmd).getVds(); doReturn(status).when(vds).getStatus(); mockIsGlusterEnabled(true); } private void mockIsGlusterEnabled(boolean glusterService) { when(cluster.supportsGlusterService()).thenReturn(glusterService); } private StorageDevice getStorageDevice(String name) { StorageDevice storageDevice = new StorageDevice(); storageDevice.setCanCreateBrick(true); storageDevice.setDescription("Test Device" + name); storageDevice.setDevPath("/dev/" + name); storageDevice.setDevType("SCSI"); storageDevice.setName(name); storageDevice.setSize(10000L); storageDevice.setId(Guid.newGuid()); return storageDevice; } }