mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-15 18:12:35 +01:00
Tests for ApiServlet
- tests for login - loginSuccessResponse test for xml and json Signed-off-by: Laszlo Hornyak <laszlo.hornyak@gmail.com>
This commit is contained in:
parent
86b02e65eb
commit
96d56b7525
@ -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(">");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)));
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user