Frank Kobzik has uploaded a new change for review.

Change subject: frontend: Prepare frontend for console unit tests
......................................................................

frontend: Prepare frontend for console unit tests

This patch makes couple of adjustments for console models to be
testable (mostly static attributes).

Change-Id: Icde9131d9415ba500eb2a222dc4e7187bf82f868
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/ConstantsManager.java
6 files changed, 82 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/23973/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
index f14ee6c..20c516b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Configurator.java
@@ -25,8 +25,14 @@
 public abstract class Configurator {
 
     private static final String DOCUMENTATION_LIB_PATH = "html/"; //$NON-NLS-1$
-    private static final String DOCUMENTATION_ROOT = 
BaseContextPathData.getInstance().getRelativePath()
-            + "docs/manual"; //$NON-NLS-1$
+    static String DOCUMENTATION_ROOT;
+
+    private static String getDocumentationRoot() {
+        if (DOCUMENTATION_ROOT == null) {
+            DOCUMENTATION_ROOT = 
BaseContextPathData.getInstance().getRelativePath() + "docs/manual"; 
//$NON-NLS-1$;
+        }
+        return DOCUMENTATION_ROOT;
+    }
 
     private static String documentationLangPath;
 
@@ -179,7 +185,7 @@
      * @return Documentation base URL, including the trailing slash.
      */
     public String getDocumentationBaseURL() {
-        return FrontendUrlUtils.getRootURL() + DOCUMENTATION_ROOT + "/"; 
//$NON-NLS-1$
+        return FrontendUrlUtils.getRootURL() + getDocumentationRoot() + "/"; 
//$NON-NLS-1$
     }
 
     /**
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
index d13a95b..27affc5 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
@@ -9,6 +9,7 @@
 import com.google.gwt.user.client.ui.TextArea;
 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.common.queries.HasAdElementReconnectPermissionParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -18,6 +19,7 @@
 import org.ovirt.engine.ui.frontend.utils.BaseContextPathData;
 import org.ovirt.engine.ui.uicommonweb.BaseCommandTarget;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.Model;
@@ -27,8 +29,16 @@
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
 public abstract class ConsoleModel extends EntityModel {
-    public static final String GET_ATTACHMENT_SERVLET_URL = 
BaseContextPathData.getInstance().getPath()
-            + "services/attachment/"; //$NON-NLS-1$
+
+    static String ATTACHMENT_SERVLET_URL;
+
+    private static String getAttachmentServletUrl() {
+        if (ATTACHMENT_SERVLET_URL == null) {
+            ATTACHMENT_SERVLET_URL = 
BaseContextPathData.getInstance().getPath() + "services/attachment/"; 
//$NON-NLS-1$
+        }
+
+        return ATTACHMENT_SERVLET_URL;
+    }
 
     private static String EJECT_LABEL;
 
@@ -262,7 +272,7 @@
         formPanel.setMethod(FormPanel.METHOD_POST);
         formPanel.getElement().setId("conform" + 
Double.valueOf(Math.random()).toString());//$NON-NLS-1$
         formPanel.setWidget(innerPanel);
-        formPanel.setAction(GET_ATTACHMENT_SERVLET_URL + fileName);
+        formPanel.setAction(getAttachmentServletUrl() + fileName);
         formPanel.setEncoding(FormPanel.ENCODING_URLENCODED);
         formPanel.setVisible(false);
 
@@ -286,4 +296,9 @@
         return textArea;
     }
 
+    // abstraction that allows overriding when testing
+    protected <T> T getConfigValuePreConverted(ConfigurationValues val) {
+        return (T) AsyncDataProvider.getConfigValuePreConverted(val);
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModel.java
index ec4f182..96ef2c2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RdpConsoleModel.java
@@ -58,7 +58,7 @@
         return useFQDNIfAvailable;
     }
 
-    private void setrdp(IRdp value) {
+    void setrdp(IRdp value) {
         privaterdp = value;
     }
 
@@ -67,9 +67,20 @@
 
         setTitle(ConstantsManager.getInstance().getConstants().RDPTitle());
         this.consoleUtils = (ConsoleUtils) 
TypeResolver.getInstance().resolve(ConsoleUtils.class);
-        setRdpImplementation(
-                ClientConsoleMode.valueOf((String) 
AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.ClientModeRdpDefault)));
-        setUseFqdnIfAvailable((Boolean) 
AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.UseFqdnForRdpIfAvailable));
+        setRdpImplementation(readDefaultConsoleClientMode());
+        setUseFqdnIfAvailable((Boolean) 
getConfigValuePreConverted(ConfigurationValues.UseFqdnForRdpIfAvailable));
+    }
+
+     /**
+     * Safely determine the default client mode for RDP.
+     * @return default RDP client mode read from engine config or 'Native' if 
there is a problem when retrieving the value.
+     */
+    private ClientConsoleMode readDefaultConsoleClientMode() {
+        try {
+            return ClientConsoleMode.valueOf((String) 
getConfigValuePreConverted(ConfigurationValues.ClientModeRdpDefault));
+        } catch (Exception e) {
+            return ClientConsoleMode.Native;
+        }
     }
 
     @Override
@@ -105,13 +116,17 @@
 
     @Override
     public boolean canBeSelected() {
-        return AsyncDataProvider.isWindowsOsType(getEntity().getOs());
+        return isVmOsWindows();
     }
 
     @Override
     public boolean canConnect() {
         return (getEntity().getStatus() == VMStatus.Up || 
getEntity().getStatus() == VMStatus.PoweringDown)
-                && AsyncDataProvider.isWindowsOsType(getEntity().getVmOsId());
+                && isVmOsWindows();
+    }
+
+    boolean isVmOsWindows() {
+        return AsyncDataProvider.isWindowsOsType(getEntity().getVmOsId());
     }
 
     public void raiseErrorEvent(ErrorCodeEventArgs e) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
index 80c230c..1befae0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
@@ -65,7 +65,7 @@
     private ISpice privatespice;
     private ClientConsoleMode consoleMode;
 
-    private void setspice(ISpice value) {
+    void setspice(ISpice value) {
         privatespice = value;
     }
 
@@ -90,8 +90,7 @@
     }
 
     protected ClientConsoleMode getDefaultConsoleMode() {
-        return ClientConsoleMode.valueOf((String) AsyncDataProvider
-                
.getConfigValuePreConverted(ConfigurationValues.ClientModeSpiceDefault));
+        return ClientConsoleMode.valueOf((String) 
getConfigValuePreConverted(ConfigurationValues.ClientModeSpiceDefault));
     }
 
     public ISpice getspice() {
@@ -166,8 +165,7 @@
             }
 
             // Don't connect if there VM is not running on any host.
-            if (getEntity().getRunOnVds() == null)
-            {
+            if (getEntity().getRunOnVds() == null) {
                 return;
             }
 
@@ -191,9 +189,12 @@
         DisplayType displayType = getEntity().getDisplayType() != null
                 ? getEntity().getDisplayType()
                 : getEntity().getDefaultDisplayType();
-        boolean hasVmSpiceSupport = 
Boolean.TRUE.equals(AsyncDataProvider.hasSpiceSupport(getEntity().getOs(), 
getEntity().getVdsGroupCompatibilityVersion()));
 
-        return displayType == DisplayType.qxl && hasVmSpiceSupport;
+        return displayType == DisplayType.qxl && hasVmSpiceSupport();
+    }
+
+    boolean hasVmSpiceSupport() {
+        return 
Boolean.TRUE.equals(AsyncDataProvider.hasSpiceSupport(getEntity().getOs(), 
getEntity().getVdsGroupCompatibilityVersion()));
     }
 
     @Override
@@ -510,7 +511,7 @@
             return getEntity().getVdsGroupSpiceProxy();
         }
 
