package org.ovirt.engine.core.bll.scheduling.policyunits; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.ClassRule; 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.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.scheduling.PerHostMessages; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VdsDynamicDao; import org.ovirt.engine.core.utils.MockConfigRule; import junit.framework.TestCase; @RunWith(MockitoJUnitRunner.class) public class InClusterUpgradeFilterPolicyUnitTest extends TestCase { @ClassRule public static MockConfigRule configRule = new MockConfigRule(); @Mock private VdsDynamicDao vdsDynamicDao; @InjectMocks private final InClusterUpgradeFilterPolicyUnit inClusterUpgradeFilterPolicyUnit = new InClusterUpgradeFilterPolicyUnit(null, null); private VM runningVm; private VDS newEnoughHost; private VDS tooOldHost; private VDS currentHost; @Before public void setUp() { newEnoughHost = newHost("RHEL - 7.2 - 1.el7"); tooOldHost = newHost("RHEL - 5.0 - 1.el5"); currentHost = newHost("RHEL - 6.1 - 1.el6"); runningVm = new VM(); runningVm.setRunOnVds(currentHost.getId()); when(vdsDynamicDao.get(eq(currentHost.getId()))).thenReturn(currentHost.getDynamicData()); } @Test public void shouldFilterTooOldHost() { final VDS additionalNewHost = newHost("RHEL - 7.2 - 1.el7"); assertThat(filter(runningVm, tooOldHost, newEnoughHost, additionalNewHost)) .containsOnly(newEnoughHost, additionalNewHost); } @Test public void shouldKeepCurrentOsVersionHosts() { assertThat(filter(runningVm, newEnoughHost, currentHost)).contains(newEnoughHost, currentHost); } @Test public void shouldKeepSameMajorWithOlderMinor() { newEnoughHost.setHostOs("RHEL - 6.0 - 1.el6"); assertThat(filter(runningVm, newEnoughHost, currentHost)).containsExactly(newEnoughHost, currentHost); } @Test public void shouldKeepSameMajorWithNewerMinor() { newEnoughHost.setHostOs("RHEL - 6.3 - 1.el6"); assertThat(filter(runningVm, newEnoughHost, currentHost)).containsExactly(newEnoughHost, currentHost); } @Test public void shouldDetectNeverStartedVM() { final VM newVM = new VM(); assertThat(filter(newVM, tooOldHost, newEnoughHost)).contains(newEnoughHost, tooOldHost); } @Test public void shouldDetectMissingCurrentOsInformation() { currentHost.setHostOs(null); assertThat(filter(runningVm, tooOldHost, newEnoughHost)).containsOnly(tooOldHost, newEnoughHost); } @Test public void shouldDetectMissingOsOnTargetHosts() { newEnoughHost.setHostOs(null); assertThat(filter(runningVm, tooOldHost, newEnoughHost)).isEmpty(); } @Test public void shouldDetectInvalidOsOnTargetHosts() { newEnoughHost.setHostOs("7.3"); assertThat(filter(runningVm, tooOldHost, newEnoughHost)).isEmpty(); } @Test public void shouldDetectDifferentOS() { newEnoughHost.setHostOs("Fedora - 23 - 1.f23"); assertThat(filter(runningVm, tooOldHost, newEnoughHost)).isEmpty(); } private VDS newHost(String version) { VDS host = new VDS(); host.setId(Guid.newGuid()); host.setHostOs(version); return host; } private List<VDS> filter(final VM vm, final VDS... hosts) { return inClusterUpgradeFilterPolicyUnit.filter(new Cluster(), Arrays.asList(hosts), vm, null, mock(PerHostMessages.class)); } }