You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by gg...@apache.org on 2017/03/26 02:43:05 UTC
svn commit: r1788709 [4/5] - in /httpcomponents:
httpclient/trunk/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/
httpclient/trunk/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/
httpclient/trunk/httpclient5-o...
Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java?rev=1788709&r1=1788708&r2=1788709&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java Sun Mar 26 02:43:03 2017
@@ -1,1166 +1,1166 @@
-/*
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.apache.hc.core5.testing.framework;
-
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.BODY;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.CONTENT_TYPE;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.HEADERS;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.METHOD;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.NAME;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.PATH;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.PROTOCOL_VERSION;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.QUERY;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.REQUEST;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.RESPONSE;
-import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.STATUS;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.hc.core5.http.HttpVersion;
-import org.apache.hc.core5.http.ProtocolVersion;
-import org.apache.hc.core5.http.ContentType;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.junit.Assert;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-public class TestTestingFramework {
-
- @Test
- public void ensureDefaultMapsUnmodifiable() throws Exception {
- assertUnmodifiable(TestingFramework.DEFAULT_REQUEST_QUERY);
- assertUnmodifiable(TestingFramework.DEFAULT_RESPONSE_HEADERS);
- }
-
- private void assertUnmodifiable(final Map<String, String> map) {
- final String aKey = (String) map.keySet().toArray()[0];
- try {
- map.remove(aKey);
- Assert.fail("UnsupportedOperationException should have been thrown.");
- } catch (UnsupportedOperationException e) {
- // expected
- }
- }
-
- private TestingFramework newWebServerTestingFramework(final ClientTestingAdapter adapter)
- throws TestingFrameworkException {
- final TestingFramework framework = new TestingFramework(adapter);
- // get rid of the default tests.
- framework.deleteTests();
-
- return framework;
- }
-
- private TestingFramework newWebServerTestingFramework() throws TestingFrameworkException {
- return newWebServerTestingFramework(null); // null adapter
- }
-
- @Test
- public void runTestsWithoutSettingAdapterThrows() throws Exception {
- final TestingFramework framework = newWebServerTestingFramework();
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void nullAdapterThrows() throws Exception {
- final ClientTestingAdapter adapter = null;
-
- final TestingFramework framework = newWebServerTestingFramework(adapter);
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void nullSetAdapterThrows() throws Exception {
- final ClientTestingAdapter adapter = null;
-
- final TestingFramework framework = newWebServerTestingFramework(adapter);
- framework.setAdapter(adapter);
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void goodAdapterWithConstructor() throws Exception {
- final ClientTestingAdapter adapter = Mockito.mock(ClientTestingAdapter.class);
-
- // Have isRequestSupported() return false so no test will run.
- Mockito.when(adapter.isRequestSupported(Mockito.anyMap()))
- .thenReturn(false);
-
- final TestingFramework framework = newWebServerTestingFramework(adapter);
-
- framework.runTests();
-
- // since there are no tests, callMethod should not be called.
- verifyCallMethodNeverCalled(adapter);
- }
-
- @SuppressWarnings("unchecked")
- private void verifyCallMethodNeverCalled(final ClientTestingAdapter adapter) throws Exception {
- Mockito.verify(adapter, Mockito.never()).execute(Mockito.anyString(), Mockito.anyMap(),
- Mockito.any(TestingFrameworkRequestHandler.class), Mockito.anyMap());
- }
-
- private TestingFramework newFrameworkAndSetAdapter(final ClientTestingAdapter adapter)
- throws TestingFrameworkException {
- final TestingFramework framework = new TestingFramework();
- framework.setAdapter(adapter);
-
- // get rid of the default tests.
- framework.deleteTests();
-
- return framework;
- }
-
- @Test
- public void goodAdapterWithSetter() throws Exception {
- final ClientTestingAdapter adapter = Mockito.mock(ClientTestingAdapter.class);
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.runTests();
-
- // since there are no tests, callMethod should not be called.
- verifyCallMethodNeverCalled(adapter);
- }
-
- @Test
- public void addTest() throws Exception {
- final TestingFrameworkRequestHandler mockRequestHandler = Mockito.mock(TestingFrameworkRequestHandler.class);
-
- ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- Assert.assertThat(defaultURI, matchesDefaultURI());
-
- Assert.assertNotNull("request should not be null", request);
-
- // The request should be equal to the default request.
- final Map<String, Object> defaultRequest = new FrameworkTest().initRequest();
- Assert.assertEquals("The request does not match the default", defaultRequest, request);
-
- Assert.assertSame("The request handler should have been passed to the adapter",
- mockRequestHandler, requestHandler);
-
- // The responseExpectations should be equal to the default.
- final Map<String, Object> defaultResponseExpectations = new FrameworkTest().initResponseExpectations();
- Assert.assertEquals("The responseExpectations do not match the defaults",
- defaultResponseExpectations, responseExpectations);
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, responseExpectations.get(STATUS));
- response.put(BODY, responseExpectations.get(BODY));
- response.put(CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
- response.put(HEADERS, responseExpectations.get(HEADERS));
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
- framework.setRequestHandler(mockRequestHandler);
-
- framework.addTest();
-
- framework.runTests();
-
- // assertNothingThrown() should have been called.
- Mockito.verify(mockRequestHandler).assertNothingThrown();
- }
-
- private Matcher<String> matchesDefaultURI() {
- final Matcher<String> matcher = new BaseMatcher<String>() {
- private final String regex = "http://localhost:\\d+/";
-
- @Override
- public boolean matches(final Object o) {
- return ((String) o).matches(regex);
- }
-
- @Override
- public void describeTo(final Description description) {
- description.appendText("matches regex=" + regex);
- }
- };
-
- return matcher;
- }
-
- @Test
- public void statusCheck() throws Exception {
- ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) {
-
- Assert.assertEquals(200, responseExpectations.get(STATUS));
-
- // return a different status than expected.
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, 201);
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- private Map<String, Object> alreadyCheckedResponse() {
- // return an indication that the response has already been checked.
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, TestingFramework.ALREADY_CHECKED);
- response.put(BODY, TestingFramework.ALREADY_CHECKED);
- response.put(CONTENT_TYPE, TestingFramework.ALREADY_CHECKED);
- response.put(HEADERS, TestingFramework.ALREADY_CHECKED);
- return response;
- }
-
- @Test
- public void responseAlreadyChecked() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) {
-
- return alreadyCheckedResponse();
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- framework.runTests();
- }
-
- @Test
- public void bodyCheck() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) {
-
- Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_BODY, responseExpectations.get(BODY));
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, TestingFramework.ALREADY_CHECKED);
-
- // return a different body than expected.
- response.put(BODY, TestingFramework.DEFAULT_RESPONSE_BODY + "junk");
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void responseContentTypeCheck() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) {
-
- Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, TestingFramework.ALREADY_CHECKED);
- response.put(HEADERS, TestingFramework.ALREADY_CHECKED);
-
- // return the expected body
- response.put(BODY, TestingFramework.DEFAULT_RESPONSE_BODY);
- // return a different content type than expected.
- response.put(CONTENT_TYPE, ContentType.DEFAULT_TEXT);
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void deepcopy() throws Exception {
- // save a copy of the headers to make sure they haven't changed at the end of this test.
- @SuppressWarnings("unchecked")
- final Map<String, String> headersCopy = (Map<String, String>) TestingFramework.deepcopy(TestingFramework.DEFAULT_RESPONSE_HEADERS);
- Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, headersCopy);
-
- final Map<String, Object> deepMap = new HashMap<String, Object>();
- deepMap.put(HEADERS, TestingFramework.DEFAULT_RESPONSE_HEADERS);
-
- @SuppressWarnings("unchecked")
- final Map<String, Object> deepMapCopy = (Map<String, Object>) TestingFramework.deepcopy(deepMap);
- Assert.assertEquals(deepMap, deepMapCopy);
-
- @SuppressWarnings("unchecked")
- final Map<String, String> headersMap = (Map<String, String>) deepMapCopy.get(HEADERS);
- Assert.assertEquals(headersCopy, headersMap);
-
- // now make sure the default headers have not changed for some unexpected reason.
- Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, headersCopy);
- }
-
- @Test
- public void removedHeaderCheck() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) {
-
- Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, responseExpectations.get(HEADERS));
-
- @SuppressWarnings("unchecked")
- final Map<String, String> headersCopy = (Map<String, String>) deepcopy(responseExpectations.get(HEADERS));
-
- // remove a header to force an error
- final String headerName = (String) headersCopy.keySet().toArray()[0];
- headersCopy.remove(headerName);
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, TestingFramework.ALREADY_CHECKED);
- response.put(BODY, TestingFramework.ALREADY_CHECKED);
-
- // return different headers than expected.
- response.put(HEADERS, headersCopy);
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changedHeaderCheck() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) {
-
- Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, responseExpectations.get(HEADERS));
-
- @SuppressWarnings("unchecked")
- final Map<String, String> headersCopy = (Map<String, String>) deepcopy(responseExpectations.get(HEADERS));
-
- // change a header to force an error
- final String headerName = (String) headersCopy.keySet().toArray()[0];
- headersCopy.put(headerName, headersCopy.get(headerName) + "junk");
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, TestingFramework.ALREADY_CHECKED);
- response.put(BODY, TestingFramework.ALREADY_CHECKED);
-
- // return different headers than expected.
- response.put(HEADERS, headersCopy);
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- private Object deepcopy(final Object obj) {
- try {
- return TestingFramework.deepcopy(obj);
- } catch (Exception e) {
- Assert.fail("deepcopy failed: " + e.getMessage());
- return null;
- }
- }
-
- @Test
- public void requestMethodUnexpected() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- Assert.assertTrue(request.get(METHOD).equals("GET"));
- request.put(METHOD, "POST");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- final Map<String, Object> test = new HashMap<String, Object>();
- final Map<String, Object> request = new HashMap<String, Object>();
- test.put(REQUEST, request);
- request.put(NAME, "MyName");
-
- framework.addTest(test);
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
-
- // make sure the HTTP Client name is in the message.
- final String message = e.getMessage();
- final ClientPOJOAdapter pojoAdapter = adapter.getClientPOJOAdapter();
- final String httpClientName = pojoAdapter == null ?
- TestingFrameworkException.NO_HTTP_CLIENT :
- pojoAdapter.getClientName();
- Assert.assertTrue(
- "Message should contain httpClientName of " + httpClientName + "; message=" + message,
- message.contains(httpClientName));
-
- Assert.assertTrue(
- "Message should contain the test. message=" + message,
- message.contains("MyName"));
- }
- }
-
- @Test
- public void status201() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter();
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- final Map<String, Object> test = new HashMap<String, Object>();
- final Map<String, Object> response = new HashMap<String, Object>();
- test.put(RESPONSE, response);
- response.put(STATUS, 201);
-
- framework.addTest(test);
-
- framework.runTests();
- }
-
- @Test
- public void deepcopyOfTest() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
-
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations)
- throws TestingFrameworkException {
- Assert.assertEquals(201, responseExpectations.get(STATUS));
- return alreadyCheckedResponse();
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- final Map<String, Object> test = new HashMap<String, Object>();
- final Map<String, Object> response = new HashMap<String, Object>();
- test.put(RESPONSE, response);
- response.put(STATUS, 201);
-
- framework.addTest(test);
-
- // Make sure the framework makes a copy of the test for itself.
- // This put should be ignored by the framework.
- response.put(STATUS, 300);
-
- framework.runTests();
- }
-
- @Test
- public void removeParameter() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- @SuppressWarnings("unchecked")
- final Map<String, String> query = (Map<String, String>) request.get(QUERY);
- Assert.assertTrue(query.containsKey("p1"));
- query.remove("p1");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeParameter() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- @SuppressWarnings("unchecked")
- final Map<String, String> query = (Map<String, String>) request.get(QUERY);
- Assert.assertTrue(query.containsKey("p1"));
- query.put("p1", query.get("p1") + "junk");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void removeHeader() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- @SuppressWarnings("unchecked")
- final Map<String, String> headers = (Map<String, String>) request.get(HEADERS);
- Assert.assertTrue(headers.containsKey("header1"));
- headers.remove("header1");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeHeader() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- @SuppressWarnings("unchecked")
- final Map<String, String> headers = (Map<String, String>) request.get(HEADERS);
- Assert.assertTrue(headers.containsKey("header1"));
- headers.put("header1", headers.get("header1") + "junk");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeBody() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- final String body = (String) request.get(BODY);
- Assert.assertNotNull(body);
- request.put(BODY, request.get(BODY) + "junk");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeContentType() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- final String contentType = (String) request.get(CONTENT_TYPE);
- Assert.assertNotNull(contentType);
- request.put(CONTENT_TYPE, request.get(CONTENT_TYPE) + "junk");
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeProtocolVersion() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the request from what is expected.
- final ProtocolVersion protocolVersion = (ProtocolVersion) request.get(PROTOCOL_VERSION);
- Assert.assertNotNull(protocolVersion);
- request.put(PROTOCOL_VERSION, HttpVersion.HTTP_1_0);
- return super.execute(defaultURI, request, requestHandler, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("WebServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeResponseExpectationsFails() throws Exception {
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
-
- /*
- * The adapter should change the responseExpectations in the modifyResponseExpectations()
- * method before they are sent to the request handler. The expectations should not
- * be changed here.
- */
- // the next command should throw.
- responseExpectations.put(STATUS, 201);
- return null;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- try {
- framework.runTests();
- Assert.fail("HttpServerTestingFrameworkException should have been thrown");
- } catch (TestingFrameworkException e) {
- // expected
- }
- }
-
- @Test
- public void changeResponseStatus() throws Exception {
- ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // change the responseExpectations from what is expected. The change should be ignored
- // by the request handler, and a 200 should actually be returned.
- Assert.assertEquals(200, responseExpectations.get(STATUS));
-
- // The next line is needed because we have to make a copy of the responseExpectations.
- // It is an unmodifiable map.
- final Map<String, Object> tempResponseExpectations = new HashMap<String, Object>(responseExpectations);
- tempResponseExpectations.put(STATUS, 201);
- final Map<String, Object> response = super.execute(defaultURI, request, requestHandler, tempResponseExpectations);
- Assert.assertEquals(200, response.get(STATUS));
-
- return response;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- framework.runTests();
- }
-
- @Test
- public void modifyRequestCalled() throws Exception {
- final TestingFrameworkRequestHandler mockRequestHandler = Mockito.mock(TestingFrameworkRequestHandler.class);
- final String UNLIKELY_ITEM = "something_unlikely_to_be_in_a_real_request";
-
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // make sure the modifyRequest method was called by seeing if the request was modified.
- Assert.assertTrue("modifyRequest should have been called.", request.containsKey(UNLIKELY_ITEM));
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, responseExpectations.get(STATUS));
- response.put(BODY, responseExpectations.get(BODY));
- response.put(CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
- response.put(HEADERS, responseExpectations.get(HEADERS));
- return response;
- }
-
- @Override
- public Map<String, Object> modifyRequest(final Map<String, Object> request) {
- // let the adapter change the request if needed.
- request.put(UNLIKELY_ITEM, new Object());
- return super.modifyRequest(request);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
- framework.setRequestHandler(mockRequestHandler);
-
- framework.addTest();
-
- framework.runTests();
-
- // assertNothingThrown() should have been called.
- Mockito.verify(mockRequestHandler).assertNothingThrown();
- }
-
- @Test
- public void modifyResponseExpectationsCalled() throws Exception {
- final TestingFrameworkRequestHandler mockRequestHandler = Mockito.mock(TestingFrameworkRequestHandler.class);
- final String UNLIKELY_ITEM = "something_unlikely_to_be_in_a_real_response";
-
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- // make sure the modifyRequest method was called by seeing if the request was modified.
- Assert.assertTrue("modifyResponseExpectations should have been called.", responseExpectations.containsKey(UNLIKELY_ITEM));
-
- final Map<String, Object> response = new HashMap<String, Object>();
- response.put(STATUS, responseExpectations.get(STATUS));
- response.put(BODY, responseExpectations.get(BODY));
- response.put(CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
- response.put(HEADERS, responseExpectations.get(HEADERS));
- return response;
- }
-
- @Override
- public Map<String, Object> modifyResponseExpectations(
- final Map<String, Object> request,
- final Map<String, Object> responseExpectations) {
- // let the adapter change the request if needed.
- responseExpectations.put(UNLIKELY_ITEM, new Object());
- return super.modifyResponseExpectations(request, responseExpectations);
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
- framework.setRequestHandler(mockRequestHandler);
-
- framework.addTest();
-
- framework.runTests();
-
- // assertNothingThrown() should have been called.
- Mockito.verify(mockRequestHandler).assertNothingThrown();
- }
-
- @Test
- public void adapterDoesNotSupport() throws Exception {
-
- ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
-
- Assert.fail("callMethod should not have been called");
- return null;
- }
-
- @Override
- public boolean isRequestSupported(final Map<String, Object> request) {
- return false;
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- framework.addTest();
-
- framework.runTests();
- }
-
- @Test
- public void defaultTestsWithMockedAdapter() throws Exception {
- final Set<String> calledMethodSet = new HashSet<String>();
-
- final ClientTestingAdapter adapter = new ClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(
- final String defaultURI,
- final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
-
- calledMethodSet.add((String) request.get(METHOD));
- return alreadyCheckedResponse();
- }
- };
-
- // create the framework without deleting the default tests.
- final TestingFramework framework = new TestingFramework();
- framework.setAdapter(adapter);
-
- framework.runTests();
-
- for (String method : TestingFramework.ALL_METHODS) {
- Assert.assertTrue("Method not in default tests. method=" + method, calledMethodSet.contains(method));
- }
- }
-
- @Test
- public void defaultTests() throws Exception {
- final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter();
-
- // create the framework without deleting the default tests.
- final TestingFramework framework = new TestingFramework();
- framework.setAdapter(adapter);
-
- framework.runTests();
-
- }
-
- @Test
- public void addTestNoMocks() throws TestingFrameworkException {
-
- final TestingFramework framework = new TestingFramework(new ClassicTestClientTestingAdapter());
-
-// The following test could be constructed in Groovy/Spock like this:
-//
-// HttpServerTestingFramework.ALL_METHODS.each { method ->
-// framework.addTest(
-// request: [
-// path: '/stuff',
-// method:method,
-// query: [param : 'something'],
-// headers: [header1:'stuff', header2:'more-stuff'],
-// contentType: 'text/plain; charset=us-ascii',
-// body: 'What is the meaning of life?',
-// ],
-// response: [
-// status:201,
-// headers: [header3:'header_stuff',],
-// contentType: 'text/html; charset=us-ascii',
-// body: responseBody,
-// ],
-// )
-
- final Map<String, Object> test = new HashMap<String, Object>();
-
- // Add request.
- final Map<String, Object> request = new HashMap<String, Object>();
- test.put(REQUEST, request);
-
- request.put(PATH, "/stuff");
-
- final Map<String, Object> queryMap = new HashMap<String, Object>();
- request.put(QUERY, queryMap);
-
- queryMap.put("param", "something");
-
- final Map<String, Object> requestHeadersMap = new HashMap<String, Object>();
- request.put(HEADERS, requestHeadersMap);
-
- requestHeadersMap.put("header1", "stuff");
- requestHeadersMap.put("header2", "more-stuff");
-
- request.put(CONTENT_TYPE, "text/plain; charset=us-ascii");
- request.put(BODY, "What is the meaning of life?");
-
- // Response
- final Map<String, Object> response = new HashMap<String, Object>();
- test.put(RESPONSE, response);
-
- response.put(STATUS, 201);
-
- final Map<String, Object> responseHeadersMap = new HashMap<String, Object>();
- response.put(HEADERS, responseHeadersMap);
-
- responseHeadersMap.put("header3", "header_stuff");
-
- response.put(CONTENT_TYPE, "text/html; charset=us-ascii");
- response.put(BODY, "<HTML>42</HTML>");
-
- for (String method : TestingFramework.ALL_METHODS) {
- request.put(METHOD, method);
-
- framework.addTest(test);
- }
- framework.runTests();
- }
-
- @Test
- public void nulls() throws TestingFrameworkException {
-
- final TestingFramework framework = new TestingFramework(new ClassicTestClientTestingAdapter());
-
-// The following test could be constructed in Groovy/Spock like this:
-//
-// WebServerTestingFramework.ALL_METHODS.each { method ->
-// framework.addTest(
-// request: [
-// path: null,
-// method:method,
-// query: null,
-// headers: null,
-// contentType: null,
-// body: null,
-// ],
-// response: [
-// status:null,
-// headers: null,
-// contentType: null,
-// body: null,
-// ],
-// )
-
- final Map<String, Object> test = new HashMap<String, Object>();
-
- // Add request.
- final Map<String, Object> request = new HashMap<String, Object>();
- test.put(REQUEST, request);
-
- request.put(PATH, null);
-
- request.put(QUERY, null);
-
-
- request.put(HEADERS, null);
-
- request.put(CONTENT_TYPE, null);
- request.put(BODY, null);
-
- // Response
- final Map<String, Object> response = new HashMap<String, Object>();
- test.put(RESPONSE, response);
-
- response.put(STATUS, null);
-
- response.put(HEADERS, null);
-
- response.put(CONTENT_TYPE, null);
- response.put(BODY, null);
-
- for (String method : TestingFramework.ALL_METHODS) {
- request.put(METHOD, method);
-
- framework.addTest(test);
- }
- framework.runTests();
- }
-
- @Test
- public void parameterInPath() throws Exception {
- ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
- @Override
- public Map<String, Object> execute(final String defaultURI, final Map<String, Object> request,
- final TestingFrameworkRequestHandler requestHandler,
- final Map<String, Object> responseExpectations) throws TestingFrameworkException {
- @SuppressWarnings("unchecked")
- final Map<String, String> query = (Map<String, String>) request.get(QUERY);
- Assert.assertTrue("Parameters appended to the path should have been put in the query.",
- query.containsKey("stuffParm"));
-
- Assert.assertTrue(query.containsKey("stuffParm2"));
- Assert.assertEquals("stuff", query.get("stuffParm"));
- Assert.assertEquals("stuff2", query.get("stuffParm2"));
-
- Assert.assertEquals("/stuff", request.get(PATH));
- return alreadyCheckedResponse();
- }
- };
-
- final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
-
- final Map<String, Object> test = new HashMap<String, Object>();
-
- // Add request.
- final Map<String, Object> request = new HashMap<String, Object>();
- test.put(REQUEST, request);
-
- request.put(PATH, "/stuff?stuffParm=stuff&stuffParm2=stuff2");
-
- framework.addTest(test);
-
- framework.runTests();
- }
-
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.hc.core5.testing.framework;
+
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.BODY;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.CONTENT_TYPE;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.HEADERS;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.METHOD;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.NAME;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.PATH;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.PROTOCOL_VERSION;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.QUERY;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.REQUEST;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.RESPONSE;
+import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.STATUS;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.hc.core5.http.HttpVersion;
+import org.apache.hc.core5.http.ProtocolVersion;
+import org.apache.hc.core5.http.ContentType;
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class TestTestingFramework {
+
+ @Test
+ public void ensureDefaultMapsUnmodifiable() throws Exception {
+ assertUnmodifiable(TestingFramework.DEFAULT_REQUEST_QUERY);
+ assertUnmodifiable(TestingFramework.DEFAULT_RESPONSE_HEADERS);
+ }
+
+ private void assertUnmodifiable(final Map<String, String> map) {
+ final String aKey = (String) map.keySet().toArray()[0];
+ try {
+ map.remove(aKey);
+ Assert.fail("UnsupportedOperationException should have been thrown.");
+ } catch (final UnsupportedOperationException e) {
+ // expected
+ }
+ }
+
+ private TestingFramework newWebServerTestingFramework(final ClientTestingAdapter adapter)
+ throws TestingFrameworkException {
+ final TestingFramework framework = new TestingFramework(adapter);
+ // get rid of the default tests.
+ framework.deleteTests();
+
+ return framework;
+ }
+
+ private TestingFramework newWebServerTestingFramework() throws TestingFrameworkException {
+ return newWebServerTestingFramework(null); // null adapter
+ }
+
+ @Test
+ public void runTestsWithoutSettingAdapterThrows() throws Exception {
+ final TestingFramework framework = newWebServerTestingFramework();
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void nullAdapterThrows() throws Exception {
+ final ClientTestingAdapter adapter = null;
+
+ final TestingFramework framework = newWebServerTestingFramework(adapter);
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void nullSetAdapterThrows() throws Exception {
+ final ClientTestingAdapter adapter = null;
+
+ final TestingFramework framework = newWebServerTestingFramework(adapter);
+ framework.setAdapter(adapter);
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void goodAdapterWithConstructor() throws Exception {
+ final ClientTestingAdapter adapter = Mockito.mock(ClientTestingAdapter.class);
+
+ // Have isRequestSupported() return false so no test will run.
+ Mockito.when(adapter.isRequestSupported(Mockito.anyMap()))
+ .thenReturn(false);
+
+ final TestingFramework framework = newWebServerTestingFramework(adapter);
+
+ framework.runTests();
+
+ // since there are no tests, callMethod should not be called.
+ verifyCallMethodNeverCalled(adapter);
+ }
+
+ @SuppressWarnings("unchecked")
+ private void verifyCallMethodNeverCalled(final ClientTestingAdapter adapter) throws Exception {
+ Mockito.verify(adapter, Mockito.never()).execute(Mockito.anyString(), Mockito.anyMap(),
+ Mockito.any(TestingFrameworkRequestHandler.class), Mockito.anyMap());
+ }
+
+ private TestingFramework newFrameworkAndSetAdapter(final ClientTestingAdapter adapter)
+ throws TestingFrameworkException {
+ final TestingFramework framework = new TestingFramework();
+ framework.setAdapter(adapter);
+
+ // get rid of the default tests.
+ framework.deleteTests();
+
+ return framework;
+ }
+
+ @Test
+ public void goodAdapterWithSetter() throws Exception {
+ final ClientTestingAdapter adapter = Mockito.mock(ClientTestingAdapter.class);
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.runTests();
+
+ // since there are no tests, callMethod should not be called.
+ verifyCallMethodNeverCalled(adapter);
+ }
+
+ @Test
+ public void addTest() throws Exception {
+ final TestingFrameworkRequestHandler mockRequestHandler = Mockito.mock(TestingFrameworkRequestHandler.class);
+
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ Assert.assertThat(defaultURI, matchesDefaultURI());
+
+ Assert.assertNotNull("request should not be null", request);
+
+ // The request should be equal to the default request.
+ final Map<String, Object> defaultRequest = new FrameworkTest().initRequest();
+ Assert.assertEquals("The request does not match the default", defaultRequest, request);
+
+ Assert.assertSame("The request handler should have been passed to the adapter",
+ mockRequestHandler, requestHandler);
+
+ // The responseExpectations should be equal to the default.
+ final Map<String, Object> defaultResponseExpectations = new FrameworkTest().initResponseExpectations();
+ Assert.assertEquals("The responseExpectations do not match the defaults",
+ defaultResponseExpectations, responseExpectations);
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, responseExpectations.get(STATUS));
+ response.put(BODY, responseExpectations.get(BODY));
+ response.put(CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
+ response.put(HEADERS, responseExpectations.get(HEADERS));
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+ framework.setRequestHandler(mockRequestHandler);
+
+ framework.addTest();
+
+ framework.runTests();
+
+ // assertNothingThrown() should have been called.
+ Mockito.verify(mockRequestHandler).assertNothingThrown();
+ }
+
+ private Matcher<String> matchesDefaultURI() {
+ final Matcher<String> matcher = new BaseMatcher<String>() {
+ private final String regex = "http://localhost:\\d+/";
+
+ @Override
+ public boolean matches(final Object o) {
+ return ((String) o).matches(regex);
+ }
+
+ @Override
+ public void describeTo(final Description description) {
+ description.appendText("matches regex=" + regex);
+ }
+ };
+
+ return matcher;
+ }
+
+ @Test
+ public void statusCheck() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) {
+
+ Assert.assertEquals(200, responseExpectations.get(STATUS));
+
+ // return a different status than expected.
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, 201);
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ private Map<String, Object> alreadyCheckedResponse() {
+ // return an indication that the response has already been checked.
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, TestingFramework.ALREADY_CHECKED);
+ response.put(BODY, TestingFramework.ALREADY_CHECKED);
+ response.put(CONTENT_TYPE, TestingFramework.ALREADY_CHECKED);
+ response.put(HEADERS, TestingFramework.ALREADY_CHECKED);
+ return response;
+ }
+
+ @Test
+ public void responseAlreadyChecked() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) {
+
+ return alreadyCheckedResponse();
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ framework.runTests();
+ }
+
+ @Test
+ public void bodyCheck() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) {
+
+ Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_BODY, responseExpectations.get(BODY));
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, TestingFramework.ALREADY_CHECKED);
+
+ // return a different body than expected.
+ response.put(BODY, TestingFramework.DEFAULT_RESPONSE_BODY + "junk");
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void responseContentTypeCheck() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) {
+
+ Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, TestingFramework.ALREADY_CHECKED);
+ response.put(HEADERS, TestingFramework.ALREADY_CHECKED);
+
+ // return the expected body
+ response.put(BODY, TestingFramework.DEFAULT_RESPONSE_BODY);
+ // return a different content type than expected.
+ response.put(CONTENT_TYPE, ContentType.DEFAULT_TEXT);
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void deepcopy() throws Exception {
+ // save a copy of the headers to make sure they haven't changed at the end of this test.
+ @SuppressWarnings("unchecked")
+ final Map<String, String> headersCopy = (Map<String, String>) TestingFramework.deepcopy(TestingFramework.DEFAULT_RESPONSE_HEADERS);
+ Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, headersCopy);
+
+ final Map<String, Object> deepMap = new HashMap<String, Object>();
+ deepMap.put(HEADERS, TestingFramework.DEFAULT_RESPONSE_HEADERS);
+
+ @SuppressWarnings("unchecked")
+ final Map<String, Object> deepMapCopy = (Map<String, Object>) TestingFramework.deepcopy(deepMap);
+ Assert.assertEquals(deepMap, deepMapCopy);
+
+ @SuppressWarnings("unchecked")
+ final Map<String, String> headersMap = (Map<String, String>) deepMapCopy.get(HEADERS);
+ Assert.assertEquals(headersCopy, headersMap);
+
+ // now make sure the default headers have not changed for some unexpected reason.
+ Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, headersCopy);
+ }
+
+ @Test
+ public void removedHeaderCheck() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) {
+
+ Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, responseExpectations.get(HEADERS));
+
+ @SuppressWarnings("unchecked")
+ final Map<String, String> headersCopy = (Map<String, String>) deepcopy(responseExpectations.get(HEADERS));
+
+ // remove a header to force an error
+ final String headerName = (String) headersCopy.keySet().toArray()[0];
+ headersCopy.remove(headerName);
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, TestingFramework.ALREADY_CHECKED);
+ response.put(BODY, TestingFramework.ALREADY_CHECKED);
+
+ // return different headers than expected.
+ response.put(HEADERS, headersCopy);
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changedHeaderCheck() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) {
+
+ Assert.assertEquals(TestingFramework.DEFAULT_RESPONSE_HEADERS, responseExpectations.get(HEADERS));
+
+ @SuppressWarnings("unchecked")
+ final Map<String, String> headersCopy = (Map<String, String>) deepcopy(responseExpectations.get(HEADERS));
+
+ // change a header to force an error
+ final String headerName = (String) headersCopy.keySet().toArray()[0];
+ headersCopy.put(headerName, headersCopy.get(headerName) + "junk");
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, TestingFramework.ALREADY_CHECKED);
+ response.put(BODY, TestingFramework.ALREADY_CHECKED);
+
+ // return different headers than expected.
+ response.put(HEADERS, headersCopy);
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ private Object deepcopy(final Object obj) {
+ try {
+ return TestingFramework.deepcopy(obj);
+ } catch (final Exception e) {
+ Assert.fail("deepcopy failed: " + e.getMessage());
+ return null;
+ }
+ }
+
+ @Test
+ public void requestMethodUnexpected() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ Assert.assertTrue(request.get(METHOD).equals("GET"));
+ request.put(METHOD, "POST");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ final Map<String, Object> test = new HashMap<String, Object>();
+ final Map<String, Object> request = new HashMap<String, Object>();
+ test.put(REQUEST, request);
+ request.put(NAME, "MyName");
+
+ framework.addTest(test);
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+
+ // make sure the HTTP Client name is in the message.
+ final String message = e.getMessage();
+ final ClientPOJOAdapter pojoAdapter = adapter.getClientPOJOAdapter();
+ final String httpClientName = pojoAdapter == null ?
+ TestingFrameworkException.NO_HTTP_CLIENT :
+ pojoAdapter.getClientName();
+ Assert.assertTrue(
+ "Message should contain httpClientName of " + httpClientName + "; message=" + message,
+ message.contains(httpClientName));
+
+ Assert.assertTrue(
+ "Message should contain the test. message=" + message,
+ message.contains("MyName"));
+ }
+ }
+
+ @Test
+ public void status201() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter();
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ final Map<String, Object> test = new HashMap<String, Object>();
+ final Map<String, Object> response = new HashMap<String, Object>();
+ test.put(RESPONSE, response);
+ response.put(STATUS, 201);
+
+ framework.addTest(test);
+
+ framework.runTests();
+ }
+
+ @Test
+ public void deepcopyOfTest() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations)
+ throws TestingFrameworkException {
+ Assert.assertEquals(201, responseExpectations.get(STATUS));
+ return alreadyCheckedResponse();
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ final Map<String, Object> test = new HashMap<String, Object>();
+ final Map<String, Object> response = new HashMap<String, Object>();
+ test.put(RESPONSE, response);
+ response.put(STATUS, 201);
+
+ framework.addTest(test);
+
+ // Make sure the framework makes a copy of the test for itself.
+ // This put should be ignored by the framework.
+ response.put(STATUS, 300);
+
+ framework.runTests();
+ }
+
+ @Test
+ public void removeParameter() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ @SuppressWarnings("unchecked")
+ final Map<String, String> query = (Map<String, String>) request.get(QUERY);
+ Assert.assertTrue(query.containsKey("p1"));
+ query.remove("p1");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeParameter() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ @SuppressWarnings("unchecked")
+ final Map<String, String> query = (Map<String, String>) request.get(QUERY);
+ Assert.assertTrue(query.containsKey("p1"));
+ query.put("p1", query.get("p1") + "junk");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void removeHeader() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ @SuppressWarnings("unchecked")
+ final Map<String, String> headers = (Map<String, String>) request.get(HEADERS);
+ Assert.assertTrue(headers.containsKey("header1"));
+ headers.remove("header1");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeHeader() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ @SuppressWarnings("unchecked")
+ final Map<String, String> headers = (Map<String, String>) request.get(HEADERS);
+ Assert.assertTrue(headers.containsKey("header1"));
+ headers.put("header1", headers.get("header1") + "junk");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeBody() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ final String body = (String) request.get(BODY);
+ Assert.assertNotNull(body);
+ request.put(BODY, request.get(BODY) + "junk");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeContentType() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ final String contentType = (String) request.get(CONTENT_TYPE);
+ Assert.assertNotNull(contentType);
+ request.put(CONTENT_TYPE, request.get(CONTENT_TYPE) + "junk");
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeProtocolVersion() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the request from what is expected.
+ final ProtocolVersion protocolVersion = (ProtocolVersion) request.get(PROTOCOL_VERSION);
+ Assert.assertNotNull(protocolVersion);
+ request.put(PROTOCOL_VERSION, HttpVersion.HTTP_1_0);
+ return super.execute(defaultURI, request, requestHandler, responseExpectations);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("WebServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeResponseExpectationsFails() throws Exception {
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+
+ /*
+ * The adapter should change the responseExpectations in the modifyResponseExpectations()
+ * method before they are sent to the request handler. The expectations should not
+ * be changed here.
+ */
+ // the next command should throw.
+ responseExpectations.put(STATUS, 201);
+ return null;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ try {
+ framework.runTests();
+ Assert.fail("HttpServerTestingFrameworkException should have been thrown");
+ } catch (final TestingFrameworkException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void changeResponseStatus() throws Exception {
+ final ClientTestingAdapter adapter = new ClassicTestClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // change the responseExpectations from what is expected. The change should be ignored
+ // by the request handler, and a 200 should actually be returned.
+ Assert.assertEquals(200, responseExpectations.get(STATUS));
+
+ // The next line is needed because we have to make a copy of the responseExpectations.
+ // It is an unmodifiable map.
+ final Map<String, Object> tempResponseExpectations = new HashMap<String, Object>(responseExpectations);
+ tempResponseExpectations.put(STATUS, 201);
+ final Map<String, Object> response = super.execute(defaultURI, request, requestHandler, tempResponseExpectations);
+ Assert.assertEquals(200, response.get(STATUS));
+
+ return response;
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+
+ framework.addTest();
+
+ framework.runTests();
+ }
+
+ @Test
+ public void modifyRequestCalled() throws Exception {
+ final TestingFrameworkRequestHandler mockRequestHandler = Mockito.mock(TestingFrameworkRequestHandler.class);
+ final String UNLIKELY_ITEM = "something_unlikely_to_be_in_a_real_request";
+
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // make sure the modifyRequest method was called by seeing if the request was modified.
+ Assert.assertTrue("modifyRequest should have been called.", request.containsKey(UNLIKELY_ITEM));
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, responseExpectations.get(STATUS));
+ response.put(BODY, responseExpectations.get(BODY));
+ response.put(CONTENT_TYPE, responseExpectations.get(CONTENT_TYPE));
+ response.put(HEADERS, responseExpectations.get(HEADERS));
+ return response;
+ }
+
+ @Override
+ public Map<String, Object> modifyRequest(final Map<String, Object> request) {
+ // let the adapter change the request if needed.
+ request.put(UNLIKELY_ITEM, new Object());
+ return super.modifyRequest(request);
+ }
+ };
+
+ final TestingFramework framework = newFrameworkAndSetAdapter(adapter);
+ framework.setRequestHandler(mockRequestHandler);
+
+ framework.addTest();
+
+ framework.runTests();
+
+ // assertNothingThrown() should have been called.
+ Mockito.verify(mockRequestHandler).assertNothingThrown();
+ }
+
+ @Test
+ public void modifyResponseExpectationsCalled() throws Exception {
+ final TestingFrameworkRequestHandler mockRequestHandler = Mockito.mock(TestingFrameworkRequestHandler.class);
+ final String UNLIKELY_ITEM = "something_unlikely_to_be_in_a_real_response";
+
+ final ClientTestingAdapter adapter = new ClientTestingAdapter() {
+ @Override
+ public Map<String, Object> execute(
+ final String defaultURI,
+ final Map<String, Object> request,
+ final TestingFrameworkRequestHandler requestHandler,
+ final Map<String, Object> responseExpectations) throws TestingFrameworkException {
+ // make sure the modifyRequest method was called by seeing if the request was modified.
+ Assert.assertTrue("modifyResponseExpectations should have been called.", responseExpectations.containsKey(UNLIKELY_ITEM));
+
+ final Map<String, Object> response = new HashMap<String, Object>();
+ response.put(STATUS, responseExpectations.get(STATUS));
[... 263 lines stripped ...]