summaryrefslogtreecommitdiffstats
path: root/sidecar/fproxy/src/test
diff options
context:
space:
mode:
authorRavi Geda <gravik@amdocs.com>2018-09-17 12:57:44 +0100
committerRavi Geda <gravik@amdocs.com>2018-09-20 12:44:40 +0100
commit6c3031ea90d5b51ae44a599c0cd0d95c057cf633 (patch)
tree430df4d43b04db902d21a80e19e465fa3312951b /sidecar/fproxy/src/test
parent85f33095c117ba5b361749746d564e6308a33f14 (diff)
Add forward proxy code
Add a maven module called sidecar to cadi. Add forward proxy as a maven module to sidecar. Note that though sidecar is a module of cadi it does not inherit from cadi's pom. Change-Id: I617ecb1a66a3cbdd3f03287f28c6527693c6dfc6 Issue-ID: AAI-1603 Signed-off-by: Ravi Geda <gravik@amdocs.com>
Diffstat (limited to 'sidecar/fproxy/src/test')
-rw-r--r--sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyIT.java49
-rw-r--r--sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyServiceTest.java208
2 files changed, 257 insertions, 0 deletions
diff --git a/sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyIT.java b/sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyIT.java
new file mode 100644
index 0000000..ba876e0
--- /dev/null
+++ b/sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyIT.java
@@ -0,0 +1,49 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aaf
+ * ================================================================================
+ * Copyright © 2018 European Software Marketing Ltd.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.aaf.fproxy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.eclipse.jetty.util.security.Password;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.aaf.fproxy.service.ForwardingProxyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+public class FProxyIT {
+
+ static {
+ System.setProperty("server.ssl.key-store-password",
+ Password.deobfuscate("OBF:1y0q1uvc1uum1uvg1pil1pjl1uuq1uvk1uuu1y10"));
+ }
+
+ @Autowired
+ private ForwardingProxyService fProxyService;
+
+ @Test
+ public void contexLoads() throws Exception {
+ assertThat(fProxyService).isNotNull();
+ }
+}
diff --git a/sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyServiceTest.java b/sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyServiceTest.java
new file mode 100644
index 0000000..ccf13e9
--- /dev/null
+++ b/sidecar/fproxy/src/test/java/org/onap/aaf/fproxy/FProxyServiceTest.java
@@ -0,0 +1,208 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aaf
+ * ================================================================================
+ * Copyright © 2018 European Software Marketing Ltd.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.aaf.fproxy;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.springframework.test.web.client.match.MockRestRequestMatchers.header;
+import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
+import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
+import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import javax.servlet.http.Cookie;
+import org.eclipse.jetty.util.security.Password;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.aaf.fproxy.data.CredentialCacheData.CredentialType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.client.MockRestServiceServer;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.web.client.RestTemplate;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@AutoConfigureMockMvc
+public class FProxyServiceTest {
+
+ static {
+ System.setProperty("server.ssl.key-store-password",
+ Password.deobfuscate("OBF:1y0q1uvc1uum1uvg1pil1pjl1uuq1uvk1uuu1y10"));
+ }
+
+ @Value("${transactionid.header.name}")
+ private String transactionIdHeaderName;
+
+ @Autowired
+ private MockMvc mvc;
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ private MockRestServiceServer mockServer;
+
+ @Before
+ public void setUp() {
+ mockServer = MockRestServiceServer.createServer(restTemplate);
+ }
+
+ @Test
+ public void testRequestFrowarding() throws Exception {
+ String testUrl = "https://localhost:80/testurl";
+ String testResponse = "Response from MockRestService";
+
+ mockServer.expect(requestTo(testUrl)).andExpect(method(HttpMethod.GET))
+ .andRespond(withSuccess(testResponse, MediaType.APPLICATION_JSON));
+
+ mvc.perform(MockMvcRequestBuilders.get(testUrl).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
+ .andExpect(content().string(equalTo(testResponse)));
+
+ mockServer.verify();
+ }
+
+ @Test
+ public void testCredentialCacheEndpoint() throws Exception {
+ populateCredentialCache("tx1", "headername", "headervalue", CredentialType.HEADER.toString());
+ }
+
+ @Test
+ public void testPopulateHeaderFromCache() throws Exception {
+ String testTransactionId = "tx1";
+ String testUrl = "https://localhost:80/testurl";
+ String headerName = "headername";
+ String headerValue = "headervalue";
+
+ String testResponse = "Response from MockRestService";
+
+ // Populate the cache with header credentials
+ populateCredentialCache(testTransactionId, headerName, headerValue, CredentialType.HEADER.toString());
+
+ // Expect mock server to be called with request containing cached header
+ mockServer.expect(requestTo(testUrl)).andExpect(method(HttpMethod.GET))
+ .andExpect(header(headerName, headerValue))
+ .andRespond(withSuccess(testResponse, MediaType.APPLICATION_JSON));
+
+ // Send request to mock server with transaction Id
+ mvc.perform(MockMvcRequestBuilders.get(testUrl).accept(MediaType.APPLICATION_JSON)
+ .header(transactionIdHeaderName, testTransactionId)).andExpect(status().isOk())
+ .andExpect(content().string(equalTo(testResponse)));
+
+ mockServer.verify();
+ }
+
+ @Test
+ public void testHeaderAlreadyExists() throws Exception {
+ String testTransactionId = "tx1";
+ String testUrl = "https://localhost:80/testurl";
+ String headerName = "headername";
+ String headerValue = "headervalue";
+ String newHeaderValue = "newheadervalue";
+
+ String testResponse = "Response from MockRestService";
+
+ // Populate the cache with header credentials using a new value
+ populateCredentialCache(testTransactionId, headerName, newHeaderValue, CredentialType.HEADER.toString());
+
+ // Expect mock server to be called with request containing the original header credential value, not the cached
+ // new header value
+ mockServer.expect(requestTo(testUrl)).andExpect(method(HttpMethod.GET))
+ .andExpect(header(headerName, headerValue))
+ .andRespond(withSuccess(testResponse, MediaType.APPLICATION_JSON));
+
+ // Send request to mock server that already contains a header with same name as the one that has been cached
+ mvc.perform(MockMvcRequestBuilders.get(testUrl).accept(MediaType.APPLICATION_JSON)
+ .header(transactionIdHeaderName, testTransactionId).header(headerName, headerValue))
+ .andExpect(status().isOk()).andExpect(content().string(equalTo(testResponse)));
+
+ mockServer.verify();
+ }
+
+ @Test
+ public void testPopulateCookieFromCache() throws Exception {
+ String testTransactionId = "tx1";
+ String testUrl = "https://localhost:80/testurl";
+ String cookieName = "testcookie";
+ String cookieValue = "testcookie=testvalue";
+ String testResponse = "Response from MockRestService";
+
+ // Populate the cache with cookie credentials
+ populateCredentialCache(testTransactionId, cookieName, cookieValue, CredentialType.COOKIE.toString());
+
+ // Expect mock server to be called with request containing cached header
+ mockServer.expect(requestTo(testUrl)).andExpect(method(HttpMethod.GET))
+ .andExpect(header(HttpHeaders.COOKIE, cookieValue))
+ .andRespond(withSuccess(testResponse, MediaType.APPLICATION_JSON));
+
+ // Send request to mock server with transaction Id
+ mvc.perform(MockMvcRequestBuilders.get(testUrl).accept(MediaType.APPLICATION_JSON)
+ .header(transactionIdHeaderName, testTransactionId)).andExpect(status().isOk())
+ .andExpect(content().string(equalTo(testResponse)));
+
+ mockServer.verify();
+ }
+
+ @Test
+ public void testCookieAlreadyExists() throws Exception {
+ String testTransactionId = "tx1";
+ String testUrl = "https://localhost:80/testurl";
+ String cookieName = "testcookie";
+ String cookieValue = "testvalue";
+ String newCookieValue = "newtestvalue";
+
+ String testResponse = "Response from MockRestService";
+
+ // Populate the cache with cookie credentials using a new value
+ populateCredentialCache(testTransactionId, cookieName, newCookieValue, CredentialType.COOKIE.toString());
+
+ // Expect mock server to be called with request containing the original cookie credential value, not the cached
+ // new cookie value
+ mockServer.expect(requestTo(testUrl)).andExpect(method(HttpMethod.GET))
+ .andExpect(header(HttpHeaders.COOKIE, cookieName + "=" + cookieValue))
+ .andRespond(withSuccess(testResponse, MediaType.APPLICATION_JSON));
+
+ // Send request to mock server that already contains a cookie with same name as the one that has been cached
+ mvc.perform(MockMvcRequestBuilders.get(testUrl).accept(MediaType.APPLICATION_JSON)
+ .header(transactionIdHeaderName, testTransactionId).cookie(new Cookie(cookieName, cookieValue)))
+ .andExpect(status().isOk()).andExpect(content().string(equalTo(testResponse)));
+
+ mockServer.verify();
+ }
+
+ private void populateCredentialCache(String transactionId, String credentialName, String credentialValue,
+ String credentialType) throws Exception {
+ String cacheUrl = "https://localhost:80/credential-cache/" + transactionId;
+ String requestBody = "{ \"credentialName\":\"" + credentialName + "\", \"credentialValue\":\"" + credentialValue
+ + "\", \"credentialType\":\"" + credentialType + "\" }";
+
+ // Populate the cache with credentials
+ mvc.perform(MockMvcRequestBuilders.post(cacheUrl).content(requestBody).contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
+ .andExpect(content().string(equalTo(transactionId)));
+ }
+}