2 * ============LICENSE_START=======================================================
3 * ONAP : CCSDK.apps.sdnr.wt.apigateway
4 * ================================================================================
5 * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
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;
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;
37 import java.util.Vector;
38 import java.util.concurrent.ExecutorService;
39 import java.util.concurrent.Executors;
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;
47 import org.junit.After;
48 import org.junit.Before;
49 import org.onap.ccsdk.features.sdnr.wt.apigateway.AaiServlet;
51 import com.sun.net.httpserver.HttpExchange;
52 import com.sun.net.httpserver.HttpHandler;
53 import com.sun.net.httpserver.HttpServer;
55 public class HelpServletBase {
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";
69 public HelpServletBase(String baseuri, int port) {
73 private ExecutorService httpThreadPool;
75 public void setServlet(IPublicServlet s)
80 protected void testrequest(String method, String data, String expectedResponse, boolean exact) {
81 this.testrequest(method, data, expectedResponse, exact, null);
84 protected void testrequest(String method, String data, String expectedResponse, boolean exact,
85 Map<String, String> headersToCheck) {
87 HttpServletRequest mockRequest = mock(HttpServletRequest.class);
88 HttpServletResponse mockResponse = mock(HttpServletResponse.class);
90 StringWriter out = new StringWriter();
91 ServletOutputStream printOut = new ServletOutputStream() {
94 public void write(int arg0) throws IOException {
98 ByteArrayInputStream bis = new ByteArrayInputStream(data.getBytes());
99 ServletInputStream inputStream= new ServletInputStream() {
101 public int read() throws IOException {
105 Vector<String> headers=new Vector<String>();
106 headers.addElement("Accept");
107 headers.add("User-Agent");
108 Enumeration<String> headerNames = headers.elements();
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);
128 fail("http request method " + method + " test not implemented");
129 } catch (Exception e) {
130 System.err.println(e.getMessage());
133 verify(mockResponse).setStatus(200);
135 assertEquals(expectedResponse, out.toString());
137 assertTrue("response not for method " + method + "correct", out.toString().contains(expectedResponse));
138 // currently unable to check extra headers
139 if (headersToCheck != null) {
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
153 System.out.println("http server started");
157 public void stopTestWebserver() {
158 if (this.server != null) {
160 this.httpThreadPool.shutdownNow();
161 System.out.println("http server stopped" );
167 static class MyHandler implements HttpHandler {
169 public void handle(HttpExchange t) throws IOException {
170 String method = t.getRequestMethod();
171 System.out.println("req method: " + method);
172 OutputStream os = null;
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());
195 t.sendResponseHeaders(404, 0);
197 System.out.println("req handled successful");
199 } catch (Exception e) {
200 System.out.println(e.getMessage());