Ori Liel has uploaded a new change for review. Change subject: engine: Add unit-tests for fence-proxy selection ......................................................................
engine: Add unit-tests for fence-proxy selection Change-Id: I95f00b38c78ef7b6a72ee141d9090bf5e60eb679 Signed-off-by: Ori Liel <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceProxyLocator.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceProxyLocatorTest.java 3 files changed, 229 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/36419/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java index ab289a0..39fa118 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java @@ -53,7 +53,7 @@ */ public VDSFenceReturnValue checkStatus() { VDSFenceReturnValue returnValue = null; - VDS proxyHost = new FenceProxyLocator(_vds, fencingPolicy).findProxyHost(false); + VDS proxyHost = new FenceProxyLocator(_vds, fencingPolicy).findProxyHost(); if (proxyHost == null) { returnValue = proxyNotFound(); } else { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceProxyLocator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceProxyLocator.java index 666061f..a38db0f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceProxyLocator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceProxyLocator.java @@ -74,7 +74,7 @@ } } if (proxyHost == null) { - log.error("Failed to run Power Management command on Host {}, no running proxy Host was found.", + log.error("Can not run Power Management command on Host {}, no suitable proxy Host was found.", _vds.getName()); return null; } @@ -177,4 +177,12 @@ DC, OTHER_DC; }; + + public FencingPolicy getFencingPolicy() { + return fencingPolicy; + } + + public void setFencingPolicy(FencingPolicy fencingPolicy) { + this.fencingPolicy = fencingPolicy; + } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceProxyLocatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceProxyLocatorTest.java new file mode 100644 index 0000000..e097228 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceProxyLocatorTest.java @@ -0,0 +1,219 @@ +package org.ovirt.engine.core.bll; + +import java.util.LinkedList; +import java.util.List; + +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.common.businessentities.FencingPolicy; +import org.ovirt.engine.core.common.businessentities.NonOperationalReason; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator; +import org.ovirt.engine.core.dao.VdsDAO; +import org.ovirt.engine.core.utils.MockConfigRule; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class FenceProxyLocatorTest { + + private static String HOST_NAME = "hostname"; + private static Guid FENCECD_HOST_ID = new Guid("11111111-1111-1111-1111-111111111111"); + private static Guid FENCED_HOST_CLUSTER_ID = new Guid("22222222-2222-2222-2222-222222222222"); + private static Guid FENCED_HOST_DATACENTER_ID = new Guid("33333333-3333-3333-3333-333333333333"); + private static Guid OTHER_HOST_ID_1 = new Guid("55555555-5555-5555-5555-555555555555"); + private static Guid OTHER_HOST_ID_2 = Guid.Empty; + private static Guid OTHER_CLUSTER_ID = new Guid("66666666-6666-6666-6666-666666666666"); + private static Guid OTHER_DATACENTER_ID = new Guid("77777777-7777-7777-7777-777777777777"); + + @ClassRule + public static MockConfigRule configRule = + new MockConfigRule(MockConfigRule.mockConfig(ConfigValues.FindFenceProxyRetries, 2), + MockConfigRule.mockConfig(ConfigValues.FindFenceProxyDelayBetweenRetriesInSec, 2), + MockConfigRule.mockConfig(ConfigValues.FenceProxyDefaultPreferences, "cluster,dc,other_dc"), + MockConfigRule.mockConfig(ConfigValues.VdsFenceOptionTypes, "secure=bool,port=int,slot=int")); + + @Mock + private VDS vds; + + @Mock + private DbFacade dbFacade; + + @Mock + private VdsDAO vdsDao; + + private FenceProxyLocator fenceProxyLocator; + + @Before + public void setup() { + mockVds(); + fenceProxyLocator = new FenceProxyLocator(vds); + when(dbFacade.getVdsDao()).thenReturn(vdsDao); + DbFacadeLocator.setDbFacade(dbFacade); + } + + private void mockVds() { + when(vds.getName()).thenReturn(HOST_NAME); + when(vds.getId()).thenReturn(FENCECD_HOST_ID); + when(vds.getVdsGroupId()).thenReturn(FENCED_HOST_CLUSTER_ID); + when(vds.getStoragePoolId()).thenReturn(FENCED_HOST_DATACENTER_ID); + } + + @Test + public void findProxyHost() { + List<VDS> hosts = new LinkedList<>(); + VDS vds = new VDS(); + vds.setId(OTHER_HOST_ID_2); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_0); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(); + assertNotNull(proxyHost); + } + + @Test + public void findProxyHost_ExcludesSelf() { + List<VDS> hosts = new LinkedList<>(); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(); + assertNull(proxyHost); + } + + @Test + public void findProxyHost_ExcludedHost() { + List<VDS> hosts = new LinkedList<>(); + VDS vds = new VDS(); + vds.setId(OTHER_HOST_ID_1); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(false, OTHER_HOST_ID_1); + assertNull(proxyHost); + } + + @Test + public void findProxyHost_ExcludesUnreachable() { + List<VDS> hosts = new LinkedList<>(); + VDS vds = new VDS(); + vds.setId(OTHER_HOST_ID_2); + vds.setStatus(VDSStatus.NonResponsive); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + vds.getDynamicData().setNonOperationalReason(NonOperationalReason.NETWORK_UNREACHABLE); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(false); + assertNull(proxyHost); + } + + @Test + public void findProxyHost_ChooseTheSupportedCluster() { + List<VDS> hosts = new LinkedList<>(); + VDS vds = new VDS(); + vds.setId(OTHER_HOST_ID_1); + vds.setVdsGroupId(OTHER_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + vds = new VDS(); + vds.setId(OTHER_HOST_ID_2); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(false); + assertNotNull(proxyHost); + assertEquals(proxyHost.getId(), OTHER_HOST_ID_2); + } + + @Test + public void findProxyHost_ChooseByDCWhenNoClusterMatch() { + when(vdsDao.getAll()).thenReturn(createHosts()).thenReturn(createHosts()); + VDS proxyHost = fenceProxyLocator.findProxyHost(false); + assertNotNull(proxyHost); + assertEquals(proxyHost.getId(), OTHER_HOST_ID_2); + } + + private List<VDS> createHosts() { + List<VDS> hosts = new LinkedList<>(); + VDS vds = new VDS(); + vds.setId(OTHER_HOST_ID_1); + vds.setVdsGroupId(OTHER_CLUSTER_ID); + vds.setStoragePoolId(OTHER_DATACENTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + hosts.add(vds); + vds = new VDS(); + vds.setId(OTHER_HOST_ID_2); + vds.setVdsGroupId(OTHER_CLUSTER_ID); + vds.setStoragePoolId(FENCED_HOST_DATACENTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + hosts.add(vds); + return hosts; + } + + @Test + public void findProxyHost_PreferUpHost() { + List<VDS> hosts = new LinkedList<>(); + VDS vds = new VDS(); + vds.setId(OTHER_HOST_ID_1); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + vds.setStatus(VDSStatus.Maintenance); + hosts.add(vds); + vds = new VDS(); + vds.setId(OTHER_HOST_ID_2); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + vds.setStatus(VDSStatus.Up); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(false); + assertNotNull(proxyHost); + assertEquals(proxyHost.getId(), OTHER_HOST_ID_2); + } + + @Test + public void findProxyHost_FencingPolicySupported() { + FencingPolicy policy = new FencingPolicy(); + fenceProxyLocator.setFencingPolicy(policy); + VDS vds = new VDS(); + vds.setSupportedClusterLevels(Version.v3_0.toString()); + vds.setId(OTHER_HOST_ID_2); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + List<VDS> hosts = new LinkedList<>(); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(false); + assertNotNull(proxyHost); + } + + @Test + public void findProxyHost_FencingPolicyNotSupported() { + FencingPolicy policy = new FencingPolicy(); + fenceProxyLocator.setFencingPolicy(policy); + VDS vds = new VDS(); + vds.setSupportedClusterLevels(Version.v3_1.toString()); + vds.setId(OTHER_HOST_ID_2); + vds.setVdsGroupId(FENCED_HOST_CLUSTER_ID); + vds.setVdsGroupCompatibilityVersion(Version.v3_5); + List<VDS> hosts = new LinkedList<>(); + hosts.add(vds); + when(vdsDao.getAll()).thenReturn(hosts); + VDS proxyHost = fenceProxyLocator.findProxyHost(false); + assertNull(proxyHost); + } + +} \ No newline at end of file -- To view, visit http://gerrit.ovirt.org/36419 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I95f00b38c78ef7b6a72ee141d9090bf5e60eb679 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ori Liel <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
