FINAL unit test covergae commit
[dmaap/datarouter.git] / datarouter-prov / src / test / java / org / onap / dmaap / datarouter / provisioning / ProxyServletTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.dmaap.datarouter.provisioning;
22
23 import static org.mockito.Matchers.any;
24 import static org.mockito.Mockito.mock;
25 import static org.powermock.api.mockito.PowerMockito.when;
26
27 import java.io.ByteArrayInputStream;
28 import java.io.IOException;
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.Enumeration;
32 import java.util.List;
33 import javax.persistence.EntityManager;
34 import javax.persistence.EntityManagerFactory;
35 import javax.persistence.Persistence;
36 import javax.servlet.ServletConfig;
37 import javax.servlet.http.HttpServletRequest;
38 import javax.servlet.http.HttpServletResponse;
39 import org.apache.commons.lang3.reflect.FieldUtils;
40 import org.apache.http.Header;
41 import org.apache.http.HttpEntity;
42 import org.apache.http.HttpResponse;
43 import org.apache.http.StatusLine;
44 import org.apache.http.client.methods.CloseableHttpResponse;
45 import org.apache.http.client.methods.HttpUriRequest;
46 import org.apache.http.conn.scheme.Scheme;
47 import org.apache.http.impl.client.DefaultHttpClient;
48 import org.apache.http.message.BasicHeader;
49 import org.junit.AfterClass;
50 import org.junit.Before;
51 import org.junit.BeforeClass;
52 import org.junit.Test;
53 import org.junit.runner.RunWith;
54 import org.mockito.Mock;
55 import org.mockito.Mockito;
56 import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities;
57 import org.powermock.api.mockito.PowerMockito;
58 import org.powermock.core.classloader.annotations.PowerMockIgnore;
59 import org.powermock.core.classloader.annotations.PrepareForTest;
60 import org.powermock.modules.junit4.PowerMockRunner;
61
62 @RunWith(PowerMockRunner.class)
63 @PowerMockIgnore("javax.net.ssl.*")
64 @PrepareForTest({URLUtilities.class, BaseServlet.class, Scheme.class})
65 public class ProxyServletTest {
66     private static ProxyServlet proxyServlet;
67     private static EntityManagerFactory emf;
68     private static EntityManager em;
69
70     @Mock
71     private DefaultHttpClient httpClient;
72     @Mock
73     private HttpServletRequest request;
74     @Mock
75     private HttpServletResponse servletResponse;
76     @Mock
77     private CloseableHttpResponse response;
78     @Mock
79     private StatusLine statusLine;
80
81     @BeforeClass
82     public static void init() {
83         emf = Persistence.createEntityManagerFactory("dr-unit-tests");
84         em = emf.createEntityManager();
85         System.setProperty(
86                 "org.onap.dmaap.datarouter.provserver.properties",
87                 "src/test/resources/h2Database.properties");
88     }
89
90     @AfterClass
91     public static void tearDownClass() {
92         em.clear();
93         em.close();
94         emf.close();
95     }
96
97     @Before
98     public void setUp() throws Exception {
99         proxyServlet = new ProxyServlet();
100         FieldUtils.writeDeclaredField(proxyServlet, "inited", true, true);
101
102         org.apache.http.conn.ssl.SSLSocketFactory sslSocketFactory = PowerMockito.mock(org.apache.http.conn.ssl.SSLSocketFactory.class);
103         Mockito.doNothing().when(sslSocketFactory).setHostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
104         Scheme scheme = new Scheme("http", 80, sslSocketFactory);
105         FieldUtils.writeDeclaredField(proxyServlet, "sch", scheme, true);
106
107         PowerMockito.mockStatic(BaseServlet.class);
108         PowerMockito.mockStatic(URLUtilities.class);
109         when(URLUtilities.getPeerPodName()).thenReturn("localhost");
110
111         SynchronizerTask synchronizerTask = SynchronizerTask.getSynchronizer();
112         FieldUtils.writeDeclaredField(synchronizerTask, "podState", 2, true);
113         FieldUtils.writeDeclaredStaticField(BaseServlet.class, "synctask", synchronizerTask, true);
114
115         proxyServlet.init(mock(ServletConfig.class));
116         setHeadersForValidRequest();
117         mockHttpClientForGetRequest();
118     }
119
120     @Test
121     public void Given_Request_Is_HTTP_POST_Exception_Is_Thrown() {
122         proxyServlet.doPost(request, servletResponse);
123     }
124
125     @Test
126     public void Given_Request_Is_HTTP_DELETE_Exception_Is_Thrown() {
127         proxyServlet.doDelete(request, servletResponse);
128     }
129
130     @Test
131     public void Given_Request_Is_HTTP_GET_Exception_Is_Thrown() {
132         proxyServlet.doGet(request, servletResponse);
133     }
134
135     @Test
136     public void Given_Request_Is_HTTP_PUT_Exception_Is_Thrown() {
137         proxyServlet.doPut(request, servletResponse);
138     }
139
140     @Test
141     public void Given_Request_Is_HTTP_GetWithFallBack_Exception_Is_Thrown() {
142         proxyServlet.doGetWithFallback(request, servletResponse);
143     }
144
145     @Test
146     public void Veirfy_Headers_Are_Copied() {
147         HttpResponse proxyResponse = PowerMockito.mock(HttpResponse.class);
148         Header[] headersArray = new Header[2];
149         headersArray[0] = new BasicHeader("cache-control", "public, max-age=86400");
150         headersArray[1] = new BasicHeader("content-type", "text/plain");
151         PowerMockito.when(proxyResponse.getAllHeaders()).thenReturn(headersArray);
152         proxyServlet.copyResponseHeaders(proxyResponse, servletResponse);
153     }
154
155     @Test
156     public void Veirfy_EntitiyContent_Copied() throws IOException {
157         HttpResponse proxyResponse = PowerMockito.mock(HttpResponse.class);
158         HttpEntity entity = PowerMockito.mock(HttpEntity.class);
159         PowerMockito.when(proxyResponse.getEntity()).thenReturn(entity);
160         PowerMockito.when(entity.getContent()).thenReturn(new ByteArrayInputStream("blah".getBytes()));
161         proxyServlet.copyEntityContent(proxyResponse, servletResponse);
162     }
163
164     private void setHeadersForValidRequest() {
165         List<String> headers = new ArrayList<>();
166         headers.add("Content-Type");
167         headers.add("X-DMAAP-DR-ON-BEHALF-OF");
168         headers.add("X-DMAAP-DR-META");
169         Enumeration<String> headerNames = Collections.enumeration(headers);
170         Mockito.when(request.getHeaderNames()).thenReturn(headerNames);
171         Enumeration<String> contentTypeHeader = Collections.enumeration(Collections.singletonList("text/plain"));
172         Enumeration<String> behalfHeader = Collections.enumeration(Collections.singletonList("User1"));
173         Enumeration<String> metaDataHeader = Collections.enumeration(Collections.singletonList("?#@><"));
174         Mockito.when(request.getHeaders("Content-Type")).thenReturn(contentTypeHeader);
175         Mockito.when(request.getHeaders("X-DMAAP-DR-ON-BEHALF-OF")).thenReturn(behalfHeader);
176         Mockito.when(request.getHeaders("X-DMAAP-DR-META")).thenReturn(metaDataHeader);
177     }
178
179     private void mockHttpClientForGetRequest() throws Exception {
180         PowerMockito.when(httpClient.execute(any(HttpUriRequest.class))).thenReturn(response);
181         Mockito.when(request.getRequestURI()).thenReturn("/api");
182         Mockito.when(response.getStatusLine()).thenReturn(statusLine);
183     }
184 }