-        String globalSpiceProxy = (String) 
AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.SpiceProxyDefault);
+        String globalSpiceProxy = (String) 
getConfigValuePreConverted(ConfigurationValues.SpiceProxyDefault);
         if (!StringHelper.isNullOrEmpty(globalSpiceProxy)) {
             return globalSpiceProxy;
         }
@@ -650,8 +651,7 @@
                 + vmName + ", cancel open spice console request."); 
//$NON-NLS-1$
     }
 
-    public void spiceConnect()
-    {
+    public void spiceConnect() {
         try {
             getspice().connect();
         } catch (RuntimeException ex) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
index 18f7ec7..c8f60a0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
@@ -37,7 +37,7 @@
 
     private IVnc vncImpl;
 
-    private String getPort() {
+    String getPort() {
         if (getEntity() == null && getEntity().getDisplay() == null) {
             return null;
         }
@@ -78,7 +78,17 @@
         }
     }
 
+    boolean isClientConsoleModeLegal(ClientConsoleMode val) {
+        return (val == ClientConsoleMode.Native)
+                ? true
+                : ((ConsoleUtils) 
TypeResolver.getInstance().resolve(ConsoleUtils.class)).isWebSocketProxyDefined();
+    }
+
     public void setVncImplementation(ClientConsoleMode consoleMode) {
+        if (!isClientConsoleModeLegal(consoleMode)) {
+            throw new IllegalStateException("console mode is not legal: " + 
consoleMode); // $NON-NLS-1$
+        }
+
         Class implClass = consoleMode == ClientConsoleMode.NoVnc ? 
INoVnc.class : IVncNative.class;
         this.consoleMode = consoleMode;
         this.vncImpl = (IVnc) TypeResolver.getInstance().resolve(implClass);
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/ConstantsManager.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/ConstantsManager.java
index 8f60bf0..da889ab 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/ConstantsManager.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/ConstantsManager.java
@@ -5,8 +5,8 @@
 public final class ConstantsManager {
 
     private static final ConstantsManager INSTANCE = new ConstantsManager();
-    private static final UIConstants constants = GWT.create(UIConstants.class);
-    private static final UIMessages messages = GWT.create(UIMessages.class);
+    private static UIConstants constants = null;
+    private static UIMessages messages = null;
 
     private ConstantsManager() {
     }
@@ -16,10 +16,21 @@
     }
 
     public UIConstants getConstants() {
+        if (constants == null) {
+            constants = GWT.create(UIConstants.class);
+        }
         return constants;
     }
 
+    // for testing purposes
+    public static void setConstants(UIConstants testConstants) {
+        constants = testConstants;
+    }
+
     public UIMessages getMessages() {
+        if (messages == null) {
+            messages = GWT.create(UIMessages.class);
+        }
         return messages;
     }
 


-- 
To view, visit http://gerrit.ovirt.org/23973
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icde9131d9415ba500eb2a222dc4e7187bf82f868
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