From 28d7743f92be5505eb195d1dbbaf161ad390026f Mon Sep 17 00:00:00 2001 From: Cleverson Sacramento Date: Thu, 26 Sep 2013 10:30:19 -0300 Subject: [PATCH] IN PROGRESS - issue FWK-119: Testes da extensão Servlet --- impl/extension/servlet/src/test/java/security/authentication/form/HelperServlet.java | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- impl/extension/servlet/src/test/java/security/authentication/form/ServletAuthenticatorTest.java | 22 ++++++++++++++++++++-- impl/extension/servlet/src/test/resources/security/authentication/form/web.xml | 2 +- 3 files changed, 78 insertions(+), 11 deletions(-) diff --git a/impl/extension/servlet/src/test/java/security/authentication/form/HelperServlet.java b/impl/extension/servlet/src/test/java/security/authentication/form/HelperServlet.java index 8dc6fb8..78cf981 100644 --- a/impl/extension/servlet/src/test/java/security/authentication/form/HelperServlet.java +++ b/impl/extension/servlet/src/test/java/security/authentication/form/HelperServlet.java @@ -1,17 +1,22 @@ package security.authentication.form; +import static org.apache.http.HttpStatus.SC_EXPECTATION_FAILED; import static org.apache.http.HttpStatus.SC_FORBIDDEN; +import static org.apache.http.HttpStatus.SC_NOT_FOUND; import static org.apache.http.HttpStatus.SC_OK; import java.io.IOException; +import java.security.InvalidParameterException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import br.gov.frameworkdemoiselle.security.AuthenticationException; import br.gov.frameworkdemoiselle.security.Credentials; +import br.gov.frameworkdemoiselle.security.InvalidCredentialsException; import br.gov.frameworkdemoiselle.security.SecurityContext; import br.gov.frameworkdemoiselle.util.Beans; @@ -21,19 +26,63 @@ public class HelperServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String result = request.getHeader("Authorization"); - result = (result == null ? request.getHeader("authorization") : result); + String action = getAction(request); + if ("login".equals(action)) { + login(request, response); + } else if ("logout".equals(action)) { + logout(request, response); + } else { + response.setStatus(SC_NOT_FOUND); + } + } + + private void login(HttpServletRequest request, HttpServletResponse response) { + loadCredentials(request); + SecurityContext securityContext = Beans.getReference(SecurityContext.class); + + try { + securityContext.login(); + + if (securityContext.isLoggedIn()) { + response.setStatus(SC_OK); + } else { + response.setStatus(SC_FORBIDDEN); + } + + } catch (InvalidCredentialsException e) { + response.setStatus(SC_FORBIDDEN); + } + } + + private void logout(HttpServletRequest request, HttpServletResponse response) { + loadCredentials(request); + SecurityContext securityContext = Beans.getReference(SecurityContext.class); + + securityContext.login(); + securityContext.logout(); + + if (!securityContext.isLoggedIn()) { + response.setStatus(SC_OK); + } else { + response.setStatus(SC_EXPECTATION_FAILED); + } + } + + private void loadCredentials(HttpServletRequest request) { Credentials credentials = Beans.getReference(Credentials.class); credentials.setUsername(request.getParameter("username")); credentials.setPassword(request.getParameter("password")); + } - try { - Beans.getReference(SecurityContext.class).login(); - response.setStatus(SC_OK); + private String getAction(HttpServletRequest request) { + Pattern pattern = Pattern.compile("^.+/(.+)$"); + Matcher matcher = pattern.matcher(request.getRequestURI()); - } catch (AuthenticationException e) { - response.setStatus(SC_FORBIDDEN); + if (matcher.matches()) { + return matcher.group(1).toLowerCase(); + } else { + throw new InvalidParameterException("Está faltando o parâmetro de ação na URL"); } } } diff --git a/impl/extension/servlet/src/test/java/security/authentication/form/ServletAuthenticatorTest.java b/impl/extension/servlet/src/test/java/security/authentication/form/ServletAuthenticatorTest.java index a6ffce2..da0089c 100644 --- a/impl/extension/servlet/src/test/java/security/authentication/form/ServletAuthenticatorTest.java +++ b/impl/extension/servlet/src/test/java/security/authentication/form/ServletAuthenticatorTest.java @@ -40,7 +40,7 @@ public class ServletAuthenticatorTest { @Test public void loginSucessfull() throws ClientProtocolException, IOException, URISyntaxException { - URIBuilder uriBuilder = new URIBuilder(deploymentUrl + "/helper"); + URIBuilder uriBuilder = new URIBuilder(deploymentUrl + "/helper/login"); uriBuilder.setParameter("username", "demoiselle"); uriBuilder.setParameter("password", "changeit"); @@ -53,7 +53,7 @@ public class ServletAuthenticatorTest { @Test public void loginFailed() throws ClientProtocolException, IOException, URISyntaxException { - URIBuilder uriBuilder = new URIBuilder(deploymentUrl + "/helper"); + URIBuilder uriBuilder = new URIBuilder(deploymentUrl + "/helper/login"); uriBuilder.setParameter("username", "invalid"); uriBuilder.setParameter("password", "invalid"); @@ -63,4 +63,22 @@ public class ServletAuthenticatorTest { int status = response.getStatusLine().getStatusCode(); assertEquals(SC_FORBIDDEN, status); } + + @Test + public void logoutSucessfull() throws ClientProtocolException, IOException, URISyntaxException { + URIBuilder uriBuilder = new URIBuilder(deploymentUrl + "/helper/logout"); + uriBuilder.setParameter("username", "demoiselle"); + uriBuilder.setParameter("password", "changeit"); + + HttpGet httpGet = new HttpGet(uriBuilder.build()); + HttpResponse httpResponse = HttpClientBuilder.create().build().execute(httpGet); + + int status = httpResponse.getStatusLine().getStatusCode(); + assertEquals(SC_OK, status); + } + + @Test + public void logoutFailed() throws ClientProtocolException, IOException, URISyntaxException { + URIBuilder uriBuilder = new URIBuilder(deploymentUrl + "/helper/logout"); + } } diff --git a/impl/extension/servlet/src/test/resources/security/authentication/form/web.xml b/impl/extension/servlet/src/test/resources/security/authentication/form/web.xml index 641173c..ac8afc4 100644 --- a/impl/extension/servlet/src/test/resources/security/authentication/form/web.xml +++ b/impl/extension/servlet/src/test/resources/security/authentication/form/web.xml @@ -56,6 +56,6 @@ Helper Servlet - /helper + /helper/* \ No newline at end of file -- libgit2 0.21.2