package org.ovirt.engine.core.bll.scheduling.commands; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.util.ArrayList; import org.junit.Before; 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.ValidateTestUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.scheduling.AffinityGroup; import org.ovirt.engine.core.common.scheduling.parameters.AffinityGroupCRUDParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VmStaticDao; import org.ovirt.engine.core.dao.scheduling.AffinityGroupDao; public class EditAffinityGroupCommandTest extends BaseCommandTest { private static final String AFFINITY_GROUP_NAME = "test123"; Guid clusterId = Guid.newGuid(); @Mock AffinityGroupDao affinityGroupDao; @Mock VmStaticDao vmStaticDao; AffinityGroupCRUDParameters parameters = new AffinityGroupCRUDParameters(null, createAffinityGroup()); @Spy @InjectMocks EditAffinityGroupCommand command = new EditAffinityGroupCommand(parameters, null); private AffinityGroup affinityGroup; @Before public void setup() { AffinityGroup affinityGroup2 = new AffinityGroup(); affinityGroup2.setClusterId(clusterId); affinityGroup2.setName(AFFINITY_GROUP_NAME + "##"); doReturn(affinityGroup2).when(command).getAffinityGroup(); doReturn(new Cluster()).when(command).getCluster(); VmStatic vmStatic = new VmStatic(); vmStatic.setClusterId(clusterId); doReturn(vmStatic).when(vmStaticDao).get(any(Guid.class)); doReturn(clusterId).when(command).getClusterId(); } @Test public void validate_noAffinityGroup_Test() { doReturn(null).when(command).getAffinityGroup(); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_INVALID_AFFINITY_GROUP_ID); } @Test public void validate_changeClusterIds_Test() { doReturn(Guid.newGuid()).when(command).getClusterId(); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_CANNOT_CHANGE_CLUSTER_ID); } @Test public void validate_testNameChange_Test() { doReturn(new AffinityGroup()).when(affinityGroupDao).getByName(affinityGroup.getName()); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_AFFINITY_GROUP_NAME_EXISTS); } @Test public void validate_succeed_Test() { ValidateTestUtils.runAndAssertValidateSuccess(command); // validateParameters is tests at {@link AddAffinityGroupCommandTest} verify(command, times(1)).validateParameters(); } @Test public void excuteCommandTest() { command.executeCommand(); assertEquals(AuditLogType.USER_UPDATED_AFFINITY_GROUP, command.getAuditLogTypeValue()); } private AffinityGroup createAffinityGroup() { affinityGroup = new AffinityGroup(); affinityGroup.setName(AFFINITY_GROUP_NAME); affinityGroup.setClusterId(clusterId); affinityGroup.setVmIds(new ArrayList<>()); return affinityGroup; } }