Frank Kobzik has uploaded a new change for review. Change subject: frontend: console models cache ......................................................................
frontend: console models cache This patch adds first part of console tests, which test *ConsoleModel classes. Change-Id: I767e7e36b976443b3340249bbe05bc1fc49b80bc Signed-off-by: Frantisek Kobzik <fkob...@redhat.com> --- A frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModelTest.java A frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModelTest.java A frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModelTest.java A frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModelTest.java 4 files changed, 444 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/23974/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModelTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModelTest.java new file mode 100644 index 0000000..5f666b2 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModelTest.java @@ -0,0 +1,85 @@ +package org.ovirt.engine.ui.uicommonweb.models.vms; + +import java.util.Arrays; +import java.util.List; +import org.junit.Assert; +import org.junit.Before; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; +import org.ovirt.engine.ui.uicommonweb.ITypeResolver; +import org.ovirt.engine.ui.uicommonweb.TypeResolver; +import org.ovirt.engine.ui.uicommonweb.models.Model; + + +import static org.hamcrest.core.Is.is; +import static org.mockito.Mockito.when; + +@RunWith(Theories.class) +public class ConsoleModelTest { + + @Mock + ITypeResolver typeResolverMock; + + @Mock + ConsoleUtils consoleUtilsMock; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); // we have to do this manually since we're using theories + TypeResolver.initialize(typeResolverMock); + when(typeResolverMock.resolve(ConsoleUtils.class)).thenReturn(consoleUtilsMock); + } + + @Mock + Model parentModelMock; + + @Mock + VM vmMock; + + @DataPoints + public static VMStatus statuses[] = new VMStatus[] {VMStatus.Up}; + + @DataPoints + public static boolean booleans[] = new boolean[] { true, false }; + + @Theory + public void canConnectWithGivenParamsTheory(VMStatus vmStatus, boolean forceVmUp, final boolean canBeSelected) { + when(vmMock.getStatus()).thenReturn(vmStatus); + + ConsoleModel cm = new ConsoleModel(vmMock, parentModelMock) { + @Override + protected void connect() { } + + @Override + public boolean canBeSelected() { + return canBeSelected; + } + }; + + cm.setForceVmStatusUp(forceVmUp); + + List<VMStatus> connectableStatuses = Arrays.asList(new VMStatus[] { + VMStatus.Up, + VMStatus.PoweringUp, + VMStatus.PoweringDown, + VMStatus.Paused, + VMStatus.RebootInProgress, + }); + + boolean connectable = canBeSelected && + (forceVmUp ? vmStatus == VMStatus.Up : connectableStatuses.contains(vmStatus)); + + Assert.assertThat(cm.canConnect(), is(connectable)); + } + + public void testMakeConsoleConfigRequest() throws Exception { + + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModelTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModelTest.java new file mode 100644 index 0000000..c318c8d9 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModelTest.java @@ -0,0 +1,134 @@ +package org.ovirt.engine.ui.uicommonweb.models.vms; + +import java.util.Arrays; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.queries.ConfigurationValues; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; +import org.ovirt.engine.ui.uicommonweb.ILogger; +import org.ovirt.engine.ui.uicommonweb.ITypeResolver; +import org.ovirt.engine.ui.uicommonweb.TypeResolver; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.UIConstants; + + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(Theories.class) +public class RdpConsoleModelTest { + + @Mock + ITypeResolver typeResolverMock; + + @Mock + ConsoleUtils consoleUtilsMock; + + @Mock + Model parentModelMock; + + @Mock + VM vmMock; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); // we have to do this manually since we're using theories + TypeResolver.initialize(typeResolverMock); + when(typeResolverMock.resolve(ConsoleUtils.class)).thenReturn(consoleUtilsMock); + + UIConstants constantsMock = Mockito.mock(UIConstants.class); + when(constantsMock.RDPTitle()).thenReturn("test rdp title"); // $NON-NLS-1$ + ConstantsManager.setConstants(constantsMock); + } + + @Test + public void testConnect() throws Exception { + when(vmMock.getId()).thenReturn(Guid.Empty); + when(vmMock.getRunOnVds()).thenReturn(Guid.Empty); + when(vmMock.getVmHost()).thenReturn("myHost"); // $NON-NLS-1$ + IRdp rdpImplMock = Mockito.mock(IRdp.class); + + RdpConsoleModel model = new TestingRdpConsoleModel(vmMock, parentModelMock, true); + model.setrdp(rdpImplMock); + model.connect(); + + verify(rdpImplMock, times(1)).connect(); + } + + @Test + public void testCanBeSelected() throws Exception { + TestingRdpConsoleModel withWindows = new TestingRdpConsoleModel(vmMock, parentModelMock, true); + assertTrue("Model with windows machine should be selectable. ", withWindows.canBeSelected()); // $NON-NLS-1$ + } + + @Test + public void testCannotBeSelected() throws Exception { + TestingRdpConsoleModel woWindows = new TestingRdpConsoleModel(vmMock, parentModelMock, false); + assertFalse("Model without windows machine shouldn't be selectable. ", woWindows.canBeSelected()); // $NON-NLS-1$ + } + + @DataPoints + public static VMStatus statuses[] = VMStatus.values(); + + @DataPoints + public static boolean booleans[] = new boolean[] {true, false}; + + @Theory + public void machineConnectability(VMStatus status, boolean isWindows) throws Exception { + when(vmMock.getStatus()).thenReturn(status); + TestingRdpConsoleModel model = new TestingRdpConsoleModel(vmMock, parentModelMock, isWindows); + + List<VMStatus> connectableStatuses = Arrays.asList(new VMStatus[] {VMStatus.Up, VMStatus.PoweringDown}); + boolean connectable = isWindows && connectableStatuses.contains(status); + + assertThat(model.canConnect(), is(connectable)); + } + + private class TestingRdpConsoleModel extends RdpConsoleModel { + + private boolean isWindows; + + public TestingRdpConsoleModel(VM myVm, Model parentModel, final boolean isWindows) { + super(myVm, parentModel); + this.isWindows = isWindows; + } + + @Override + boolean isVmOsWindows() { + return isWindows; + } + + @Override + protected ILogger getLogger() { + return Mockito.mock(ILogger.class); + } + + @Override + protected <T> T getConfigValuePreConverted(ConfigurationValues val) { + switch (val) { + case UseFqdnForRdpIfAvailable: + return (T) Boolean.TRUE; + } + + return null; + } + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModelTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModelTest.java new file mode 100644 index 0000000..448b807 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModelTest.java @@ -0,0 +1,121 @@ +package org.ovirt.engine.ui.uicommonweb.models.vms; + +import java.util.Collections; +import org.junit.Before; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.ovirt.engine.core.common.businessentities.DisplayType; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.queries.ConfigurationValues; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.ui.uicommonweb.Configurator; +import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; +import org.ovirt.engine.ui.uicommonweb.ILogger; +import org.ovirt.engine.ui.uicommonweb.ITypeResolver; +import org.ovirt.engine.ui.uicommonweb.TypeResolver; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.IEventListener; +import org.ovirt.engine.ui.uicompat.UIConstants; + + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.when; + +@RunWith(Theories.class) +public class SpiceConsoleModelTest { + + @Mock + ITypeResolver typeResolverMock; + + @Mock + ConsoleUtils consoleUtilsMock; + + @Mock + Model parentModelMock; + + @Mock + VM vmMock; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); // we have to do this manually since we're using theories + TypeResolver.initialize(typeResolverMock); + when(typeResolverMock.resolve(ConsoleUtils.class)).thenReturn(consoleUtilsMock); + + UIConstants constantsMock = Mockito.mock(UIConstants.class); + when(constantsMock.spiceTitle()).thenReturn("test spice title"); // $NON-NLS-1$ + ConstantsManager.setConstants(constantsMock); + } + + @DataPoints + public static DisplayType displayTypesWithNull[] = new DisplayType[] { null, DisplayType.qxl, DisplayType.vnc }; + + @DataPoints + public static boolean[] booleans = {true, false}; + + @Theory + public void selectabilityTheory(DisplayType displayType, DisplayType defaultDisplayType, boolean hasSpiceSupport) { + + ISpice spiceImplMock = Mockito.mock(ISpice.class); + Event mockEvent = Mockito.mock(Event.class); + when(mockEvent.getListeners()).thenReturn(Collections.<IEventListener>emptyList()); + when(spiceImplMock.getConnectedEvent()).thenReturn(mockEvent); + when(typeResolverMock.resolve(ISpiceNative.class)).thenReturn(spiceImplMock); + + when(vmMock.getId()).thenReturn(Guid.Empty); + when(vmMock.getRunOnVds()).thenReturn(Guid.Empty); + when(vmMock.getVmHost()).thenReturn("myHost"); // $NON-NLS-1$ + + when(vmMock.getDisplayType()).thenReturn(displayType); + when(vmMock.getDefaultDisplayType()).thenReturn(defaultDisplayType); + + SpiceConsoleModel model = new TestingSpiceConsoleModel(vmMock, parentModelMock, hasSpiceSupport); + + boolean displayProtocolOkWithSpice = + displayType == DisplayType.qxl || displayType == null && defaultDisplayType == DisplayType.qxl; + + assertThat(model.canBeSelected(), is(hasSpiceSupport && displayProtocolOkWithSpice)); + } + + private class TestingSpiceConsoleModel extends SpiceConsoleModel { + private final boolean hasSpiceSupport; + + public TestingSpiceConsoleModel(VM vmMock, Model parentModelMock, boolean hasSpiceSupport) { + super(vmMock, parentModelMock); + this.hasSpiceSupport = hasSpiceSupport; + } + + @Override + protected <T> T getConfigValuePreConverted(ConfigurationValues val) { + switch (val) { + case ClientModeSpiceDefault: + return (T) ClientConsoleMode.Native.toString(); + } + return null; + } + + @Override + public Configurator getConfigurator() { + Configurator mockConfigurator = Mockito.mock(Configurator.class); + return mockConfigurator; + } + + @Override + public ILogger getLogger() { + return Mockito.mock(ILogger.class); + } + + @Override + boolean hasVmSpiceSupport() { + return hasSpiceSupport; + } + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModelTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModelTest.java new file mode 100644 index 0000000..d8b9bed --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModelTest.java @@ -0,0 +1,104 @@ +package org.ovirt.engine.ui.uicommonweb.models.vms; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.ovirt.engine.core.common.businessentities.DisplayType; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; +import org.ovirt.engine.ui.uicommonweb.ITypeResolver; +import org.ovirt.engine.ui.uicommonweb.TypeResolver; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.UIConstants; + + +import static junit.framework.Assert.assertEquals; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.when; + +@RunWith(Theories.class) +public class VncConsoleModelTest { + + @Mock + ITypeResolver typeResolverMock; + + @Mock + ConsoleUtils consoleUtilsMock; + + @Mock + Model parentModelMock; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); // we have to do this manually since we're using theories + TypeResolver.initialize(typeResolverMock); + when(typeResolverMock.resolve(ConsoleUtils.class)).thenReturn(consoleUtilsMock); + + UIConstants constantsMock = Mockito.mock(UIConstants.class); + when(constantsMock.VNCTitle()).thenReturn("test spice title"); // $NON-NLS-1$ + ConstantsManager.setConstants(constantsMock); + } + + @Test + public void testGetPort() throws Exception { + VM mock = Mockito.mock(VM.class); + + when(mock.getDisplay()).thenReturn(5900); + when(consoleUtilsMock.isWebSocketProxyDefined()).thenReturn(true); + + VncConsoleModel model = new VncConsoleModel(mock, parentModelMock); + + assertEquals("5900", model.getPort()); // $NON-NLS-1$ + } + + @Test(expected = IllegalStateException.class) + public void testSetVncImplementation() throws Exception { + VM mock = Mockito.mock(VM.class); + + when(consoleUtilsMock.isWebSocketProxyDefined()).thenReturn(false); + + VncConsoleModel model = new VncConsoleModel(mock, parentModelMock); + model.setVncImplementation(VncConsoleModel.ClientConsoleMode.NoVnc); + } + + @Test + public void testSetVncImplementation2() { + VM mock = Mockito.mock(VM.class); + + when(consoleUtilsMock.isWebSocketProxyDefined()).thenReturn(false); + + VncConsoleModel model = new VncConsoleModel(mock, parentModelMock); + model.setVncImplementation(VncConsoleModel.ClientConsoleMode.Native); + + Assert.assertEquals(VncConsoleModel.ClientConsoleMode.Native, + model.getClientConsoleMode()); + } + + @DataPoints + public static DisplayType displayTypesWithNull[] = new DisplayType[] { null, DisplayType.qxl, DisplayType.vnc }; + + @Theory + public void selectabilityTheory(DisplayType displayType, DisplayType defaultDisplayType) { + VM mock = Mockito.mock(VM.class); + + when(mock.getDisplayType()).thenReturn(displayType); + when(mock.getDefaultDisplayType()).thenReturn(defaultDisplayType); + + VncConsoleModel model = new VncConsoleModel(mock, parentModelMock); + + boolean displayProtocolOkWithVnc = + displayType == DisplayType.vnc || displayType == null && defaultDisplayType == DisplayType.vnc; + + assertThat(model.canBeSelected(), is(displayProtocolOkWithVnc)); + } + +} -- To view, visit http://gerrit.ovirt.org/23974 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I767e7e36b976443b3340249bbe05bc1fc49b80bc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Frank Kobzik <fkob...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches