/* * Copyright 2008-2017 by Emeric Vernat * * This file is part of Java Melody. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.bull.javamelody; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertNotNull; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Test unitaire de la classe CollectorServlet. * @author Emeric Vernat */ public class TestCollectorServlet { private static final String TRUE = "true"; private static final String REMOTE_ADDR = "127.0.0.1"; // NOPMD private static final String TEST = "test"; private ServletConfig config; private ServletContext context; private CollectorServlet collectorServlet; /** * Initialisation. * @throws IOException e */ @Before public void setUp() throws IOException { tearDown(); Utils.initialize(); Utils.setProperty(Parameters.PARAMETER_SYSTEM_PREFIX + "mockLabradorRetriever", TRUE); Utils.setProperty(Parameter.SYSTEM_ACTIONS_ENABLED, TRUE); config = createNiceMock(ServletConfig.class); context = createNiceMock(ServletContext.class); expect(config.getServletContext()).andReturn(context).anyTimes(); collectorServlet = new CollectorServlet(); } /** * Terminaison. * @throws IOException e */ @After public void tearDown() throws IOException { if (collectorServlet != null) { collectorServlet.destroy(); } Parameters.removeCollectorApplication(TEST); } /** Test. * @throws ServletException e * @throws IOException e */ @Test public void testInit() throws ServletException, IOException { replay(config); replay(context); collectorServlet.init(config); verify(config); verify(context); setUp(); expect(context .getInitParameter(Parameters.PARAMETER_SYSTEM_PREFIX + Parameter.LOG.getCode())) .andReturn(TRUE).anyTimes(); expect(context.getInitParameter( Parameters.PARAMETER_SYSTEM_PREFIX + Parameter.ALLOWED_ADDR_PATTERN.getCode())) .andReturn("127\\.0\\.0\\.1").anyTimes(); replay(config); replay(context); collectorServlet.init(config); verify(config); verify(context); } /** Test. * @throws ServletException e * @throws IOException e */ @Test public void testDoGet() throws ServletException, IOException { doGet("a", null); doGet(null, null); doGet(".*", null); doGet(null, TEST); } private void doGet(String pattern, String application) throws IOException, ServletException { setUp(); final HttpServletRequest request = createNiceMock(HttpServletRequest.class); expect(request.getRequestURI()).andReturn("/test/request").anyTimes(); final HttpServletResponse response = createNiceMock(HttpServletResponse.class); final FilterServletOutputStream servletOutputStream = new FilterServletOutputStream( new ByteArrayOutputStream()); expect(response.getOutputStream()).andReturn(servletOutputStream).anyTimes(); if (application != null) { expect(request.getParameter("application")).andReturn(application).anyTimes(); } if (pattern != null) { expect(context.getInitParameter( Parameters.PARAMETER_SYSTEM_PREFIX + Parameter.ALLOWED_ADDR_PATTERN.getCode())) .andReturn(pattern).anyTimes(); expect(request.getRemoteAddr()).andReturn(REMOTE_ADDR).anyTimes(); } replay(config); replay(context); replay(request); replay(response); collectorServlet.init(config); // note: sans serveur de http, il n'est pas possible d'avoir une application et un collector collectorServlet.doGet(request, response); verify(config); verify(context); verify(request); verify(response); } /** Test. * @throws ServletException e * @throws IOException e */ @Test public void testDoPost() throws ServletException, IOException { doPost(null, null, false); doPost(null, null, true); doPost(TEST, null, true); doPost(TEST, "http://localhost:8090/test", true); doPost(TEST, "https://localhost:8090/test", true); doPost(TEST, "ftp://localhost:8090/test", true); doPost(TEST, "http://une url,pas une url", true); } private void doPost(String appName, String appUrls, boolean allowed) throws IOException, ServletException { setUp(); final HttpServletRequest request = createNiceMock(HttpServletRequest.class); expect(request.getRequestURI()).andReturn("/test/request").anyTimes(); // un cookie d'une application (qui n'existe pas) final Cookie[] cookies = { new Cookie("javamelody.application", "anothertest") }; expect(request.getCookies()).andReturn(cookies).anyTimes(); final HttpServletResponse response = createNiceMock(HttpServletResponse.class); final FilterServletOutputStream servletOutputStream = new FilterServletOutputStream( new ByteArrayOutputStream()); expect(response.getOutputStream()).andReturn(servletOutputStream).anyTimes(); if (appName != null) { Parameters.removeCollectorApplication(appName); } expect(request.getParameter("appName")).andReturn(appName).anyTimes(); expect(request.getParameter("appUrls")).andReturn(appUrls).anyTimes(); if (!allowed) { expect(context.getInitParameter( Parameters.PARAMETER_SYSTEM_PREFIX + Parameter.ALLOWED_ADDR_PATTERN.getCode())) .andReturn("none").anyTimes(); expect(request.getRemoteAddr()).andReturn(REMOTE_ADDR).anyTimes(); } replay(config); replay(context); replay(request); replay(response); collectorServlet.init(config); collectorServlet.doPost(request, response); verify(config); verify(context); verify(request); verify(response); } /** Test. */ @Test public void testMainWinstone() { try { Main.main(new String[] { "--help" }); } catch (final Exception e) { // cela s'arrĂȘte sur le jar winstone qui n'est pas disponible en tests unitaires assertNotNull("ok", e); } } }