package io.dropwizard.request.logging.layout; import ch.qos.logback.access.spi.AccessEvent; import ch.qos.logback.access.spi.ServerAdapter; import com.google.common.collect.ImmutableList; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Vector; import static org.assertj.core.api.Assertions.assertThat; public class SafeRequestParameterConverterTest { private final SafeRequestParameterConverter safeRequestParameterConverter = new SafeRequestParameterConverter(); private final HttpServletRequest httpServletRequest = Mockito.mock(HttpServletRequest.class); private AccessEvent accessEvent; @Before public void setUp() throws Exception { accessEvent = new AccessEvent(httpServletRequest, Mockito.mock(HttpServletResponse.class), Mockito.mock(ServerAdapter.class)); safeRequestParameterConverter.setOptionList(ImmutableList.of("name")); safeRequestParameterConverter.start(); } @After public void tearDown() throws Exception { safeRequestParameterConverter.stop(); } @Test public void testConvertOneParameter() throws Exception { Mockito.when(httpServletRequest.getParameterValues("name")).thenReturn(new String[]{"Alice"}); final Vector<String> parameterNames = new Vector<>(); parameterNames.add("name"); Mockito.when(httpServletRequest.getParameterNames()).thenReturn(parameterNames.elements()); // Invoked by AccessEvent#prepareForDeferredProcessing accessEvent.buildRequestParameterMap(); // Jetty recycled the request Mockito.reset(httpServletRequest); String value = safeRequestParameterConverter.convert(accessEvent); assertThat(value).isEqualTo("Alice"); } @Test public void testConvertSeveralParameters() throws Exception { Mockito.when(httpServletRequest.getParameterValues("name")).thenReturn(new String[]{"Alice", "Bob"}); final Vector<String> parameterNames = new Vector<>(); parameterNames.add("name"); Mockito.when(httpServletRequest.getParameterNames()).thenReturn(parameterNames.elements()); // Invoked by AccessEvent#prepareForDeferredProcessing accessEvent.buildRequestParameterMap(); // Jetty recycled the request Mockito.reset(httpServletRequest); final String value = safeRequestParameterConverter.convert(accessEvent); assertThat(value).isEqualTo("[Alice, Bob]"); } @Test public void testGetUnknownParameter() { final String value = safeRequestParameterConverter.convert(accessEvent); assertThat(value).isEqualTo("-"); } }