2 * ============LICENSE_START====================================================
4 * ===========================================================================
5 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6 * ===========================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END====================================================
22 package org.onap.aaf.cadi.client.test;
24 import static org.hamcrest.CoreMatchers.is;
25 import static org.junit.Assert.assertThat;
26 import static org.mockito.Matchers.any;
27 import static org.mockito.Mockito.when;
29 import java.io.ByteArrayOutputStream;
30 import java.io.IOException;
31 import java.io.PrintStream;
32 import java.net.HttpURLConnection;
34 import java.net.URISyntaxException;
35 import java.util.Enumeration;
37 import javax.servlet.ServletInputStream;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.mockito.Mock;
44 import org.mockito.MockitoAnnotations;
45 import org.onap.aaf.cadi.CadiException;
46 import org.onap.aaf.cadi.SecuritySetter;
47 import org.onap.aaf.cadi.client.EClient;
48 import org.onap.aaf.cadi.client.Future;
49 import org.onap.aaf.cadi.client.Rcli;
50 import org.onap.aaf.misc.env.APIException;
51 import org.onap.aaf.misc.env.Data;
52 import org.onap.aaf.misc.env.Data.TYPE;
53 import org.onap.aaf.misc.rosetta.env.RosettaDF;
54 import org.onap.aaf.misc.rosetta.env.RosettaData;
56 public class JU_Rcli {
58 @Mock RosettaDF<HttpURLConnection> dfMock;
59 @Mock RosettaData<HttpURLConnection> dataMock;
60 @Mock HttpURLConnection conMock;
61 @Mock HttpServletRequest reqMock;
62 @Mock HttpServletResponse respMock;
63 @Mock ServletInputStream isMock;
65 private final static String uriString = "example.com";
66 private final static String apiVersion = "v1.0";
67 private final static String contentType = "contentType";
69 private static URI uri;
70 private static Enumeration<String> enumeration;
72 private Client client;
75 public void setup() throws URISyntaxException, IOException {
76 MockitoAnnotations.initMocks(this);
78 when(dfMock.getTypeClass()).thenReturn(HttpURLConnection.class);
79 when(dfMock.newData()).thenReturn(dataMock);
80 when(dataMock.out((TYPE) any())).thenReturn(dataMock);
82 when(reqMock.getInputStream()).thenReturn(isMock);
83 when(isMock.read((byte[]) any())).thenReturn(-1);
85 uri = new URI(uriString);
86 enumeration = new CustomEnumeration();
87 client = new Client();
91 public void createTest() throws APIException, CadiException {
92 RcliStub rcli = new RcliStub(uri);
93 rcli.type(Data.TYPE.XML);
95 rcli.create(null, contentType, dfMock, conMock);
96 rcli.create("No question mark", contentType, dfMock, conMock);
97 rcli.create("question?mark", contentType, dfMock, conMock);
99 rcli.create(null, dfMock, conMock);
100 rcli.create("No question mark", dfMock, conMock);
101 rcli.create("question?mark", dfMock, conMock);
103 rcli.create(null, HttpURLConnection.class, dfMock, conMock);
104 rcli.create("No question mark", HttpURLConnection.class, dfMock, conMock);
105 rcli.create("question?mark", HttpURLConnection.class, dfMock, conMock);
107 rcli.create(null, HttpURLConnection.class);
108 rcli.create("No question mark", HttpURLConnection.class);
109 rcli.create("question?mark", HttpURLConnection.class);
111 rcli.create(null, contentType);
112 rcli.create("No question mark", contentType);
113 rcli.create("question?mark", contentType);
117 public void postFormTest() throws APIException, CadiException {
118 RcliStub rcli = new RcliStub(uri);
120 rcli.type(Data.TYPE.DEFAULT);
121 rcli.postForm(null, dfMock);
122 rcli.postForm("No question mark", dfMock);
123 rcli.postForm("question?mark", dfMock);
125 rcli.type(Data.TYPE.JSON);
126 rcli.postForm("question?mark", dfMock);
128 rcli.type(Data.TYPE.XML);
129 rcli.postForm("question?mark", dfMock);
134 public void readPostTest() throws APIException, CadiException {
135 RcliStub rcli = new RcliStub(uri);
136 rcli.type(Data.TYPE.DEFAULT);
138 rcli.readPost(null, dfMock, conMock);
139 rcli.readPost("No question mark", dfMock, conMock);
140 rcli.readPost("question?mark", dfMock, conMock);
142 rcli.readPost(null, dfMock, conMock, dfMock);
143 rcli.readPost("No question mark", dfMock, conMock, dfMock);
144 rcli.readPost("question?mark", dfMock, conMock, dfMock);
146 rcli.readPost("First string", "Second string");
150 public void readTest() throws APIException, CadiException {
151 RcliStub rcli = new RcliStub(uri);
152 rcli.type(Data.TYPE.DEFAULT);
154 rcli.read("First string", "Second string", "Third string", "Fourth string");
155 rcli.read("First string", "Second string", dfMock, "Third string", "Fourth string");
156 rcli.read("First string", dfMock, "Third string", "Fourth string");
157 rcli.read("First string", HttpURLConnection.class ,dfMock);
161 public void updateTest() throws APIException, CadiException {
162 RcliStub rcli = new RcliStub(uri);
163 rcli.type(Data.TYPE.DEFAULT);
165 rcli.update("First string", "Second string", dfMock, conMock);
166 rcli.update("First string", dfMock, conMock);
167 rcli.update("First string", HttpURLConnection.class, dfMock, conMock);
168 rcli.update("First string");
169 rcli.updateRespondString("First string", dfMock, conMock);
173 public void deleteTest() throws APIException, CadiException {
174 RcliStub rcli = new RcliStub(uri);
175 rcli.type(Data.TYPE.DEFAULT);
177 rcli.delete("First string", "Second string", dfMock, conMock);
178 rcli.delete("First string", dfMock, conMock);
179 rcli.delete("First string", HttpURLConnection.class, dfMock, conMock);
180 rcli.delete("First string", HttpURLConnection.class);
181 rcli.delete("First string", "Second string");
185 public void transferTest() throws APIException, CadiException {
186 RcliStub rcli = new RcliStub(uri);
187 rcli.type(Data.TYPE.DEFAULT);
189 when(reqMock.getRequestURI()).thenReturn(uriString);
190 when(reqMock.getHeaderNames()).thenReturn(enumeration);
191 rcli.transfer(reqMock, respMock, "string", 200);
194 when(reqMock.getMethod()).thenReturn("GET");
195 rcli.transfer(reqMock, respMock, "string", 200);
198 @Test(expected = CadiException.class)
199 public void transferThrowsTest() throws APIException, CadiException {
200 RcliStub rcli = new RcliStub(uri);
201 rcli.type(Data.TYPE.DEFAULT);
203 rcli.transfer(reqMock, respMock, "string", 200);
207 public void accessorMutatorTest() throws URISyntaxException {
208 RcliStub rcli = new RcliStub();
209 Rcli<?> rcliClone = rcli.forUser(null);
211 rcli = new RcliStub(uri);
212 assertThat(rcli.toString(), is(uriString));
213 assertThat(rcli.getURI(), is(uri));
214 assertThat(rcli.getReadTimeout(), is(5000));
215 assertThat(rcli.getConnectionTimeout(), is(3000));
217 rcli.connectionTimeout(3001);
218 assertThat(rcli.getConnectionTimeout(), is(3001));
219 rcli.readTimeout(5001);
220 assertThat(rcli.getReadTimeout(), is(5001));
221 rcli.apiVersion(apiVersion);
222 assertThat(rcli.isApiVersion(apiVersion), is(true));
223 rcli.type(Data.TYPE.XML);
224 assertThat(rcli.typeString(HttpURLConnection.class), is("application/HttpURLConnection+xml;version=" + apiVersion));
225 rcli.apiVersion(null);
226 assertThat(rcli.typeString(HttpURLConnection.class), is("application/HttpURLConnection+xml"));
228 rcliClone = rcli.forUser(null);
229 assertThat(rcliClone.toString(), is(uriString));
232 private class RcliStub extends Rcli<HttpURLConnection> {
233 public RcliStub() { super(); }
234 public RcliStub(URI uri) { this.uri = uri; }
235 @Override public void setSecuritySetter(SecuritySetter<HttpURLConnection> ss) { }
236 @Override public SecuritySetter<HttpURLConnection> getSecuritySetter() { return null; }
237 @Override protected Rcli<HttpURLConnection> clone(URI uri, SecuritySetter<HttpURLConnection> ss) { return this; }
238 @Override public void invalidate() throws CadiException { }
239 @Override protected EClient<HttpURLConnection> client() throws CadiException { return client; }
240 public int getReadTimeout() { return readTimeout; }
241 public int getConnectionTimeout() { return connectionTimeout; }
244 private class CustomEnumeration implements Enumeration<String> {
246 private final String[] elements = {"This", "is", "a", "test"};
248 public String nextElement() {
249 return idx >= elements.length ? null : elements[idx++];
252 public boolean hasMoreElements() {
253 return idx < elements.length;
257 private class Client implements EClient<HttpURLConnection> {
258 private Transfer transfer;
259 @Override public void setPayload(Transfer transfer) { this.transfer = transfer; }
260 @Override public void setMethod(String meth) { }
261 @Override public void setPathInfo(String pathinfo) { }
262 @Override public void addHeader(String tag, String value) { }
263 @Override public void setQueryParams(String q) { }
264 @Override public void setFragment(String f) { }
265 @Override public void send() throws APIException {
267 if (transfer != null) {
268 transfer.transfer(new PrintStream(new ByteArrayOutputStream()));
270 } catch (IOException e) {
273 @Override public <T> Future<T> futureCreate(Class<T> t) { return null; }
274 @Override public Future<String> futureReadString() { return null; }
275 @Override public <T> Future<T> futureRead(RosettaDF<T> df, TYPE type) { return null; }
276 @Override public <T> Future<T> future(T t) { return null; }
277 @Override public Future<Void> future(HttpServletResponse resp, int expected) throws APIException { return null; }
280 //private class FutureStub implements Future<String> {