/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.impl.wsdl.submit.transports.http; import com.eviware.soapui.impl.settings.XmlBeansSettingsImpl; import com.eviware.soapui.impl.support.AbstractHttpRequest; import com.eviware.soapui.impl.wsdl.submit.RequestFilter; import com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport; import com.eviware.soapui.model.iface.Request; import com.eviware.soapui.model.iface.Response; import com.eviware.soapui.model.iface.SubmitContext; import com.eviware.soapui.model.support.AbstractSubmitContext; import com.eviware.soapui.support.types.StringToStringsMap; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; import org.apache.http.protocol.HttpContext; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Unit tests for the HttpClientRequestTransport class. */ public class HttpClientRequestTransportTest { private HttpClientRequestTransport httpTransport; private ExtendedHttpMethod methodExecuted; private HttpContext contextUsed; @Before public void setUp() { httpTransport = new TestableHttpClientRequestTransport(); httpTransport.addRequestFilter(new StubbedRequestSetupFilter()); methodExecuted = null; contextUsed = null; } @Test public void processesRequestCorrectly() throws Exception { StringToStringsMap emptyHeaders = new StringToStringsMap(); AbstractHttpRequest request = prepareRequestWithHeaders(emptyHeaders); SubmitContext submitContext = new StubbedSubmitContext(request); httpTransport.sendRequest(submitContext, request); assertThat(methodExecuted, is(notNullValue())); assertThat(contextUsed, is(notNullValue())); } @Test public void expandsPropertiesInHeaderName() throws Exception { StringToStringsMap headers = new StringToStringsMap(); String headerValue = "The value"; headers.add("Header-for-${request}", headerValue); AbstractHttpRequest request = prepareRequestWithHeaders(headers); SubmitContext submitContext = new StubbedSubmitContext(request); String requestName = "Fin-fin request"; submitContext.setProperty("request", requestName); httpTransport.sendRequest(submitContext, request); String expectedHeaderName = "Header-for-" + requestName; Header[] modifiedHeaders = methodExecuted.getHeaders(expectedHeaderName); assertThat(modifiedHeaders.length, is(1)); assertThat(modifiedHeaders[0].getName(), is(expectedHeaderName)); assertThat(modifiedHeaders[0].getValue(), is(headerValue)); } private AbstractHttpRequest prepareRequestWithHeaders(StringToStringsMap headers) { AbstractHttpRequest request = mock(AbstractHttpRequest.class); when(request.getRequestHeaders()).thenReturn(headers); XmlBeansSettingsImpl emptySettings = mock(XmlBeansSettingsImpl.class); when(request.getSettings()).thenReturn(emptySettings); return request; } private class TestableHttpClientRequestTransport extends HttpClientRequestTransport { @Override protected HttpClientSupport.SoapUIHttpClient getSoapUIHttpClient() { return mock(HttpClientSupport.SoapUIHttpClient.class); } @Override protected int getDefaultHttpPort(ExtendedHttpMethod httpMethod, HttpClient httpClient) { return 80; } @Override protected HttpResponse submitRequest(ExtendedHttpMethod httpMethod, HttpContext httpContext) throws IOException { methodExecuted = httpMethod; contextUsed = httpContext; return makeSuccessfulResponse(); } private HttpResponse makeSuccessfulResponse() { HttpResponse mockResponse = mock(HttpResponse.class); StatusLine mockedStatusLine = mock(StatusLine.class); when(mockResponse.getStatusLine()).thenReturn(mockedStatusLine); when(mockedStatusLine.getStatusCode()).thenReturn(200); return mockResponse; } } private class StubbedRequestSetupFilter implements RequestFilter { @Override public void filterRequest(SubmitContext context, Request request) { ExtendedHttpMethod httpMethod = (ExtendedHttpMethod) context.getProperty(BaseHttpRequestTransport.HTTP_METHOD); try { httpMethod.setURI(new URI("/index.html")); } catch (URISyntaxException e) { throw new Error(e); } } @Override public void afterRequest(SubmitContext context, Request request) { } @Override public void afterRequest(SubmitContext context, Response response) { } } private class StubbedSubmitContext extends AbstractSubmitContext<Request> { public StubbedSubmitContext(Request modelItem) { super(modelItem); } @Override public Object getProperty(String name) { return getProperty(name, null, null); } } }