package org.ovirt.engine.core.bll; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith; import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.isValid; import java.util.Collection; import java.util.Collections; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.bll.network.macpool.ReadMacPool; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.utils.ReplacementUtils; @RunWith(MockitoJUnitRunner.class) public class ChangeVmClusterValidatorTest { @Mock private ReadMacPool targetMacPool; @InjectMocks ChangeVmClusterValidator underTest = new ChangeVmClusterValidator(null, null, null); private static final String MAC_TO_MIGRATE = "mac"; private static final List<String> MACS_TO_MIGRATE = Collections.singletonList(MAC_TO_MIGRATE); @Test public void testMacPoolChangedAndMacsCannotBeMoved() throws Exception { mockAllowedDuplicatesOnTargetPool(false); mockMacIsUsedInTargetPool(true); EngineMessage engineMessage = EngineMessage.ACTION_TYPE_FAILED_CANNOT_UPDATE_VM_TARGET_CLUSTER_HAS_DUPLICATED_MACS; Collection<String> replacements = ReplacementUtils.getListVariableAssignmentString(engineMessage, MACS_TO_MIGRATE); assertThat(underTest.validateCanMoveMacs(targetMacPool, MACS_TO_MIGRATE), failsWith(engineMessage, replacements)); } @Test public void testMacPoolChangedAndMacsCanBeMovedBecauseOfNoDuplicates() throws Exception { mockAllowedDuplicatesOnTargetPool(false); mockMacIsUsedInTargetPool(false); assertThat(underTest.validateCanMoveMacs(targetMacPool, MACS_TO_MIGRATE), isValid()); } @Test public void testMacPoolChangedAndMacsCanBeMovedBecauseOfAllowedDuplicates() throws Exception { mockAllowedDuplicatesOnTargetPool(true); mockMacIsUsedInTargetPool(true); assertThat(underTest.validateCanMoveMacs(targetMacPool, MACS_TO_MIGRATE), isValid()); } private void mockMacIsUsedInTargetPool(boolean value) { when(targetMacPool.isMacInUse(MAC_TO_MIGRATE)).thenReturn(value); } private void mockAllowedDuplicatesOnTargetPool(boolean allowed) { when(targetMacPool.isDuplicateMacAddressesAllowed()).thenReturn(allowed); } }