f89ca4dcf8de6cd7beea1e8efeae9df68f2e4395
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : CCSDK.apps.sdnr.wt.apigateway
4  * ================================================================================
5  * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25 import static org.junit.Assert.fail;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29
30 import java.io.ByteArrayInputStream;
31 import java.io.IOException;
32 import java.io.OutputStream;
33 import java.io.StringWriter;
34 import java.net.InetSocketAddress;
35 import java.util.Enumeration;
36 import java.util.Map;
37 import java.util.Vector;
38 import java.util.concurrent.ExecutorService;
39 import java.util.concurrent.Executors;
40
41 import javax.servlet.ServletInputStream;
42 import javax.servlet.ServletOutputStream;
43 import javax.servlet.http.HttpServletRequest;
44 import javax.servlet.http.HttpServletResponse;
45
46 import org.junit.After;
47 import org.junit.Before;
48 import com.sun.net.httpserver.HttpExchange;
49 import com.sun.net.httpserver.HttpHandler;
50 import com.sun.net.httpserver.HttpServer;
51
52 public class HelpServletBase {
53
54         public static final String HTTPMETHOD_GET = "GET";
55         public static final String HTTPMETHOD_POST = "POST";
56         public static final String HTTPMETHOD_PUT = "PUT";
57         public static final String HTTPMETHOD_DELETE = "DELETE";
58         public static final String HTTPMETHOD_OPTIONS = "OPTIONS";
59         private IPublicServlet servlet;
60         private static HttpServer server;
61         private static ExecutorService httpThreadPool;
62         
63         public final String HOST = "localhost";
64         protected static int testPort;
65         private final String baseUri;
66         protected static final String LR = "\n";
67
68         public HelpServletBase(String baseuri, int port) {
69                 this.baseUri=baseuri;
70                 testPort = port;
71         }
72         
73         public void setServlet(IPublicServlet s)
74         {
75                 this.servlet=s;
76         }
77         
78         protected void testrequest(String method, String data, String expectedResponse, boolean exact) {
79                 this.testrequest("/mwtn/test",method, data, expectedResponse, exact, null);
80         }
81         protected void testrequest(String uri,String method, String data, String expectedResponse, boolean exact) {
82                 this.testrequest(uri,method, data, expectedResponse, exact, null);
83         }
84
85         protected void testrequest(String uri,String method, String data, String expectedResponse, boolean exact,
86                         Map<String, String> headersToCheck) {
87                         
88                 HttpServletRequest mockRequest = mock(HttpServletRequest.class);
89                 HttpServletResponse mockResponse = mock(HttpServletResponse.class);
90
91                 StringWriter out = new StringWriter();
92                 ServletOutputStream printOut = new ServletOutputStream() {
93
94                         @Override
95                         public void write(int arg0) throws IOException {
96                                 out.write(arg0);
97                         }
98                 };
99                 ByteArrayInputStream bis = new ByteArrayInputStream(data.getBytes());
100                 ServletInputStream inputStream= new ServletInputStream() {              
101                         @Override
102                         public int read() throws IOException {
103                                 return bis.read();
104                         }
105                 };
106                 Vector<String> headers=new Vector<String>();
107                 headers.addElement("Accept");
108                 headers.add("User-Agent");
109                 Enumeration<String> headerNames = headers.elements();
110                 try {
111                         when(mockRequest.getRequestURI()).thenReturn(this.baseUri+uri);
112                         when(mockRequest.getHeaderNames()).thenReturn(headerNames);
113                         when(mockRequest.getHeader("Accept")).thenReturn("application/json");
114                         when(mockRequest.getHeader("User-Agent")).thenReturn("Gecko abc");
115                         when(mockRequest.getInputStream()).thenReturn(inputStream);
116                         when(mockResponse.getOutputStream()).thenReturn(printOut);
117                         System.out.println("do a " + method + " request");
118                         if (method == HTTPMETHOD_GET)
119                                 this.servlet.doGet(mockRequest, mockResponse);
120                         else if (method == HTTPMETHOD_POST)
121                                 this.servlet.doPost(mockRequest, mockResponse);
122                         else if (method == HTTPMETHOD_PUT)
123                                 this.servlet.doPut(mockRequest, mockResponse);
124                         else if (method == HTTPMETHOD_DELETE)
125                                 this.servlet.doDelete(mockRequest, mockResponse);
126                         else if (method == HTTPMETHOD_OPTIONS)
127                                 this.servlet.doOptions(mockRequest, mockResponse);
128                         else
129                                 fail("http request method " + method + " test not implemented");
130                 } catch (Exception e) {
131                         System.err.println(e.getMessage());
132                 }
133
134                 verify(mockResponse).setStatus(200);
135                 if (exact)
136                         assertEquals(expectedResponse, out.toString());
137                 else
138                         assertTrue("response not for method " + method + "correct", out.toString().contains(expectedResponse));
139                 // currently unable to check extra headers
140                 if (headersToCheck != null) {
141
142                 }
143         }
144         @Before
145         private void init() throws IOException{
146         
147                 
148                 initEsTestWebserver(testPort);
149         }
150         @After
151         private void deinit() {
152                 stopTestWebserver();
153         }
154         
155         public static void initEsTestWebserver(int port) throws IOException {
156                 initEsTestWebserver(port, "/mwtn/test");
157         }
158         public static void initEsTestWebserver(int port,String baseUri) throws IOException {
159                 server = HttpServer.create(new InetSocketAddress("127.0.0.1", port), 0);
160                 httpThreadPool = Executors.newFixedThreadPool(5);
161                 server.setExecutor(httpThreadPool);
162                 server.createContext(baseUri, new MyHandler());
163                 //server.createContext("/", new MyRootHandler());
164                 server.setExecutor(null); // creates a default executor
165                 server.start();
166                 System.out.println("http server started");
167         }
168
169         public static void stopTestWebserver() {
170                 if (server != null) {
171                         server.stop(0);
172                         httpThreadPool.shutdownNow();
173                         System.out.println("http server stopped" );
174                 }
175         }
176
177         
178
179         public static class MyHandler implements HttpHandler {
180                 @Override
181                 public void handle(HttpExchange t) throws IOException {
182                         String method = t.getRequestMethod();
183                         System.out.println(String.format("req received: %s %s" ,method,t.getRequestURI()));
184                         OutputStream os = null;
185                         try {
186                                 if (method.equals(HTTPMETHOD_GET)) {
187                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_GET.length());
188                                         os = t.getResponseBody();
189                                         os.write(HelpEsServlet.RESPONSE_GET.getBytes());
190                                 } else if (method.equals(HTTPMETHOD_POST)) {
191                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_POST.length());
192                                         os = t.getResponseBody();
193                                         os.write(HelpEsServlet.RESPONSE_POST.getBytes());
194                                 } else if (method.equals(HTTPMETHOD_PUT)) {
195                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_PUT.length());
196                                         os = t.getResponseBody();
197                                         os.write(HelpEsServlet.RESPONSE_PUT.getBytes());
198                                 } else if (method.equals(HTTPMETHOD_DELETE)) {
199                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_DELETE.length());
200                                         os = t.getResponseBody();
201                                         os.write(HelpEsServlet.RESPONSE_DELETE.getBytes());
202                                 } else if (method.equals(HTTPMETHOD_OPTIONS)) {
203                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_OPTIONS.length());
204                                         //os = t.getResponseBody();
205                                         //os.write(RESPONSE_OPTIONS.getBytes());
206                                 } else {
207                                         t.sendResponseHeaders(404, 0);
208                                 }
209                                 System.out.println("req handled successful");
210                                 
211                         } catch (Exception e) {
212                                 System.out.println(e.getMessage());
213                         }
214                         finally {
215                                 if (os != null)
216                                 {
217                                         os.close();
218                                 }
219                         }
220                 }
221         }
222 }