fix test for apigateway
[ccsdk/features.git] / sdnr / wt / apigateway / provider / src / test / java / org / onap / ccsdk / features / sdnr / wt / apigateway / test / helper / HelpServletBase.java
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.HttpServlet;
44 import javax.servlet.http.HttpServletRequest;
45 import javax.servlet.http.HttpServletResponse;
46
47 import org.junit.After;
48 import org.junit.Before;
49 import org.onap.ccsdk.features.sdnr.wt.apigateway.AaiServlet;
50
51 import com.sun.net.httpserver.HttpExchange;
52 import com.sun.net.httpserver.HttpHandler;
53 import com.sun.net.httpserver.HttpServer;
54
55 public class HelpServletBase {
56
57         protected static final String HTTPMETHOD_GET = "GET";
58         protected static final String HTTPMETHOD_POST = "POST";
59         protected static final String HTTPMETHOD_PUT = "PUT";
60         protected static final String HTTPMETHOD_DELETE = "DELETE";
61         protected static final String HTTPMETHOD_OPTIONS = "OPTIONS";
62         private IPublicServlet servlet;
63         private HttpServer server;
64         public final String HOST = "localhost";
65         protected final int port;
66         private final String baseUri;
67         protected static final String LR = "\n";
68
69         public HelpServletBase(String baseuri, int port) {
70                 this.baseUri=baseuri;
71                 this.port = port;
72         }
73         private ExecutorService httpThreadPool;
74         
75         public void setServlet(IPublicServlet s)
76         {
77                 this.servlet=s;
78         }
79         
80         protected void testrequest(String method, String data, String expectedResponse, boolean exact) {
81                 this.testrequest(method, data, expectedResponse, exact, null);
82         }
83
84         protected void testrequest(String method, String data, String expectedResponse, boolean exact,
85                         Map<String, String> headersToCheck) {
86                         
87                 HttpServletRequest mockRequest = mock(HttpServletRequest.class);
88                 HttpServletResponse mockResponse = mock(HttpServletResponse.class);
89
90                 StringWriter out = new StringWriter();
91                 ServletOutputStream printOut = new ServletOutputStream() {
92
93                         @Override
94                         public void write(int arg0) throws IOException {
95                                 out.write(arg0);
96                         }
97                 };
98                 ByteArrayInputStream bis = new ByteArrayInputStream(data.getBytes());
99                 ServletInputStream inputStream= new ServletInputStream() {              
100                         @Override
101                         public int read() throws IOException {
102                                 return bis.read();
103                         }
104                 };
105                 Vector<String> headers=new Vector<String>();
106                 headers.addElement("Accept");
107                 headers.add("User-Agent");
108                 Enumeration<String> headerNames = headers.elements();
109                 try {
110                         when(mockRequest.getRequestURI()).thenReturn(this.baseUri+"/mwtn/test");
111                         when(mockRequest.getHeaderNames()).thenReturn(headerNames);
112                         when(mockRequest.getHeader("Accept")).thenReturn("application/json");
113                         when(mockRequest.getHeader("User-Agent")).thenReturn("Gecko abc");
114                         when(mockRequest.getInputStream()).thenReturn(inputStream);
115                         when(mockResponse.getOutputStream()).thenReturn(printOut);
116                         System.out.println("do a " + method + " request");
117                         if (method == HTTPMETHOD_GET)
118                                 this.servlet.doGet(mockRequest, mockResponse);
119                         else if (method == HTTPMETHOD_POST)
120                                 this.servlet.doPost(mockRequest, mockResponse);
121                         else if (method == HTTPMETHOD_PUT)
122                                 this.servlet.doPut(mockRequest, mockResponse);
123                         else if (method == HTTPMETHOD_DELETE)
124                                 this.servlet.doDelete(mockRequest, mockResponse);
125                         else if (method == HTTPMETHOD_OPTIONS)
126                                 this.servlet.doOptions(mockRequest, mockResponse);
127                         else
128                                 fail("http request method " + method + " test not implemented");
129                 } catch (Exception e) {
130                         System.err.println(e.getMessage());
131                 }
132
133                 verify(mockResponse).setStatus(200);
134                 if (exact)
135                         assertEquals(expectedResponse, out.toString());
136                 else
137                         assertTrue("response not for method " + method + "correct", out.toString().contains(expectedResponse));
138                 // currently unable to check extra headers
139                 if (headersToCheck != null) {
140
141                 }
142         }
143
144         @Before
145         public void initEsTestWebserver() throws IOException {
146                 this.server = HttpServer.create(new InetSocketAddress("127.0.0.1",this.port), 0);
147                 this.httpThreadPool = Executors.newFixedThreadPool(5);
148                 this.server.setExecutor(this.httpThreadPool);
149                 this.server.createContext("/mwtn/test", new MyHandler());
150                 //server.createContext("/", new MyRootHandler());
151                 this.server.setExecutor(null); // creates a default executor
152                 this.server.start();
153                 System.out.println("http server started");
154         }
155
156         @After
157         public void stopTestWebserver() {
158                 if (this.server != null) {
159                         this.server.stop(0);
160                         this.httpThreadPool.shutdownNow();
161                         System.out.println("http server stopped" );
162                 }
163         }
164
165         
166
167         static class MyHandler implements HttpHandler {
168                 @Override
169                 public void handle(HttpExchange t) throws IOException {
170                         String method = t.getRequestMethod();
171                         System.out.println("req method: " + method);
172                         OutputStream os = null;
173                         try {
174                                 if (method.equals(HTTPMETHOD_GET)) {
175                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_GET.length());
176                                         os = t.getResponseBody();
177                                         os.write(HelpEsServlet.RESPONSE_GET.getBytes());
178                                 } else if (method.equals(HTTPMETHOD_POST)) {
179                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_POST.length());
180                                         os = t.getResponseBody();
181                                         os.write(HelpEsServlet.RESPONSE_POST.getBytes());
182                                 } else if (method.equals(HTTPMETHOD_PUT)) {
183                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_PUT.length());
184                                         os = t.getResponseBody();
185                                         os.write(HelpEsServlet.RESPONSE_PUT.getBytes());
186                                 } else if (method.equals(HTTPMETHOD_DELETE)) {
187                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_DELETE.length());
188                                         os = t.getResponseBody();
189                                         os.write(HelpEsServlet.RESPONSE_DELETE.getBytes());
190                                 } else if (method.equals(HTTPMETHOD_OPTIONS)) {
191                                         t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_OPTIONS.length());
192                                         //os = t.getResponseBody();
193                                         //os.write(RESPONSE_OPTIONS.getBytes());
194                                 } else {
195                                         t.sendResponseHeaders(404, 0);
196                                 }
197                                 System.out.println("req handled successful");
198                                 
199                         } catch (Exception e) {
200                                 System.out.println(e.getMessage());
201                         }
202                         finally {
203                                 if (os != null)
204                                 {
205                                         os.close();
206                                 }
207                         }
208                 }
209         }
210 }