You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by hi...@apache.org on 2016/09/13 22:44:43 UTC
[55/61] [abbrv] incubator-geode git commit: GEODE-37 change package
name from com.gemstone.gemfire (for
./geode-web/src/test/java/com/gemstone/gemfire)to org.apache.geode for(to
./geode-web/src/test/java/org/apache/geode)
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java
deleted file mode 100644
index bbe961b..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java
+++ /dev/null
@@ -1,509 +0,0 @@
-/*
- * 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.
- */
-package com.gemstone.gemfire.management.internal.web.http;
-
-import static org.junit.Assert.*;
-
-import java.net.URI;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.jmock.Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.MediaType;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-
-import com.gemstone.gemfire.management.internal.web.AbstractWebTestCase;
-import com.gemstone.gemfire.management.internal.web.domain.Link;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-/**
- * The ClientHttpRequestJUnitTest class is a test suite of test cases testing the contract and functionality of the
- * ClientHttpRequest class.
- * <p/>
- * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase
- * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest
- * @see org.jmock.Mockery
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since GemFire 8.0
- */
-@Category(UnitTest.class)
-public class ClientHttpRequestJUnitTest extends AbstractWebTestCase {
-
- private Mockery mockContext;
-
- @Before
- public void setUp() {
- mockContext = new Mockery();
- mockContext.setImposteriser(ClassImposteriser.INSTANCE);
- }
-
- @After
- public void tearDown() {
- mockContext.assertIsSatisfied();
- mockContext = null;
- }
-
- @Test
- public void testCreateClientHttpRequest() throws Exception {
- final Link expectedLink = new Link("test", toUri("http://host.domain.com:8080/app/service"));
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertNotNull(request);
- assertEquals(expectedLink, request.getLink());
- }
-
- @Test(expected = AssertionError.class)
- public void testCreateClientHttpRequestWithNullLink() {
- new ClientHttpRequest(null);
- }
-
- @Test
- public void testGetMethod() throws Exception {
- Link link = new Link("get-resource", toUri("http://host.domain.com:8080/app/resources/{id}"));
- ClientHttpRequest request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.GET, request.getMethod());
-
- link = new Link("delete-resource", toUri("http://host.domain.com:8080/app/resources/{id}"), HttpMethod.DELETE);
- request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.DELETE, request.getMethod());
-
- link = new Link("delete-resource", toUri("http://host.domain.com:8080/app/service"), HttpMethod.HEAD);
- request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.HEAD, request.getMethod());
-
- link = new Link("delete-resource", toUri("http://host.domain.com:8080/app/service"), HttpMethod.OPTIONS);
- request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.OPTIONS, request.getMethod());
-
- link = new Link("delete-resource", toUri("http://host.domain.com:8080/app/resources"), HttpMethod.POST);
- request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.POST, request.getMethod());
-
- link = new Link("delete-resource", toUri("http://host.domain.com:8080/app/resources"), HttpMethod.PUT);
- request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.PUT, request.getMethod());
-
- link = new Link("delete-resource", toUri("http://host.domain.com:8080/app"), HttpMethod.TRACE);
- request = new ClientHttpRequest(link);
-
- assertEquals(link, request.getLink());
- assertEquals(org.springframework.http.HttpMethod.TRACE, request.getMethod());
- }
-
- @Test
- public void testIsDelete() throws Exception {
- final Link expectedLink = new Link("delete", toUri("http://host.domain.com:8080/app/resources/{id}"), HttpMethod.DELETE);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertTrue(request.isDelete());
- assertFalse(request.isGet());
- assertFalse(request.isPost());
- assertFalse(request.isPut());
- }
-
- @Test
- public void testIsGet() throws Exception {
- final Link expectedLink = new Link("get", toUri("http://host.domain.com:8080/app/resources/{id}"), HttpMethod.GET);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertFalse(request.isDelete());
- assertTrue(request.isGet());
- assertFalse(request.isPost());
- assertFalse(request.isPut());
- }
-
- @Test
- public void testIsPost() throws Exception {
- final Link expectedLink = new Link("post", toUri("http://host.domain.com:8080/app/resources"), HttpMethod.POST);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertFalse(request.isDelete());
- assertFalse(request.isGet());
- assertTrue(request.isPost());
- assertFalse(request.isPut());
- }
-
- @Test
- public void testIsPut() throws Exception {
- final Link expectedLink = new Link("put", toUri("http://host.domain.com:8080/app/resources/{id}"), HttpMethod.PUT);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertFalse(request.isDelete());
- assertFalse(request.isGet());
- assertFalse(request.isPost());
- assertTrue(request.isPut());
- }
-
- @Test
- public void testGetPathVariables() throws Exception {
- final Link expectedLink = new Link("test", toUri("http://host.domain.com:8080/app/libraries/{name}/books/{author}/{title}"));
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertEquals(Arrays.asList("name", "author", "title"), request.getPathVariables());
- }
-
- @Test
- public void testGetPathVariablesWithUriHavingNoPathVariables() throws Exception {
- final Link expectedLink = new Link("test", toUri("http://host.domain.com:8080/app/service"));
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
-
- final List<String> actualPathVariables = request.getPathVariables();
-
- assertNotNull(actualPathVariables);
- assertTrue(actualPathVariables.isEmpty());
- }
-
- @Test
- public void testGetURI() throws Exception {
- final URI expectedURI = toUri("http://host.domain.com:8080/app/service");
- final Link expectedLink = new Link("test", expectedURI);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertEquals(expectedURI, request.getURI());
- }
-
- @Test
- public void testGetURLForGet() throws Exception {
- final Link expectedLink = new Link("find", toUri("http://host.domain.com:8080/app/libraries/{name}/books"), HttpMethod.GET);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- request.addParameterValues("author", "Rowling");
- request.addParameterValues("category", "science-fiction");
-
- assertEquals(expectedLink, request.getLink());
- assertEquals("http://host.domain.com:8080/app/libraries/amazon/books?author=Rowling&category=science-fiction",
- toString(request.getURL(Collections.singletonMap("name", "amazon"))));
- }
-
- @Test
- public void testGetURLForGetEncoded() throws Exception {
- final Link expectedLink = new Link("readValue4Key", toUri("http://host.domain.com:8080/app/regions/{region}/keys/{key}"), HttpMethod.GET);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- final Map<String, Object> uriVariables = new HashMap<String, Object>(4);
-
- uriVariables.put("region", "Customers/Accounts/Orders");
- uriVariables.put("key", "123");
- uriVariables.put("item", "456");
-
- assertEquals(expectedLink, request.getLink());
- assertEquals("http://host.domain.com:8080/app/regions/Customers%2FAccounts%2FOrders/keys/123",
- toString(request.getURL(uriVariables)));
- }
-
- @Test
- public void testGetURLForGetWithQueryParametersNoBody() throws Exception {
- final Link expectedLink = new Link("find", toUri("http://host.domain.com:8080/app/libraries/{name}/books/{author}"), HttpMethod.GET);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- request.addParameterValues("author", "Rowling");
- request.addParameterValues("category", "science-fiction");
- request.addParameterValues("name", "Boston");
- request.addParameterValues("year", "2007");
-
- final Map<String, Object> uriVariables = new HashMap<String, Object>(4);
-
- uriVariables.put("author", "Rowling");
- uriVariables.put("category", "mystery");
- uriVariables.put("isbn", "0-123456789");
- uriVariables.put("name", "Amazon");
-
- assertEquals(expectedLink, request.getLink());
- assertEquals("http://host.domain.com:8080/app/libraries/Amazon/books/Rowling?category=science-fiction&year=2007",
- toString(request.getURL(uriVariables)));
- }
-
- @Test
- public void testGetURLForDelete() throws Exception {
- final Link expectedLink = new Link("delete-all", toUri("http://host.domain.com:8080/app/libraries/{name}/books"), HttpMethod.DELETE);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- request.addParameterValues("category", "romance");
-
- assertEquals(expectedLink, request.getLink());
- assertEquals("http://host.domain.com:8080/app/libraries/congress/books?category=romance",
- toString(request.getURL(Collections.singletonMap("name", "congress"))));
- }
-
- @Test
- public void testGetURLForPost() throws Exception {
- final Link expectedLink = new Link("post", toUri("http://host.domain.com:8080/app/libraries/{name}/books"), HttpMethod.POST);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- request.addParameterValues("author", "Douglas Adams");
- request.addParameterValues("title", "The Hitchhiker's Guide to the Galaxy");
- request.addParameterValues("year", "1979");
- request.addParameterValues("isbn", "0345453743");
-
- assertEquals(expectedLink, request.getLink());
- assertEquals("http://host.domain.com:8080/app/libraries/royal/books",
- toString(request.getURL(Collections.singletonMap("name", "royal"))));
- }
-
- @Test
- public void testGetURLForPut() throws Exception {
- final Link expectedLink = new Link("put", toUri("http://host.domain.com:8080/app/libraries/{name}/books/{isbn}"), HttpMethod.PUT);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- request.addParameterValues("year", "1983");
-
- final Map<String, String> uriVariables = new HashMap<String, String>(2);
-
- uriVariables.put("name", "royal");
- uriVariables.put("isbn", "0345453743");
-
- assertEquals(expectedLink, request.getLink());
- assertEquals("http://host.domain.com:8080/app/libraries/royal/books/0345453743",
- toString(request.getURL(uriVariables)));
- }
-
- @Test
- public void testCreateRequestEntityForGet() throws Exception {
- final Link expectedLink = new Link("find", toUri("http://host.domain.com:8080/app/libraries/{name}/books"), HttpMethod.GET);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
-
- request.addHeaderValues(HttpHeader.CONTENT_TYPE.getName(), MediaType.TEXT_PLAIN_VALUE);
- request.addParameterValues("author", "Rowling");
- request.addParameterValues("category", "science-fiction");
-
- final HttpEntity<?> requestEntity = request.createRequestEntity();
-
- assertNotNull(requestEntity);
- assertNotNull(requestEntity.getHeaders());
- assertEquals(MediaType.TEXT_PLAIN, requestEntity.getHeaders().getContentType());
- assertNull(requestEntity.getBody());
- }
-
- @Test
- public void testCreateRequestEntityForDelete() throws Exception {
- final Link expectedLink = new Link("delete-all", toUri("http://host.domain.com:8080/app/libraries/{name}/books"), HttpMethod.DELETE);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
-
- request.addHeaderValues(HttpHeader.ACCEPT.getName(), MediaType.APPLICATION_JSON_VALUE);
- request.addParameterValues("category", "romance");
-
- final HttpEntity<?> requestEntity = request.createRequestEntity();
-
- assertNotNull(requestEntity);
- assertNotNull(requestEntity.getHeaders());
- assertEquals(Collections.singletonList(MediaType.APPLICATION_JSON), requestEntity.getHeaders().getAccept());
- assertNull(requestEntity.getBody());
- }
-
- @Test
- @SuppressWarnings("unchecked")
- public void testCreateRequestEntityForPost() throws Exception {
- final Link expectedLink = new Link("post", toUri("http://host.domain.com:8080/app/libraries/{name}/books"), HttpMethod.POST);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
-
- final MultiValueMap<String, Object> expectedRequestParameters = new LinkedMultiValueMap<String, Object>(4);
-
- expectedRequestParameters.add("author", "Douglas Adams");
- expectedRequestParameters.add("title", "The Hitchhiker's Guide to the Galaxy");
- expectedRequestParameters.add("year", "1979");
- expectedRequestParameters.add("isbn", "0345453743");
-
- request.addHeaderValues(HttpHeader.CONTENT_TYPE.getName(), MediaType.APPLICATION_FORM_URLENCODED_VALUE);
- request.addParameterValues("author", expectedRequestParameters.getFirst("author"));
- request.addParameterValues("title", expectedRequestParameters.getFirst("title"));
- request.addParameterValues("year", expectedRequestParameters.getFirst("year"));
- request.addParameterValues("isbn", expectedRequestParameters.getFirst("isbn"));
-
- final HttpEntity<MultiValueMap<String, Object>> requestEntity = (HttpEntity<MultiValueMap<String, Object>>)
- request.createRequestEntity();
-
- assertNotNull(requestEntity);
- assertNotNull(requestEntity.getHeaders());
- assertEquals(MediaType.APPLICATION_FORM_URLENCODED, requestEntity.getHeaders().getContentType());
- assertEquals(expectedRequestParameters, requestEntity.getBody());
- }
-
- @Test
- @SuppressWarnings("unchecked")
- public void testCreateRequestEntityForPut() throws Exception {
- final Link expectedLink = new Link("put", toUri("http://host.domain.com:8080/app/libraries/{name}/books/{isbn}"), HttpMethod.PUT);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
-
- final MultiValueMap<String, Object> expectedRequestParameters = new LinkedMultiValueMap<String, Object>(4);
-
- expectedRequestParameters.add("year", "1979");
-
- request.addHeaderValues(HttpHeader.ACCEPT.getName(), MediaType.TEXT_XML_VALUE);
- request.addHeaderValues(HttpHeader.CONTENT_TYPE.getName(), MediaType.APPLICATION_FORM_URLENCODED_VALUE);
- request.addParameterValues("year", expectedRequestParameters.getFirst("year"));
-
- final HttpEntity<MultiValueMap<String, Object>> requestEntity = (HttpEntity<MultiValueMap<String, Object>>)
- request.createRequestEntity();
-
- assertNotNull(requestEntity);
- assertNotNull(requestEntity.getHeaders());
- assertEquals(Collections.singletonList(MediaType.TEXT_XML), requestEntity.getHeaders().getAccept());
- assertEquals(MediaType.APPLICATION_FORM_URLENCODED, requestEntity.getHeaders().getContentType());
- assertEquals(expectedRequestParameters, requestEntity.getBody());
- }
-
- @Test
- public void testCreateRequestEntityOnPost() throws Exception {
- final Library mockLibrary = mockContext.mock(Library.class, "testCreateRequestEntityOnPost.Library");
- final Link expectedLink = new Link("post", toUri("http://host.domain.com:8080/app/libraries"), HttpMethod.POST);
-
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertTrue(request.isPost());
- assertNull(request.getContent());
-
- request.setContent(mockLibrary);
-
- assertSame(mockLibrary, request.getContent());
-
- final HttpEntity<?> requestEntity = request.createRequestEntity();
-
- assertNotNull(requestEntity);
- assertTrue(requestEntity.getBody() instanceof Library);
- }
-
- @Test
- public void testCreateRequestEntityOnPut() throws Exception {
- final Book mockBook = mockContext.mock(Book.class, "testCreateRequestEntityOnPut.Book");
- final Link expectedLink = new Link("put", toUri("http://host.domain.com:8080/app/libraries/{name}/books/{id}"), HttpMethod.PUT);
-
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertTrue(request.isPut());
- assertNull(request.getContent());
-
- request.setContent(mockBook);
- request.addParameterValues("isbn", "0-123456789");
- request.addParameterValues("category", "science-fiction", "sci-fi", "fiction");
-
- assertSame(mockBook, request.getContent());
- assertEquals("0-123456789", request.getParameterValue("isbn"));
- assertTrue(request.getParameterValues("category").containsAll(Arrays.asList("science-fiction", "sci-fi", "fiction")));
-
- final HttpEntity<?> requestEntity = request.createRequestEntity();
-
- assertNotNull(requestEntity);
- assertTrue(requestEntity.getBody() instanceof MultiValueMap);
- assertEquals(MediaType.APPLICATION_FORM_URLENCODED, requestEntity.getHeaders().getContentType());
- }
-
- @Test
- public void testSetAndGetHeaderValues() throws Exception {
- final Link expectedLink = new Link("put", toUri("http://host.domain.com:8080/app/libraries"), HttpMethod.PUT);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertTrue(request.getHeaders().isEmpty());
-
- request.addHeaderValues(HttpHeader.CONTENT_TYPE.getName(), MediaType.APPLICATION_JSON_VALUE);
- request.addHeaderValues(HttpHeader.ACCEPT.getName(), MediaType.APPLICATION_JSON_VALUE,
- MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_PLAIN_VALUE);
-
- assertEquals(MediaType.APPLICATION_JSON_VALUE, request.getHeaderValue(HttpHeader.CONTENT_TYPE.getName()));
- assertEquals(1, request.getHeaderValues(HttpHeader.CONTENT_TYPE.getName()).size());
- assertEquals(MediaType.APPLICATION_JSON_VALUE, request.getHeaderValue(HttpHeader.ACCEPT.getName()));
- assertEquals(3, request.getHeaderValues(HttpHeader.ACCEPT.getName()).size());
- assertTrue(request.getHeaderValues(HttpHeader.ACCEPT.getName()).containsAll(Arrays.asList(
- MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_PLAIN_VALUE)));
-
- request.setHeader(HttpHeader.ACCEPT.getName(), MediaType.APPLICATION_OCTET_STREAM_VALUE);
-
- assertEquals(MediaType.APPLICATION_OCTET_STREAM_VALUE, request.getHeaderValue(HttpHeader.ACCEPT.getName()));
- assertEquals(1, request.getHeaderValues(HttpHeader.ACCEPT.getName()).size());
- assertTrue(request.getHeaderValues(HttpHeader.ACCEPT.getName()).containsAll(Arrays.asList(
- MediaType.APPLICATION_OCTET_STREAM_VALUE)));
- }
-
- @Test
- public void testSetAndGetParameterValues() throws Exception {
- final Link expectedLink = new Link("put", toUri("http://host.domain.com:8080/app/libraries"), HttpMethod.PUT);
- final ClientHttpRequest request = new ClientHttpRequest(expectedLink);
-
- assertEquals(expectedLink, request.getLink());
- assertTrue(request.getParameters().isEmpty());
-
- request.addParameterValues("parameterOne", "value");
- request.addParameterValues("parameterTwo", "test", "testing", "tested");
-
- assertEquals("value", request.getParameterValue("parameterOne"));
- assertEquals(1, request.getParameterValues("parameterOne").size());
- assertEquals("test", request.getParameterValue("parameterTwo"));
- assertEquals(3, request.getParameterValues("parameterTwo").size());
- assertTrue(request.getParameterValues("parameterTwo").containsAll(Arrays.asList("test", "testing", "tested")));
-
- request.setParameter("parameterTwo", "development");
-
- assertEquals("development", request.getParameterValue("parameterTwo"));
- assertEquals(1, request.getParameterValues("parameterTwo").size());
- assertTrue(request.getParameterValues("parameterTwo").containsAll(Arrays.asList("development")));
- }
-
- @SuppressWarnings("unused")
- private static interface Library {
- public String getName();
- }
-
- @SuppressWarnings("unused")
- private static interface Book {
- public String getAuthor();
- public String getIsbn();
- public String getTitle();
- public Integer getYear();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java
deleted file mode 100644
index 9ecf645..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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.
- */
-package com.gemstone.gemfire.management.internal.web.http.converter;
-
-import static org.junit.Assert.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Calendar;
-
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpInputMessage;
-import org.springframework.http.HttpOutputMessage;
-import org.springframework.http.MediaType;
-
-import com.gemstone.gemfire.internal.util.IOUtils;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-/**
- * The SerializableObjectHttpMessageConverterJUnitTest class is a test suite of test cases testing the contract
- * and functionality of the SerializableObjectHttpMessageConverter class.
- * <p/>
- * @see com.gemstone.gemfire.management.internal.web.http.converter.SerializableObjectHttpMessageConverter
- * @see org.jmock.Mockery
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since GemFire 8.0
- */
-@Category(UnitTest.class)
-public class SerializableObjectHttpMessageConverterJUnitTest {
-
- private Mockery mockContext;
-
- @Before
- public void setUp() {
- mockContext = new Mockery();
- mockContext.setImposteriser(ClassImposteriser.INSTANCE);
- }
-
- @After
- public void tearDown() {
- mockContext.assertIsSatisfied();
- mockContext = null;
- }
-
- @Test
- public void testCreateSerializableObjectHttpMessageConverter() {
- final SerializableObjectHttpMessageConverter converter = new SerializableObjectHttpMessageConverter();
-
- assertNotNull(converter);
- assertTrue(converter.getSupportedMediaTypes().contains(MediaType.APPLICATION_OCTET_STREAM));
- assertTrue(converter.getSupportedMediaTypes().contains(MediaType.ALL));
- }
-
- @Test
- public void testSupport() {
- final SerializableObjectHttpMessageConverter converter = new SerializableObjectHttpMessageConverter();
-
- assertTrue(converter.supports(Boolean.class));
- assertTrue(converter.supports(Calendar.class));
- assertTrue(converter.supports(Character.class));
- assertTrue(converter.supports(Integer.class));
- assertTrue(converter.supports(Double.class));
- assertTrue(converter.supports(String.class));
- assertTrue(converter.supports(Serializable.class));
- assertFalse(converter.supports(Object.class));
- assertFalse(converter.supports(null));
- }
-
- @Test
- public void testReadInternal() throws IOException {
- final String expectedInputMessageBody = "Expected content of the HTTP input message body!";
-
- final HttpInputMessage mockInputMessage = mockContext.mock(HttpInputMessage.class, "HttpInputMessage");
-
- mockContext.checking(new Expectations() {{
- oneOf(mockInputMessage).getBody();
- will(returnValue(new ByteArrayInputStream(IOUtils.serializeObject(expectedInputMessageBody))));
- }});
-
- final SerializableObjectHttpMessageConverter converter = new SerializableObjectHttpMessageConverter();
-
- final Serializable obj = converter.readInternal(String.class, mockInputMessage);
-
- assertTrue(obj instanceof String);
- assertEquals(expectedInputMessageBody, obj);
- }
-
- @Test
- public void testSetContentLength() {
- final byte[] bytes = { (byte) 0xCA, (byte) 0xFE, (byte) 0xBA, (byte) 0xBE };
-
- final HttpHeaders headers = new HttpHeaders();
-
- final HttpOutputMessage mockOutputMessage = mockContext.mock(HttpOutputMessage.class, "HttpOutputMessage");
-
- mockContext.checking(new Expectations() {{
- oneOf(mockOutputMessage).getHeaders();
- will(returnValue(headers));
- }});
-
- final SerializableObjectHttpMessageConverter converter = new SerializableObjectHttpMessageConverter();
-
- converter.setContentLength(mockOutputMessage, bytes);
-
- assertEquals(bytes.length, headers.getContentLength());
- }
-
- @Test
- public void testWriteInternal() throws IOException {
- final String expectedOutputMessageBody = "Expected media of the HTTP output message body!";
-
- final byte[] expectedOutputMessageBodyBytes = IOUtils.serializeObject(expectedOutputMessageBody);
-
- final ByteArrayOutputStream out = new ByteArrayOutputStream(expectedOutputMessageBodyBytes.length);
-
- final HttpHeaders headers = new HttpHeaders();
-
- final HttpOutputMessage mockOutputMessage = mockContext.mock(HttpOutputMessage.class, "HttpOutputMessage");
-
- mockContext.checking(new Expectations() {{
- oneOf(mockOutputMessage).getHeaders();
- will(returnValue(headers));
- oneOf(mockOutputMessage).getBody();
- will(returnValue(out));
- }});
-
- final SerializableObjectHttpMessageConverter converter = new SerializableObjectHttpMessageConverter();
-
- converter.writeInternal(expectedOutputMessageBody, mockOutputMessage);
-
- final byte[] actualOutputMessageBodyBytes = out.toByteArray();
-
- assertEquals(expectedOutputMessageBodyBytes.length, headers.getContentLength());
- assertEquals(expectedOutputMessageBodyBytes.length, actualOutputMessageBodyBytes.length);
-
- for (int index = 0; index < actualOutputMessageBodyBytes.length; index++) {
- assertEquals(expectedOutputMessageBodyBytes[index], actualOutputMessageBodyBytes[index]);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java
deleted file mode 100644
index b11125c..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * 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.
- */
-package com.gemstone.gemfire.management.internal.web.shell;
-
-import static org.junit.Assert.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.springframework.core.io.Resource;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.ResourceAccessException;
-
-import com.gemstone.gemfire.internal.lang.StringUtils;
-import com.gemstone.gemfire.management.internal.cli.CommandRequest;
-import com.gemstone.gemfire.management.internal.web.AbstractWebTestCase;
-import com.gemstone.gemfire.management.internal.web.domain.Link;
-import com.gemstone.gemfire.management.internal.web.domain.LinkIndex;
-import com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest;
-import com.gemstone.gemfire.management.internal.web.http.HttpMethod;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-/**
- * The RestHttpOperationInvokerJUnitTest class is a test suite of test cases testing the contract and functionality of the
- * RestHttpOperationInvoker class.
- * <p/>
- * @see java.net.URI
- * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
- * @see com.gemstone.gemfire.management.internal.web.http.HttpMethod
- * @see com.gemstone.gemfire.management.internal.web.domain.Link
- * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex
- * @see com.gemstone.gemfire.management.internal.web.shell.RestHttpOperationInvoker
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since GemFire 8.0
- */
-@SuppressWarnings("unused")
-@Category(UnitTest.class)
-public class RestHttpOperationInvokerJUnitTest extends AbstractWebTestCase {
-
- private LinkIndex linkIndex;
-
- private RestHttpOperationInvoker operationInvoker;
-
- @Before
- public void setUp() throws Exception {
- final Link listLibraries = new Link("list-libraries", toUri("http://host.domain.com/service/v1/libraries"));
- final Link getLibrary = new Link("get-library", toUri("http://host.domain.com/service/v1/libraries/{name}"));
- final Link listBooks = new Link("list-books", toUri("http://host.domain.com/service/v1/libraries/{name}/books"));
- final Link listBooksByAuthor = new Link("list-books", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{author}"));
- final Link listBooksByAuthorAndCategory = new Link("list-books", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{author}/{category}"));
- final Link listBooksByAuthorAndYear = new Link("list-books", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{author}/{year}"));
- final Link listBooksByAuthorCategoryAndYear = new Link("list-books", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{author}/{category}/{year}"));
- final Link addBook = new Link("add-book", toUri("http://host.domain.com/service/v1/libraries/{name}/books"), HttpMethod.POST);
- final Link getBookByIsbn = new Link("get-book", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{isbn}"));
- final Link getBookByTitle = new Link("get-book", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{title}"));
- final Link removeBook = new Link("remove-book", toUri("http://host.domain.com/service/v1/libraries/{name}/books/{isbn}"), HttpMethod.DELETE);
-
- linkIndex = new LinkIndex();
-
- linkIndex.addAll(
- listLibraries,
- getLibrary,
- listBooks,
- listBooksByAuthor,
- listBooksByAuthorAndCategory,
- listBooksByAuthorAndYear,
- listBooksByAuthorCategoryAndYear,
- addBook,
- getBookByIsbn,
- getBookByTitle,
- removeBook
- );
-
- assertEquals(11, linkIndex.size());
-
- operationInvoker = new RestHttpOperationInvoker(linkIndex);
-
- assertSame(linkIndex, operationInvoker.getLinkIndex());
- }
-
- @After
- public void tearDown() {
- operationInvoker.stop();
- operationInvoker = null;
- }
-
- private CommandRequest createCommandRequest(final String command, final Map<String, String> options) {
- return new TestCommandRequest(command, options, Collections.<String, String>emptyMap(), null);
- }
-
- private CommandRequest createCommandRequest(final String command, final Map<String, String> options, final Map<String, String> environment) {
- return new TestCommandRequest(command, options, environment, null);
- }
-
- private CommandRequest createCommandRequest(final String command, final Map<String, String> options, final byte[][] fileData) {
- return new TestCommandRequest(command, options, Collections.<String, String>emptyMap(), fileData);
- }
-
- private CommandRequest createCommandRequest(final String command, final Map<String, String> options, final Map<String, String> environment, final byte[][] fileData) {
- return new TestCommandRequest(command, options, environment, fileData);
- }
-
- private LinkIndex getLinkIndex() {
- assertTrue("The LinkIndex was not property initialized!", linkIndex != null);
- return linkIndex;
- }
-
- private RestHttpOperationInvoker getOperationInvoker() {
- assertTrue("The RestHttpOperationInvoker was not properly initialized!", operationInvoker != null);
- return operationInvoker;
- }
-
- @Test
- public void testCreateHttpRequest() {
- final Map<String, String> commandOptions = new HashMap<String, String>();
-
- commandOptions.put("author", "Adams");
- commandOptions.put("blankOption", " ");
- commandOptions.put("category", "sci-fi");
- commandOptions.put("emptyOption", StringUtils.EMPTY_STRING);
- commandOptions.put("isbn", "0-123456789");
- commandOptions.put("nullOption", null);
- commandOptions.put("title", "Hitch Hiker's Guide to the Galaxy");
- commandOptions.put("year", "1983");
-
- final CommandRequest command = createCommandRequest("add-book", commandOptions);
-
- final ClientHttpRequest request = getOperationInvoker().createHttpRequest(command);
-
- assertNotNull(request);
- assertEquals("POST http://host.domain.com/service/v1/libraries/{name}/books", request.getLink().toHttpRequestLine());
- assertEquals("Adams", request.getParameterValue("author"));
- assertEquals("sci-fi", request.getParameterValue("category"));
- assertEquals("0-123456789", request.getParameterValue("isbn"));
- assertEquals("Hitch Hiker's Guide to the Galaxy", request.getParameterValue("title"));
- assertEquals("1983", request.getParameterValue("year"));
- assertTrue(request.getParameters().containsKey("blankOption"));
- assertTrue(request.getParameters().containsKey("emptyOption"));
- assertFalse(request.getParameters().containsKey("nullOption"));
-
- for (String requestParameter : request.getParameters().keySet()) {
- assertFalse(requestParameter.startsWith(RestHttpOperationInvoker.ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX));
- }
-
- assertNull(request.getParameterValue(RestHttpOperationInvoker.RESOURCES_REQUEST_PARAMETER));
- }
-
- @Test
- public void testCreateHttpRequestWithEnvironmentVariables() {
- final Map<String, String> commandOptions = new HashMap<String, String>(2);
-
- commandOptions.put("name", "ElLibreDeCongress");
- commandOptions.put("isbn", "${ISBN}");
-
- final Map<String, String> environment = new HashMap<String, String>(2);
-
- environment.put("ISBN", "0-987654321");
- environment.put("VAR", "test");
-
- final CommandRequest command = createCommandRequest("get-book", commandOptions, environment);
-
- final ClientHttpRequest request = getOperationInvoker().createHttpRequest(command);
-
- assertNotNull(request);
- assertEquals("GET http://host.domain.com/service/v1/libraries/{name}/books/{isbn}", request.getLink()
- .toHttpRequestLine());
- assertEquals("${ISBN}", request.getParameterValue("isbn"));
- assertFalse(request.getParameters().containsKey("ISBN"));
- assertEquals("0-987654321", request.getParameterValue(
- RestHttpOperationInvoker.ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX + "ISBN"));
- assertFalse(request.getParameters().containsKey("VAR"));
- assertEquals("test", request.getParameterValue(
- RestHttpOperationInvoker.ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX + "VAR"));
- }
-
- @Test
- public void testCreatHttpRequestWithFileData() {
- final Map<String, String> commandOptions = Collections.singletonMap("isbn", "0-123456789");
-
- final byte[][] fileData = {
- "/path/to/book/content.txt".getBytes(),
- "Once upon a time in a galaxy far, far away...".getBytes()
- };
-
- final CommandRequest command = createCommandRequest("add-book", commandOptions, fileData);
-
- final ClientHttpRequest request = getOperationInvoker().createHttpRequest(command);
-
- assertNotNull(request);
- assertEquals("POST http://host.domain.com/service/v1/libraries/{name}/books", request.getLink().toHttpRequestLine());
- assertEquals("0-123456789", request.getParameterValue("isbn"));
- assertTrue(request.getParameters().containsKey(RestHttpOperationInvoker.RESOURCES_REQUEST_PARAMETER));
- assertTrue(request.getParameterValue(RestHttpOperationInvoker.RESOURCES_REQUEST_PARAMETER) instanceof Resource);
-
- final List<Object> resources = request.getParameterValues(RestHttpOperationInvoker.RESOURCES_REQUEST_PARAMETER);
-
- assertNotNull(resources);
- assertFalse(resources.isEmpty());
- assertEquals(1, resources.size());
- }
-
- @Test
- public void testFindAndResolveLink() throws Exception {
- final Map<String, String> commandOptions = new HashMap<String, String>();
-
- commandOptions.put("name", "BarnesN'Noble");
-
- Link link = getOperationInvoker().findLink(createCommandRequest("list-libraries", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries", toString(link.getHref()));
-
- link = getOperationInvoker().findLink(createCommandRequest("get-library", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}", toString(link.getHref()));
-
- commandOptions.put("author", "J.K.Rowlings");
-
- link = getOperationInvoker().findLink(createCommandRequest("list-books", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}/books/{author}", toString(link.getHref()));
-
- commandOptions.put("category", "sci-fi");
- commandOptions.put("year", "1998");
- commandOptions.put("bogus", "data");
-
- link = getOperationInvoker().findLink(createCommandRequest("list-books", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}/books/{author}/{category}/{year}",
- toString(link.getHref()));
-
- commandOptions.remove("category");
-
- link = getOperationInvoker().findLink(createCommandRequest("list-books", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}/books/{author}/{year}",
- toString(link.getHref()));
-
- commandOptions.put("category", "fantasy");
- commandOptions.put("isbn", "0-123456789");
- commandOptions.put("title", "Harry Potter");
-
- link = getOperationInvoker().findLink(createCommandRequest("add-book", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}/books", toString(link.getHref()));
-
- commandOptions.remove("isbn");
-
- link = getOperationInvoker().findLink(createCommandRequest("get-book", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}/books/{title}", toString(link.getHref()));
-
- link = getOperationInvoker().findLink(createCommandRequest("remove-book", commandOptions));
-
- assertNotNull(link);
- assertEquals("http://host.domain.com/service/v1/libraries/{name}/books/{isbn}", toString(link.getHref()));
- }
-
- @Test
- public void testProcessCommand() {
- final String expectedResult = "{\"libraries\":[{\"library-of\":\"Congress\"}]"; // JSON
-
- final RestHttpOperationInvoker operationInvoker = new RestHttpOperationInvoker(getLinkIndex()) {
- @Override
- public boolean isConnected() {
- return true;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- protected <T> ResponseEntity<T> send(final ClientHttpRequest request, final Class<T> responseType, final Map<String, ?> uriVariables) {
- return new ResponseEntity(expectedResult, HttpStatus.OK);
- }
- };
-
- final String actualResult = operationInvoker.processCommand(createCommandRequest("list-libraries",
- Collections.<String, String>emptyMap()));
-
- assertEquals(expectedResult, actualResult);
- }
-
- @Test
- public void testProcessCommandDelegatesToSimpleProcessCommand() {
- final String expectedResult = "<resources>test</resources>";
-
- final RestHttpOperationInvoker operationInvoker = new RestHttpOperationInvoker(getLinkIndex()) {
- @Override
- public boolean isConnected() {
- return true;
- }
-
- @Override
- protected HttpOperationInvoker getHttpOperationInvoker() {
- return new AbstractHttpOperationInvoker(AbstractHttpOperationInvoker.REST_API_URL) {
- @Override public Object processCommand(final CommandRequest command) {
- return expectedResult;
- }
- };
- }
-
- @Override
- protected void printWarning(final String message, final Object... args) {
- }
- };
-
- final String actualResult = operationInvoker.processCommand(createCommandRequest("get resource",
- Collections.<String, String>emptyMap()));
-
- assertEquals(expectedResult, actualResult);
- }
-
- @Test
- public void testProcessCommandHandlesResourceAccessException() {
- final RestHttpOperationInvoker operationInvoker = new RestHttpOperationInvoker(getLinkIndex()) {
- private boolean connected = true;
-
- @Override
- public boolean isConnected() {
- return connected;
- }
-
- @Override
- protected void printWarning(final String message, final Object... args) {
- }
-
- @Override
- protected <T> ResponseEntity<T> send(final ClientHttpRequest request, final Class<T> responseType, final Map<String, ?> uriVariables) {
- throw new ResourceAccessException("test");
- }
-
- @Override
- public void stop() {
- this.connected = false;
- }
- };
-
- assertTrue(operationInvoker.isConnected());
-
- final String expectedResult = String.format(
- "The connection to the GemFire Manager's HTTP service @ %1$s failed with: %2$s. "
- + "Please try reconnecting or see the GemFire Manager's log file for further details.",
- operationInvoker.getBaseUrl(), "test");
-
- final String actualResult = operationInvoker.processCommand(createCommandRequest("list-libraries",
- Collections.<String, String>emptyMap()));
-
- assertFalse(operationInvoker.isConnected());
- assertEquals(expectedResult, actualResult);
- }
-
- @Test(expected = RestApiCallForCommandNotFoundException.class)
- public void testProcessCommandThrowsRestApiCallForCommandNotFoundException() {
- final RestHttpOperationInvoker operationInvoker = new RestHttpOperationInvoker(getLinkIndex()) {
- @Override
- public boolean isConnected() {
- return true;
- }
-
- @Override
- protected HttpOperationInvoker getHttpOperationInvoker() {
- return null;
- }
- };
-
- try {
- operationInvoker.processCommand(createCommandRequest("get resource", Collections.<String, String>emptyMap()));
- }
- catch (RestApiCallForCommandNotFoundException e) {
- assertEquals("No REST API call for command (get resource) was found!", e.getMessage());
- throw e;
- }
- }
-
- @Test(expected = IllegalStateException.class)
- public void testProcessCommandWhenNotConnected() {
- try {
- getOperationInvoker().processCommand(createCommandRequest("get-book", Collections.<String, String>emptyMap()));
- }
- catch (IllegalStateException e) {
- assertEquals("Gfsh must be connected to the GemFire Manager in order to process commands remotely!",
- e.getMessage());
- throw e;
- }
- }
-
- private static final class TestCommandRequest extends CommandRequest {
-
- private final Map<String, String> commandParameters = new TreeMap<String, String>();
-
- private final String command;
-
- protected TestCommandRequest(final String command,
- final Map<String, String> commandParameters,
- final Map<String, String> environment,
- final byte[][] fileData)
- {
- super(environment, fileData);
-
- assert command != null : "The command cannot be null!";
-
- this.command = command;
-
- if (commandParameters != null) {
- this.commandParameters.putAll(commandParameters);
- }
- }
-
- @Override
- public String getInput() {
- return command;
- }
-
- @Override
- public String getName() {
- return command;
- }
-
- @Override
- public Map<String, String> getParameters() {
- return Collections.unmodifiableMap(commandParameters);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java
deleted file mode 100644
index 557cc20..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * 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.
- */
-package com.gemstone.gemfire.management.internal.web.shell;
-
-import static org.junit.Assert.*;
-
-import java.util.Collections;
-
-import com.gemstone.gemfire.management.internal.cli.CommandRequest;
-import com.gemstone.gemfire.management.internal.web.AbstractWebTestCase;
-import com.gemstone.gemfire.management.internal.web.domain.Link;
-import com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest;
-import com.gemstone.gemfire.management.internal.web.http.HttpHeader;
-import com.gemstone.gemfire.management.internal.web.http.HttpMethod;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.ResourceAccessException;
-
-/**
- * The SimpleHttpOperationInvokerJUnitTest class is a test suite of test cases testing the contract and functionality of the
- * SimpleHttpOperationInvoker class.
- * <p/>
- * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase
- * @see com.gemstone.gemfire.management.internal.web.shell.SimpleHttpOperationInvoker
- * @see org.junit.Assert
- * @see org.junit.After
- * @see org.junit.Before
- * @see org.junit.Test
- * @since GemFire 8.0
- */
-@Category(UnitTest.class)
-public class SimpleHttpOperationInvokerJUnitTest extends AbstractWebTestCase {
-
- private SimpleHttpOperationInvoker operationInvoker;
-
- @Before
- public void setUp() {
- operationInvoker = new SimpleHttpOperationInvoker();
- }
-
- @After
- public void tearDown() {
- operationInvoker.stop();
- operationInvoker = null;
- }
-
- private CommandRequest createCommandRequest(final String command) {
- return new TestCommandRequest(command);
- }
-
- private String getExpectedHttpRequestUrl(final CommandRequest command) {
- return SimpleHttpOperationInvoker.REST_API_URL.concat(SimpleHttpOperationInvoker.REST_API_MANAGEMENT_COMMANDS_URI)
- .concat("?").concat(SimpleHttpOperationInvoker.CMD_QUERY_PARAMETER).concat("=").concat(command.getInput());
- }
-
- private SimpleHttpOperationInvoker getOperationInvoker() {
- return operationInvoker;
- }
-
- @Test
- public void testCreateHttpRequest() throws Exception {
- final CommandRequest command = createCommandRequest("save resource --path=/path/to/file --size=1024KB");
-
- final ClientHttpRequest request = getOperationInvoker().createHttpRequest(command);
-
- assertNotNull(request);
- assertEquals(SimpleHttpOperationInvoker.USER_AGENT_HTTP_REQUEST_HEADER_VALUE,
- request.getHeaderValue(HttpHeader.USER_AGENT.getName()));
-
- final Link requestLink = request.getLink();
-
- assertNotNull(requestLink);
- assertTrue(toString(requestLink).startsWith("POST"));
- assertTrue(toString(requestLink).endsWith(command.getInput()));
- }
-
- @Test
- public void testCreateLink() throws Exception {
- final CommandRequest command = createCommandRequest("delete resource --id=1");
-
- final Link actualLink = getOperationInvoker().createLink(command);
-
- assertNotNull(actualLink);
- assertEquals(SimpleHttpOperationInvoker.LINK_RELATION, actualLink.getRelation());
- assertEquals(HttpMethod.POST, actualLink.getMethod());
- assertTrue(toString(actualLink.getHref()).endsWith(command.getInput()));
- }
-
- @Test
- public void testGetHttpRequestUrl() throws Exception {
- final CommandRequest command = createCommandRequest("get resource --option=value");
-
- assertEquals(getExpectedHttpRequestUrl(command), toString(getOperationInvoker().getHttpRequestUrl(command)));
- }
-
- @Test
- public void testProcessCommand() {
- final String expectedResult = "<resource>test</resource>"; // XML
-
- final SimpleHttpOperationInvoker operationInvoker = new SimpleHttpOperationInvoker() {
- @Override
- public boolean isConnected() {
- return true;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- protected <T> ResponseEntity<T> send(final ClientHttpRequest request, final Class<T> responseType) {
- return new ResponseEntity(expectedResult, HttpStatus.OK);
- }
- };
-
- final String actualResult = operationInvoker.processCommand(createCommandRequest("get resource --id=1"));
-
- assertEquals(expectedResult, actualResult);
- }
-
- @Test
- public void testProcessCommandHandlesResourceAccessException() {
- final SimpleHttpOperationInvoker operationInvoker = new SimpleHttpOperationInvoker() {
- private boolean connected = true;
- @Override
- public boolean isConnected() {
- return connected;
- }
-
- @Override
- protected <T> ResponseEntity<T> send(final ClientHttpRequest request, final Class<T> responseType) {
- throw new ResourceAccessException("test");
- }
-
- @Override public void stop() {
- this.connected = false;
- }
- };
-
- assertTrue(operationInvoker.isConnected());
-
- final String expectedResult = String.format(
- "The connection to the GemFire Manager's HTTP service @ %1$s failed with: %2$s. "
- + "Please try reconnecting or see the GemFire Manager's log file for further details.",
- operationInvoker.getBaseUrl(), "test");
-
- final String actualResult = operationInvoker.processCommand(createCommandRequest("get resource --id=1"));
-
- assertFalse(operationInvoker.isConnected());
- assertEquals(expectedResult, actualResult);
- }
-
- @Test(expected = IllegalStateException.class)
- public void testProcessCommandWhenNotConnected() {
- try {
- getOperationInvoker().processCommand(createCommandRequest("get resource"));
- }
- catch (IllegalStateException e) {
- assertEquals("Gfsh must be connected to the GemFire Manager in order to process commands remotely!",
- e.getMessage());
- throw e;
- }
- }
-
- private static final class TestCommandRequest extends CommandRequest {
-
- private final String command;
-
- protected TestCommandRequest(final String command) {
- super(Collections.<String, String>emptyMap());
- assert command != null : "The command cannot be null!";
- this.command = command;
- }
-
- @Override
- public String getInput() {
- return command;
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java
deleted file mode 100644
index d9eb8e5..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.
- */
-package com.gemstone.gemfire.management.internal.web.util;
-
-import static org.junit.Assert.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gemstone.gemfire.internal.util.IOUtils;
-import com.gemstone.gemfire.management.internal.web.io.MultipartFileAdapter;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.springframework.core.io.ByteArrayResource;
-import org.springframework.core.io.Resource;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * The ConvertUtilsJUnitTest class is a test suite testing the contract and functionality of the ConvertUtilsJUnitTest class.
- * <p/>
- * @see com.gemstone.gemfire.management.internal.web.util.ConvertUtils
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since GemFire 8.0
- */
-@Category(UnitTest.class)
-public class ConvertUtilsJUnitTest {
-
- private MultipartFile createMultipartFile(final String filename, final byte[] content) {
- return new MultipartFileAdapter() {
- @Override public byte[] getBytes() throws IOException {
- return content;
- }
- @Override public InputStream getInputStream() throws IOException {
- return new ByteArrayInputStream(getBytes());
- }
- @Override public String getName() {
- return filename;
- }
- @Override public String getOriginalFilename() {
- return filename;
- }
- @Override public long getSize() {
- return content.length;
- }
- };
- }
-
- private Resource createResource(final String filename, final byte[] content) {
- return new ByteArrayResource(content, String.format("Content of file (%1$s).", filename)) {
- @Override public String getFilename() {
- return filename;
- }
- };
- }
-
- @Test
- public void testConvertFileData() throws IOException {
- final String[] filenames = { "/path/to/file1.ext", "/path/to/another/file2.ext" };
- final String[] fileContent = { "This is the contents of file 1.", "This is the contents of file 2." };
-
- final List<byte[]> fileData = new ArrayList<byte[]>(2);
-
- for (int index = 0; index < filenames.length; index++) {
- fileData.add(filenames[index].getBytes());
- fileData.add(fileContent[index].getBytes());
- }
-
- final Resource[] resources = ConvertUtils.convert(fileData.toArray(new byte[fileData.size()][]));
-
- assertNotNull(resources);
- assertEquals(filenames.length, resources.length);
-
- for (int index = 0; index < resources.length; index++) {
- assertEquals(filenames[index], resources[index].getFilename());
- assertEquals(fileContent[index], new String(IOUtils.toByteArray(resources[index].getInputStream())));
- }
- }
-
- @Test
- public void testConvertFileDataWithNull() {
- final Resource[] resources = ConvertUtils.convert((byte[][]) null);
-
- assertNotNull(resources);
- assertEquals(0, resources.length);
- }
-
- @Test
- public void testConvertMultipartFile() throws IOException {
- final MultipartFile[] files = {
- createMultipartFile("/path/to/multi-part/file1.txt", "The contents of multi-part file1.".getBytes()),
- createMultipartFile("/path/to/multi-part/file2.txt", "The contents of multi-part file2.".getBytes())
- };
-
- final byte[][] fileData = ConvertUtils.convert(files);
-
- assertNotNull(fileData);
- assertEquals(files.length * 2, fileData.length);
-
- for (int index = 0; index < fileData.length; index += 2) {
- assertEquals(files[index / 2].getOriginalFilename(), new String(fileData[index]));
- assertEquals(new String(files[index / 2].getBytes()), new String(fileData[index + 1]));
- }
- }
-
- @Test
- public void testConvertResource() throws IOException {
- final Resource[] resources = {
- createResource("/path/to/file1.txt", "Contents of file1.".getBytes()),
- createResource("/path/to/file2.txt", "Contents of file2.".getBytes())
- };
-
- final byte[][] fileData = ConvertUtils.convert(resources);
-
- assertNotNull(fileData);
- assertEquals(resources.length * 2, fileData.length);
-
- for (int index = 0; index < fileData.length; index += 2) {
- assertEquals(resources[index / 2].getFilename(), new String(fileData[index]));
- assertEquals(new String(IOUtils.toByteArray(resources[index / 2].getInputStream())), new String(fileData[index + 1]));
- }
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testConvertResourceWithResourceHavingNoFilename() throws IOException {
- try {
- ConvertUtils.convert(createResource(null, "test".getBytes()));
- }
- catch (IllegalArgumentException expected) {
- assertEquals("The filename of Resource (Byte array resource [Content of file (null).]) must be specified!", expected.getMessage());
- throw expected;
- }
- }
-
- @Test
- public void testConvertResourceWithEmpty() throws IOException {
- final byte[][] fileData = ConvertUtils.convert(new Resource[0]);
-
- assertNotNull(fileData);
- assertEquals(0, fileData.length);
- }
-
- @Test
- public void testConvertResourceWithNull() throws IOException {
- final byte[][] fileData = ConvertUtils.convert((Resource[]) null);
-
- assertNotNull(fileData);
- assertEquals(0, fileData.length);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java
deleted file mode 100644
index 645133a..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.
- */
-package com.gemstone.gemfire.management.internal.web.util;
-
-import static org.junit.Assert.*;
-
-import java.util.Map;
-
-import com.gemstone.gemfire.management.internal.web.AbstractWebTestCase;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-/**
- * The UriUtilsJUnitTest class is a test suite of test cases testing the contract and functionality of the UriUtils class.
- * <p/>
- * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase
- * @see com.gemstone.gemfire.management.internal.web.util.UriUtils
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since GemFire 8.0
- */
-@Category(UnitTest.class)
-public class UriUtilsJUnitTest extends AbstractWebTestCase {
-
- @Test
- public void testDecodeNull() {
- assertNull(UriUtils.decode((String) null));
- }
-
- @Test
- public void testDecodeStringArray() throws Exception {
- final String[] encodedValues = {
- null,
- "123",
- "test",
- encode("Path/Subpath"),
- encode(encode(encode("/Customers/Accounts/Orders/Items")))
- };
-
- final String[] decodedValues = UriUtils.decode(encodedValues);
-
- assertSame(encodedValues, decodedValues);
- assertEquals(5, decodedValues.length);
- assertNull(decodedValues[0]);
- assertEquals("123", decodedValues[1]);
- assertEquals("test", decodedValues[2]);
- assertEquals("Path/Subpath", decodedValues[3]);
- assertEquals("/Customers/Accounts/Orders/Items", decodedValues[4]);
- }
-
- @Test
- public void testDecodeMap() throws Exception {
- final Map<String, Object> encodedForm = createMap(createArray("0", "1", "2", "3", "4"),
- (Object[]) createArray(null, "123", "test", encode("Path/Subpath"), encode(encode(encode("/Customers/Accounts/Orders/Items")))));
-
- final Map<String, Object> decodedForm = UriUtils.decode(encodedForm);
-
- assertSame(encodedForm, decodedForm);
- assertEquals(5, decodedForm.size());
- assertNull(decodedForm.get("0"));
- assertEquals("123", decodedForm.get("1"));
- assertEquals("test", decodedForm.get("2"));
- assertEquals("Path/Subpath", decodedForm.get("3"));
- assertEquals("/Customers/Accounts/Orders/Items", decodedForm.get("4"));
- }
-
- @Test
- public void testEncodeNull() {
- assertNull(UriUtils.encode((String) null));
- }
-
- @Test
- public void testEncodeStringArray() throws Exception {
- final String[] values = { null, "123", "test", "Path/Subpath", "/Customers/Accounts/Orders/Items" };
- final String[] encodedValues = UriUtils.encode(values);
-
- assertSame(values, encodedValues);
- assertEquals(5, encodedValues.length);
- assertNull(encodedValues[0]);
- assertEquals("123", encodedValues[1]);
- assertEquals("test", encodedValues[2]);
- assertEquals(encode("Path/Subpath"), encodedValues[3]);
- assertEquals(encode("/Customers/Accounts/Orders/Items"), encodedValues[4]);
- }
-
- @Test
- public void testEncodeMap() throws Exception {
- final Map<String, Object> form = createMap(createArray("0", "1", "2", "3", "4"),
- (Object[]) createArray(null, "123", "test", "Path/Subpath", "/Customers/Accounts/Orders/Items"));
-
- final Map<String, Object> encodedForm = UriUtils.encode(form);
-
- assertSame(form, encodedForm);
- assertEquals(5, encodedForm.size());
- assertNull(encodedForm.get("0"));
- assertEquals("123", encodedForm.get("1"));
- assertEquals("test", encodedForm.get("2"));
- assertEquals(encode("Path/Subpath"), encodedForm.get("3"));
- assertEquals(encode("/Customers/Accounts/Orders/Items"), encodedForm.get("4"));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/CommandOverHttpDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/CommandOverHttpDUnitTest.java b/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/CommandOverHttpDUnitTest.java
new file mode 100644
index 0000000..2f5348f
--- /dev/null
+++ b/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/CommandOverHttpDUnitTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+package com.gemstone.gemfire.management.internal.cli.commands;
+
+import org.junit.ClassRule;
+import org.junit.contrib.java.lang.system.ProvideSystemProperty;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+import com.gemstone.gemfire.test.junit.categories.SecurityTest;
+import com.gemstone.gemfire.test.junit.runner.SuiteRunner;
+
+@Category({ DistributedTest.class, SecurityTest.class })
+@RunWith(SuiteRunner.class)
+@Suite.SuiteClasses({
+ ConfigCommandsDUnitTest.class,
+ DeployCommandsDUnitTest.class,
+ DiskStoreCommandsDUnitTest.class,
+ FunctionCommandsDUnitTest.class,
+ GemfireDataCommandsDUnitTest.class,
+ GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.class,
+ IndexCommandsDUnitTest.class,
+ ListAndDescribeDiskStoreCommandsDUnitTest.class,
+ ListIndexCommandDUnitTest.class,
+ MemberCommandsDUnitTest.class,
+ MiscellaneousCommandsDUnitTest.class,
+ MiscellaneousCommandsExportLogsPart1DUnitTest.class,
+ MiscellaneousCommandsExportLogsPart2DUnitTest.class,
+ MiscellaneousCommandsExportLogsPart3DUnitTest.class,
+ MiscellaneousCommandsExportLogsPart4DUnitTest.class,
+ QueueCommandsDUnitTest.class,
+ SharedConfigurationCommandsDUnitTest.class,
+ ShellCommandsDUnitTest.class,
+ ShowDeadlockDUnitTest.class,
+ ShowMetricsDUnitTest.class,
+ ShowStackTraceDUnitTest.class,
+ UserCommandsDUnitTest.class
+})
+public class CommandOverHttpDUnitTest {
+ @ClassRule
+ public static ProvideSystemProperty provideSystemProperty = new ProvideSystemProperty(CliCommandTestBase.USE_HTTP_SYSTEM_PROPERTY, "true");
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c20e693/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ConnectCommandWithHttpAndSSLDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ConnectCommandWithHttpAndSSLDUnitTest.java b/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ConnectCommandWithHttpAndSSLDUnitTest.java
new file mode 100644
index 0000000..dab762b
--- /dev/null
+++ b/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ConnectCommandWithHttpAndSSLDUnitTest.java
@@ -0,0 +1,319 @@
+/*
+ * 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.
+ */
+package com.gemstone.gemfire.management.internal.cli.commands;
+
+import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
+import static com.gemstone.gemfire.management.internal.cli.i18n.CliStrings.*;
+import static com.gemstone.gemfire.util.test.TestUtil.*;
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Properties;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import com.gemstone.gemfire.management.internal.cli.HeadlessGfsh;
+import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
+import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+import com.gemstone.gemfire.test.junit.categories.SecurityTest;
+import com.gemstone.gemfire.test.junit.runners.CategoryWithParameterizedRunnerFactory;
+
+/**
+ * @since GemFire 8.1
+ */
+@Category({ DistributedTest.class, SecurityTest.class })
+@RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(CategoryWithParameterizedRunnerFactory.class)
+public class ConnectCommandWithHttpAndSSLDUnitTest extends CliCommandTestBase {
+
+ private static final ThreadLocal<Properties> sslInfoHolder = new ThreadLocal<>();
+
+ private File jks;
+
+ @Parameterized.Parameter
+ public String urlContext;
+
+ @Parameterized.Parameters
+ public static Collection<String> data() {
+ return Arrays.asList("/geode-mgmt", "/gemfire");
+ }
+
+ @Override
+ public final void postSetUpCliCommandTestBase() throws Exception {
+ this.jks = new File(getResourcePath(getClass(), "/ssl/trusted.keystore"));
+ }
+
+ @Override
+ protected final void preTearDownCliCommandTestBase() throws Exception {
+ destroyDefaultSetup();
+ }
+
+ @Override
+ public final void postTearDownCacheTestCase() throws Exception {
+ sslInfoHolder.set(null);
+ }
+
+ @Test
+ public void testMutualAuthentication() throws Exception {
+ Properties serverProps = new Properties();
+ serverProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ serverProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ serverProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ serverProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_TYPE, "JKS");
+ serverProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "SSL");
+ serverProps.setProperty(HTTP_SERVICE_SSL_REQUIRE_AUTHENTICATION, "true");
+ serverProps.setProperty(HTTP_SERVICE_SSL_TRUSTSTORE, jks.getCanonicalPath());
+ serverProps.setProperty(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD, "password");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__KEY_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__KEY_STORE_PASSWORD, "password");
+ clientProps.setProperty(CONNECT__SSL_PROTOCOLS, "SSL");
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(serverProps);
+ }
+
+ @Test
+ public void testSimpleSSL() throws Exception {
+ Properties serverProps = new Properties();
+ serverProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ serverProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ serverProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ serverProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_TYPE, "JKS");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(serverProps);
+ }
+
+ @Test
+ public void testSSLWithoutKeyStoreType() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Test
+ public void testSSLWithSSLProtocol() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "SSL");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Test
+ public void testSSLWithTLSProtocol() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "TLS");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Test
+ public void testSSLWithTLSv11Protocol() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "TLSv1.1");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Test
+ public void testSSLWithTLSv12Protocol() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "TLSv1.2");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Test
+ public void testWithMultipleProtocol() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "SSL,TLSv1.2");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Ignore("TODO: disabled for unknown reason")
+ @Test
+ public void testSSLWithCipherSuite() throws Exception {
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "TLSv1.2");
+
+ //Its bad to hard code here. But using SocketFactory.getDefaultCiphers() somehow is not working with the option
+ //"https.cipherSuites" which is required to restrict cipher suite with HttpsURLConnection
+ //Keeping the below code for further investigation on different Java versions ( 7 & 8) @TODO
+
+ /*SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
+
+ sslContext.init(null, null, new java.security.SecureRandom());
+ String[] cipherSuites = sslContext.getSocketFactory().getSupportedCipherSuites();*/
+
+ localProps.setProperty(HTTP_SERVICE_SSL_CIPHERS, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+ clientProps.setProperty(CONNECT__SSL_CIPHERS, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256");
+ clientProps.setProperty(CONNECT__SSL_PROTOCOLS, "TLSv1.2");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Ignore("TODO: disabled for unknown reason")
+ @Test
+ public void testSSLWithMultipleCipherSuite() throws Exception {
+ System.setProperty("javax.net.debug", "ssl,handshake,failure");
+
+ Properties localProps = new Properties();
+ localProps.setProperty(HTTP_SERVICE_SSL_ENABLED, "true");
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE, jks.getCanonicalPath());
+ localProps.setProperty(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD, "password");
+ localProps.setProperty(HTTP_SERVICE_SSL_PROTOCOLS, "TLSv1.2");
+ localProps.setProperty(HTTP_SERVICE_SSL_CIPHERS, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_EMPTY_RENEGOTIATION_INFO_SCSV");
+
+ Properties clientProps = new Properties();
+ clientProps.setProperty(CONNECT__TRUST_STORE, jks.getCanonicalPath());
+ clientProps.setProperty(CONNECT__TRUST_STORE_PASSWORD, "password");
+ clientProps.setProperty(CONNECT__SSL_PROTOCOLS, "TLSv1.2");
+
+ sslInfoHolder.set(clientProps);
+ setUpJmxManagerOnVm0ThenConnect(localProps);
+ }
+
+ @Override
+ protected void connect(final String host, final int jmxPort, final int httpPort, final HeadlessGfsh shell) {
+ assertNotNull(host);
+ assertNotNull(shell);
+
+ final CommandStringBuilder command = new CommandStringBuilder(CONNECT);
+ String endpoint;
+
+ // This is for testing purpose only. If we remove this piece of code we will
+ // get a java.security.cert.CertificateException
+ // as matching hostname can not be obtained in all test environment.
+ HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String string, SSLSession ssls) {
+ return true;
+ }
+ });
+
+ endpoint = "https://" + host + ":" + httpPort + urlContext + "/v1";
+
+ command.addOption(CONNECT__USE_HTTP, Boolean.TRUE.toString());
+ command.addOption(CONNECT__URL, endpoint);
+ command.addOption(CONNECT__USE_SSL,Boolean.TRUE.toString());
+
+ if(sslInfoHolder.get().getProperty(CONNECT__KEY_STORE) != null){
+ command.addOption(CONNECT__KEY_STORE, sslInfoHolder.get().getProperty(CONNECT__KEY_STORE));
+ }
+ if(sslInfoHolder.get().getProperty(CONNECT__KEY_STORE_PASSWORD) != null){
+ command.addOption(CONNECT__KEY_STORE_PASSWORD, sslInfoHolder.get().getProperty(CONNECT__KEY_STORE_PASSWORD));
+ }
+ if(sslInfoHolder.get().getProperty(CONNECT__TRUST_STORE) != null){
+ command.addOption(CONNECT__TRUST_STORE, sslInfoHolder.get().getProperty(CONNECT__TRUST_STORE));
+ }
+ if(sslInfoHolder.get().getProperty(CONNECT__TRUST_STORE_PASSWORD) != null){
+ command.addOption(CONNECT__TRUST_STORE_PASSWORD, sslInfoHolder.get().getProperty(CONNECT__TRUST_STORE_PASSWORD));
+ }
+ if(sslInfoHolder.get().getProperty(CONNECT__SSL_PROTOCOLS) != null){
+ command.addOption(CONNECT__SSL_PROTOCOLS, sslInfoHolder.get().getProperty(CONNECT__SSL_PROTOCOLS));
+ }
+ if(sslInfoHolder.get().getProperty(CONNECT__SSL_CIPHERS) != null){
+ command.addOption(CONNECT__SSL_CIPHERS, sslInfoHolder.get().getProperty(CONNECT__SSL_CIPHERS));
+ }
+
+ CommandResult result = executeCommand(shell, command.toString());
+
+ if (!shell.isConnectedAndReady()) {
+ fail("Connect command failed to connect to manager " + endpoint + " result=" + commandResultToString(result));
+ }
+
+ info("Successfully connected to managing node using HTTPS");
+ assertEquals(true, shell.isConnectedAndReady());
+ }
+
+}