You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ko...@apache.org on 2014/03/24 21:41:46 UTC

[2/4] git commit: updated refs/heads/master to c6d2549

Tests for ApiServlet

- tests for login
- loginSuccessResponse test for xml and json

Signed-off-by: Laszlo Hornyak <la...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/96d56b75
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/96d56b75
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/96d56b75

Branch: refs/heads/master
Commit: 96d56b7525af84243d0bf6c1cc7c992e46b5406f
Parents: 86b02e6
Author: Laszlo Hornyak <la...@gmail.com>
Authored: Sat Mar 22 21:13:42 2014 +0100
Committer: Laszlo Hornyak <la...@gmail.com>
Committed: Mon Mar 24 19:05:47 2014 +0100

----------------------------------------------------------------------
 server/src/com/cloud/api/ApiServlet.java      | 24 ++++--
 server/test/com/cloud/api/ApiServletTest.java | 98 +++++++++++++++++++++-
 2 files changed, 112 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/96d56b75/server/src/com/cloud/api/ApiServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java
index c24877a..2ecab36 100755
--- a/server/src/com/cloud/api/ApiServlet.java
+++ b/server/src/com/cloud/api/ApiServlet.java
@@ -198,7 +198,7 @@ public class ApiServlet extends HttpServlet {
                             //check if UUID is passed in for domain
                             domainId = _apiServer.fetchDomainId(domainIdArr[0]);
                             if (domainId == null) {
-                                domainId = new Long(Long.parseLong(domainIdArr[0]));
+                                domainId = Long.parseLong(domainIdArr[0]);
                             }
                             auditTrailSb.append(" domainid=" + domainId);// building the params for POST call
                         } catch (final NumberFormatException e) {
@@ -395,8 +395,8 @@ public class ApiServlet extends HttpServlet {
     }
 
     @SuppressWarnings("rawtypes")
-    private String getLoginSuccessResponse(final HttpSession session, final String responseType) {
-        final StringBuffer sb = new StringBuffer();
+    String getLoginSuccessResponse(final HttpSession session, final String responseType) {
+        final StringBuilder sb = new StringBuilder();
         final int inactiveInterval = session.getMaxInactiveInterval();
 
         final String user_UUID = (String)session.getAttribute("user_UUID");
@@ -409,7 +409,7 @@ public class ApiServlet extends HttpServlet {
             sb.append("{ \"loginresponse\" : { ");
             final Enumeration attrNames = session.getAttributeNames();
             if (attrNames != null) {
-                sb.append("\"timeout\" : \"" + inactiveInterval + "\"");
+                sb.append("\"timeout\" : \"").append(inactiveInterval).append("\"");
                 while (attrNames.hasMoreElements()) {
                     final String attrName = (String)attrNames.nextElement();
                     if ("userid".equalsIgnoreCase(attrName)) {
@@ -427,20 +427,26 @@ public class ApiServlet extends HttpServlet {
             sb.append(" } }");
         } else {
             sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
-            sb.append("<loginresponse cloud-stack-version=\"" + ApiDBUtils.getVersion() + "\">");
-            sb.append("<timeout>" + inactiveInterval + "</timeout>");
+            sb.append("<loginresponse cloud-stack-version=\"").append(ApiDBUtils.getVersion()).append("\">");
+            sb.append("<timeout>").append(inactiveInterval).append("</timeout>");
             final Enumeration attrNames = session.getAttributeNames();
             if (attrNames != null) {
                 while (attrNames.hasMoreElements()) {
                     final String attrName = (String)attrNames.nextElement();
                     if (ApiConstants.USER_ID.equalsIgnoreCase(attrName)) {
-                        sb.append("<" + attrName + ">" + user_UUID + "</" + attrName + ">");
+                        sb.append("<").append(attrName).append(">")
+                                .append(user_UUID).append("</")
+                                .append(attrName).append(">");
                     } else if ("domainid".equalsIgnoreCase(attrName)) {
-                        sb.append("<" + attrName + ">" + domain_UUID + "</" + attrName + ">");
+                        sb.append("<").append(attrName).append(">")
+                                .append(domain_UUID).append("</")
+                                .append(attrName).append(">");
                     } else {
                         final Object attrObj = session.getAttribute(attrName);
                         if (attrObj instanceof String || attrObj instanceof Long || attrObj instanceof Short) {
-                            sb.append("<" + attrName + ">" + attrObj.toString() + "</" + attrName + ">");
+                            sb.append("<").append(attrName).append(">")
+                                    .append(attrObj.toString()).append("</")
+                                    .append(attrName).append(">");
                         }
                     }
                 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/96d56b75/server/test/com/cloud/api/ApiServletTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/api/ApiServletTest.java b/server/test/com/cloud/api/ApiServletTest.java
index 85c5723..48f3e7c 100644
--- a/server/test/com/cloud/api/ApiServletTest.java
+++ b/server/test/com/cloud/api/ApiServletTest.java
@@ -18,17 +18,22 @@ package com.cloud.api;
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Field;
 import java.net.URLEncoder;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import org.apache.cloudstack.api.ApiConstants;
+import org.apache.commons.collections.iterators.IteratorEnumeration;
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -36,10 +41,17 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.XMLReaderFactory;
 
+import com.cloud.server.ManagementServer;
 import com.cloud.user.Account;
 import com.cloud.user.AccountService;
 import com.cloud.user.User;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ApiServletTest {
@@ -65,6 +77,9 @@ public class ApiServletTest {
     @Mock
     HttpSession session;
 
+    @Mock
+    ManagementServer managementServer;
+
     StringWriter responseWriter;
 
     ApiServlet servlet;
@@ -89,6 +104,26 @@ public class ApiServletTest {
         apiServerField.set(servlet, apiServer);
     }
 
+    /**
+     * These are envinonment hacks, actually getting into the behavior of other
+     * classes, but there is no other way to run the test.
+     */
+    @Before
+    public void hackEnvironment() throws Exception {
+        Field smsField = ApiDBUtils.class.getDeclaredField("s_ms");
+        smsField.setAccessible(true);
+        smsField.set(null, managementServer);
+        Mockito.when(managementServer.getVersion()).thenReturn(
+                "LATEST-AND-GREATEST");
+    }
+
+    @After
+    public void cleanupEnvironmentHacks() throws Exception {
+        Field smsField = ApiDBUtils.class.getDeclaredField("s_ms");
+        smsField.setAccessible(true);
+        smsField.set(null, null);
+    }
+
     @Test
     public void utf8Fixup() {
         Mockito.when(request.getQueryString()).thenReturn(
@@ -123,6 +158,7 @@ public class ApiServletTest {
         Assert.assertEquals("árvíztűrőtükörfúró", params.get("防水镜钻孔机")[0]);
     }
 
+    @SuppressWarnings("unchecked")
     @Test
     public void processRequestInContextUnauthorizedGET() {
         Mockito.when(request.getMethod()).thenReturn("GET");
@@ -136,6 +172,7 @@ public class ApiServletTest {
                 Mockito.any(StringBuffer.class));
     }
 
+    @SuppressWarnings("unchecked")
     @Test
     public void processRequestInContextAuthorizedGet() {
         Mockito.when(request.getMethod()).thenReturn("GET");
@@ -150,7 +187,7 @@ public class ApiServletTest {
     }
 
     @Test
-    public void processRequestInContextLougout() {
+    public void processRequestInContextLogout() {
         Mockito.when(request.getMethod()).thenReturn("GET");
         Mockito.when(request.getSession(Mockito.anyBoolean())).thenReturn(
                 session);
@@ -166,4 +203,63 @@ public class ApiServletTest {
         Mockito.verify(session).invalidate();
     }
 
+    @SuppressWarnings("unchecked")
+    @Test
+    public void processRequestInContextLogin() {
+        Mockito.when(request.getMethod()).thenReturn("GET");
+        Mockito.when(request.getSession(Mockito.anyBoolean())).thenReturn(
+                session);
+        HashMap<String, String[]> params = new HashMap<String, String[]>();
+        params.put(ApiConstants.COMMAND, new String[] { "login" });
+        params.put(ApiConstants.USERNAME, new String[] { "TEST" });
+        params.put(ApiConstants.PASSWORD, new String[] { "TEST-PWD" });
+        params.put(ApiConstants.DOMAIN_ID, new String[] { "42" });
+        params.put(ApiConstants.DOMAIN, new String[] { "TEST-DOMAIN" });
+        Mockito.when(request.getParameterMap()).thenReturn(params);
+        Mockito.when(apiServer.fetchDomainId("42")).thenReturn(null);
+        Mockito.when(session.getAttribute("userid")).thenReturn(1l);
+        Mockito.when(session.getAttribute("accountobj")).thenReturn(account);
+
+        servlet.processRequestInContext(request, response);
+
+        Mockito.verify(request).getSession(true);
+        Mockito.verify(apiServer).loginUser(Mockito.any(HttpSession.class),
+                Mockito.eq("TEST"), Mockito.eq("TEST-PWD"), Mockito.eq(42l),
+                Mockito.eq("/TEST-DOMAIN/"), Mockito.eq("127.0.0.1"),
+                Mockito.any(Map.class));
+        Mockito.verify(response).setStatus(HttpServletResponse.SC_OK);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void getLoginSuccessResponseJson() throws JsonParseException,
+            IOException {
+        Mockito.when(session.getAttributeNames()).thenReturn(
+                new IteratorEnumeration(Arrays.asList("foo", "bar", "userid",
+                        "domainid").iterator()));
+        Mockito.when(session.getAttribute(Mockito.anyString())).thenReturn(
+                "TEST");
+
+        String loginResponse = servlet.getLoginSuccessResponse(session, "json");
+
+        ObjectNode node = (ObjectNode) new ObjectMapper()
+                .readTree(loginResponse);
+        Assert.assertNotNull(node.get("loginresponse"));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void getLoginSuccessResponseXml() throws JsonParseException,
+            IOException, SAXException {
+        Mockito.when(session.getAttributeNames()).thenReturn(
+                new IteratorEnumeration(Arrays.asList("foo", "bar", "userid",
+                        "domainid").iterator()));
+        Mockito.when(session.getAttribute(Mockito.anyString())).thenReturn(
+                "TEST");
+        String loginResponse = servlet.getLoginSuccessResponse(session, "xml");
+        XMLReaderFactory.createXMLReader().parse(
+                new InputSource(new StringReader(loginResponse)));
+        ;
+    }
+
 }