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

Reply via email to