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.junit.Assert.*;
25 import static org.mockito.Mockito.*;
26 import static org.hamcrest.CoreMatchers.*;
30 import org.onap.aaf.cadi.CadiException;
31 import org.onap.aaf.cadi.SecuritySetter;
32 import org.onap.aaf.cadi.client.EClient;
33 import org.onap.aaf.cadi.client.Future;
34 import org.onap.aaf.cadi.client.Rcli;
35 import org.onap.aaf.misc.env.APIException;
36 import org.onap.aaf.misc.env.Data;
37 import org.onap.aaf.misc.env.Data.TYPE;
38 import org.onap.aaf.misc.rosetta.env.RosettaDF;
39 import org.onap.aaf.misc.rosetta.env.RosettaData;
41 import java.io.ByteArrayOutputStream;
42 import java.io.IOException;
43 import java.io.PrintStream;
44 import java.net.HttpURLConnection;
46 import java.net.URISyntaxException;
47 import java.util.Enumeration;
49 import javax.servlet.ServletInputStream;
50 import javax.servlet.http.HttpServletRequest;
51 import javax.servlet.http.HttpServletResponse;
53 public class JU_Rcli {
55 @Mock RosettaDF<HttpURLConnection> dfMock;
56 @Mock RosettaData<HttpURLConnection> dataMock;
57 @Mock HttpURLConnection conMock;
58 @Mock HttpServletRequest reqMock;
59 @Mock HttpServletResponse respMock;
60 @Mock ServletInputStream isMock;
62 private final static String uriString = "example.com";
63 private final static String apiVersion = "v1.0";
64 private final static String fragment = "framgent";
65 private final static String queryParams = "queryParams";
66 private final static String contentType = "contentType";
68 private static URI uri;
69 private static Enumeration<String> enumeration;
71 private Client client;
74 public void setup() throws URISyntaxException, IOException {
75 MockitoAnnotations.initMocks(this);
77 when(dfMock.getTypeClass()).thenReturn(HttpURLConnection.class);
78 when(dfMock.newData()).thenReturn(dataMock);
79 when(dataMock.out((TYPE) any())).thenReturn(dataMock);
81 when(reqMock.getInputStream()).thenReturn(isMock);
82 when(isMock.read((byte[]) any())).thenReturn(-1);
84 uri = new URI(uriString);
85 enumeration = new CustomEnumeration();
86 client = new Client();
90 public void createTest() throws APIException, CadiException {
91 RcliStub rcli = new RcliStub(uri);
92 rcli.type(Data.TYPE.XML);
94 rcli.create(null, contentType, dfMock, conMock);
95 rcli.create("No question mark", contentType, dfMock, conMock);
96 rcli.create("question?mark", contentType, dfMock, conMock);
98 rcli.create(null, dfMock, conMock);
99 rcli.create("No question mark", dfMock, conMock);
100 rcli.create("question?mark", dfMock, conMock);
102 rcli.create(null, HttpURLConnection.class, dfMock, conMock);
103 rcli.create("No question mark", HttpURLConnection.class, dfMock, conMock);
104 rcli.create("question?mark", HttpURLConnection.class, dfMock, conMock);
106 rcli.create(null, HttpURLConnection.class);
107 rcli.create("No question mark", HttpURLConnection.class);
108 rcli.create("question?mark", HttpURLConnection.class);
110 rcli.create(null, contentType);
111 rcli.create("No question mark", contentType);
112 rcli.create("question?mark", contentType);
116 public void postFormTest() throws APIException, CadiException {
117 RcliStub rcli = new RcliStub(uri);
119 rcli.type(Data.TYPE.DEFAULT);
120 rcli.postForm(null, dfMock);
121 rcli.postForm("No question mark", dfMock);
122 rcli.postForm("question?mark", dfMock);
124 rcli.type(Data.TYPE.JSON);
125 rcli.postForm("question?mark", dfMock);
127 rcli.type(Data.TYPE.XML);
128 rcli.postForm("question?mark", dfMock);
133 public void readPostTest() throws APIException, CadiException {
134 RcliStub rcli = new RcliStub(uri);
135 rcli.type(Data.TYPE.DEFAULT);
137 rcli.readPost(null, dfMock, conMock);
138 rcli.readPost("No question mark", dfMock, conMock);
139 rcli.readPost("question?mark", dfMock, conMock);
141 rcli.readPost(null, dfMock, conMock, dfMock);
142 rcli.readPost("No question mark", dfMock, conMock, dfMock);
143 rcli.readPost("question?mark", dfMock, conMock, dfMock);
145 rcli.readPost("First string", "Second string");
149 public void readTest() throws APIException, CadiException {
150 RcliStub rcli = new RcliStub(uri);
151 rcli.type(Data.TYPE.DEFAULT);
153 rcli.read("First string", "Second string", "Third string", "Fourth string");
154 rcli.read("First string", "Second string", dfMock, "Third string", "Fourth string");
155 rcli.read("First string", dfMock, "Third string", "Fourth string");
156 rcli.read("First string", HttpURLConnection.class ,dfMock);
160 public void updateTest() throws APIException, CadiException {
161 RcliStub rcli = new RcliStub(uri);
162 rcli.type(Data.TYPE.DEFAULT);
164 rcli.update("First string", "Second string", dfMock, conMock);
165 rcli.update("First string", dfMock, conMock);
166 rcli.update("First string", HttpURLConnection.class, dfMock, conMock);
167 rcli.update("First string");
168 rcli.updateRespondString("First string", dfMock, conMock);
172 public void deleteTest() throws APIException, CadiException {
173 RcliStub rcli = new RcliStub(uri);
174 rcli.type(Data.TYPE.DEFAULT);
176 rcli.delete("First string", "Second string", dfMock, conMock);
177 rcli.delete("First string", dfMock, conMock);
178 rcli.delete("First string", HttpURLConnection.class, dfMock, conMock);
179 rcli.delete("First string", HttpURLConnection.class);
180 rcli.delete("First string", "Second string");
184 public void transferTest() throws APIException, CadiException {
185 RcliStub rcli = new RcliStub(uri);
186 rcli.type(Data.TYPE.DEFAULT);
188 when(reqMock.getRequestURI()).thenReturn(uriString);
189 when(reqMock.getHeaderNames()).thenReturn(enumeration);
190 rcli.transfer(reqMock, respMock, "string", 200);
193 when(reqMock.getMethod()).thenReturn("GET");
194 rcli.transfer(reqMock, respMock, "string", 200);
197 @Test(expected = CadiException.class)
198 public void transferThrowsTest() throws APIException, CadiException {
199 RcliStub rcli = new RcliStub(uri);
200 rcli.type(Data.TYPE.DEFAULT);
202 rcli.transfer(reqMock, respMock, "string", 200);
206 public void accessorMutatorTest() throws URISyntaxException {
207 RcliStub rcli = new RcliStub();
208 Rcli<?> rcliClone = rcli.forUser(null);
210 rcli = new RcliStub(uri);
211 assertThat(rcli.toString(), is(uriString));
212 assertThat(rcli.getURI(), is(uri));
213 assertThat(rcli.getReadTimeout(), is(5000));
214 assertThat(rcli.getConnectionTimeout(), is(3000));
216 rcli.connectionTimeout(3001);
217 assertThat(rcli.getConnectionTimeout(), is(3001));
218 rcli.readTimeout(5001);
219 assertThat(rcli.getReadTimeout(), is(5001));
220 rcli.apiVersion(apiVersion);
221 assertThat(rcli.isApiVersion(apiVersion), is(true));
222 rcli.type(Data.TYPE.XML);
223 assertThat(rcli.typeString(HttpURLConnection.class), is("application/HttpURLConnection+xml;version=" + apiVersion));
224 rcli.apiVersion(null);
225 assertThat(rcli.typeString(HttpURLConnection.class), is("application/HttpURLConnection+xml"));
227 rcli.setFragment(fragment);
228 rcli.setQueryParams(queryParams);
230 rcliClone = rcli.forUser(null);
231 assertThat(rcliClone.toString(), is(uriString));
234 private class RcliStub extends Rcli<HttpURLConnection> {
235 public RcliStub() { super(); }
236 public RcliStub(URI uri) { this.uri = uri; }
237 @Override public void setSecuritySetter(SecuritySetter<HttpURLConnection> ss) { }
238 @Override public SecuritySetter<HttpURLConnection> getSecuritySetter() { return null; }
239 @Override protected Rcli<HttpURLConnection> clone(URI uri, SecuritySetter<HttpURLConnection> ss) { return this; }
240 @Override public void invalidate() throws CadiException { }
241 @Override protected EClient<HttpURLConnection> client() throws CadiException { return client; }
242 public int getReadTimeout() { return readTimeout; }
243 public int getConnectionTimeout() { return connectionTimeout; }
246 private class CustomEnumeration implements Enumeration<String> {
248 private final String[] elements = {"This", "is", "a", "test"};
250 public String nextElement() {
251 return idx >= elements.length ? null : elements[idx++];
254 public boolean hasMoreElements() {
255 return idx < elements.length;
259 private class Client implements EClient<HttpURLConnection> {
260 private Transfer transfer;
261 @Override public void setPayload(Transfer transfer) { this.transfer = transfer; }
262 @Override public void setMethod(String meth) { }
263 @Override public void setPathInfo(String pathinfo) { }
264 @Override public void addHeader(String tag, String value) { }
265 @Override public void setQueryParams(String q) { }
266 @Override public void setFragment(String f) { }
267 @Override public void send() throws APIException {
269 if (transfer != null) {
270 transfer.transfer(new PrintStream(new ByteArrayOutputStream()));
272 } catch (IOException e) {
275 @Override public <T> Future<T> futureCreate(Class<T> t) { return null; }
276 @Override public Future<String> futureReadString() { return null; }
277 @Override public <T> Future<T> futureRead(RosettaDF<T> df, TYPE type) { return null; }
278 @Override public <T> Future<T> future(T t) { return null; }
279 @Override public Future<Void> future(HttpServletResponse resp, int expected) throws APIException { return null; }
282 //private class FutureStub implements Future<String> {