Improve coverage of Cadi/client
[aaf/authz.git] / cadi / client / src / test / java / org / onap / aaf / cadi / client / test / JU_Rcli.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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====================================================
19  *
20  */
21
22 package org.onap.aaf.cadi.client.test;
23
24 import static org.junit.Assert.*;
25 import static org.mockito.Mockito.*;
26 import static org.hamcrest.CoreMatchers.*;
27 import org.junit.*;
28 import org.mockito.*;
29
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;
40
41 import java.io.ByteArrayOutputStream;
42 import java.io.IOException;
43 import java.io.PrintStream;
44 import java.net.HttpURLConnection;
45 import java.net.URI;
46 import java.net.URISyntaxException;
47 import java.util.Enumeration;
48
49 import javax.servlet.ServletInputStream;
50 import javax.servlet.http.HttpServletRequest;
51 import javax.servlet.http.HttpServletResponse;
52
53 public class JU_Rcli {
54
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;
61         
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";
67         
68         private static URI uri;
69         private static Enumeration<String> enumeration;
70
71         private Client client;
72         
73         @Before
74         public void setup() throws URISyntaxException, IOException {
75                 MockitoAnnotations.initMocks(this);
76                 
77                 when(dfMock.getTypeClass()).thenReturn(HttpURLConnection.class);
78                 when(dfMock.newData()).thenReturn(dataMock);
79                 when(dataMock.out((TYPE) any())).thenReturn(dataMock);
80                 
81                 when(reqMock.getInputStream()).thenReturn(isMock);
82                 when(isMock.read((byte[]) any())).thenReturn(-1);
83
84                 uri = new URI(uriString);
85                 enumeration = new CustomEnumeration();
86                 client = new Client();
87         }
88         
89         @Test
90         public void createTest() throws APIException, CadiException {
91                 RcliStub rcli = new RcliStub(uri);
92                 rcli.type(Data.TYPE.XML);
93
94                 rcli.create(null, contentType, dfMock, conMock);
95                 rcli.create("No question mark", contentType, dfMock, conMock);
96                 rcli.create("question?mark", contentType, dfMock, conMock);
97
98                 rcli.create(null, dfMock, conMock);
99                 rcli.create("No question mark", dfMock, conMock);
100                 rcli.create("question?mark", dfMock, conMock);
101
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);
105
106                 rcli.create(null, HttpURLConnection.class);
107                 rcli.create("No question mark", HttpURLConnection.class);
108                 rcli.create("question?mark", HttpURLConnection.class);
109
110                 rcli.create(null, contentType);
111                 rcli.create("No question mark", contentType);
112                 rcli.create("question?mark", contentType);
113         }
114         
115         @Test
116         public void postFormTest() throws APIException, CadiException {
117                 RcliStub rcli = new RcliStub(uri);
118
119                 rcli.type(Data.TYPE.DEFAULT);
120                 rcli.postForm(null, dfMock);
121                 rcli.postForm("No question mark", dfMock);
122                 rcli.postForm("question?mark", dfMock);
123                 
124                 rcli.type(Data.TYPE.JSON);
125                 rcli.postForm("question?mark", dfMock);
126
127                 rcli.type(Data.TYPE.XML);
128                 rcli.postForm("question?mark", dfMock);
129
130         }
131
132         @Test
133         public void readPostTest() throws APIException, CadiException {
134                 RcliStub rcli = new RcliStub(uri);
135                 rcli.type(Data.TYPE.DEFAULT);
136
137                 rcli.readPost(null, dfMock, conMock);
138                 rcli.readPost("No question mark", dfMock, conMock);
139                 rcli.readPost("question?mark", dfMock, conMock);
140
141                 rcli.readPost(null, dfMock, conMock, dfMock);
142                 rcli.readPost("No question mark", dfMock, conMock, dfMock);
143                 rcli.readPost("question?mark", dfMock, conMock, dfMock);
144
145                 rcli.readPost("First string", "Second string");
146         }
147         
148         @Test
149         public void readTest() throws APIException, CadiException {
150                 RcliStub rcli = new RcliStub(uri);
151                 rcli.type(Data.TYPE.DEFAULT);
152
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);
157         }
158
159         @Test
160         public void updateTest() throws APIException, CadiException {
161                 RcliStub rcli = new RcliStub(uri);
162                 rcli.type(Data.TYPE.DEFAULT);
163
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);
169         }
170
171         @Test
172         public void deleteTest() throws APIException, CadiException {
173                 RcliStub rcli = new RcliStub(uri);
174                 rcli.type(Data.TYPE.DEFAULT);
175
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");
181         }
182
183         @Test
184         public void transferTest() throws APIException, CadiException {
185                 RcliStub rcli = new RcliStub(uri);
186                 rcli.type(Data.TYPE.DEFAULT);
187
188                 when(reqMock.getRequestURI()).thenReturn(uriString);
189                 when(reqMock.getHeaderNames()).thenReturn(enumeration);
190                 rcli.transfer(reqMock, respMock, "string", 200);
191                 
192                 // coverage...
193                 when(reqMock.getMethod()).thenReturn("GET");
194                 rcli.transfer(reqMock, respMock, "string", 200);
195         }
196
197         @Test(expected = CadiException.class)
198         public void transferThrowsTest() throws APIException, CadiException {
199                 RcliStub rcli = new RcliStub(uri);
200                 rcli.type(Data.TYPE.DEFAULT);
201
202                 rcli.transfer(reqMock, respMock, "string", 200);
203         }
204
205         @Test
206         public void accessorMutatorTest() throws URISyntaxException {
207                 RcliStub rcli = new RcliStub();
208                 Rcli<?> rcliClone = rcli.forUser(null);
209                 
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));
215                 
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"));
226                 
227                 rcli.setFragment(fragment);
228                 rcli.setQueryParams(queryParams);
229
230                 rcliClone = rcli.forUser(null);
231                 assertThat(rcliClone.toString(), is(uriString));
232         }
233
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; }
244         }
245         
246         private class CustomEnumeration implements Enumeration<String> {
247                 private int idx = 0;
248                 private final String[] elements = {"This", "is", "a", "test"};
249                 @Override
250                 public String nextElement() {
251                         return idx >= elements.length ? null : elements[idx++];
252                 }
253                 @Override
254                 public boolean hasMoreElements() {
255                         return idx < elements.length;
256                 }
257         }
258
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 {
268                         try {
269                                 if (transfer != null) {
270                                         transfer.transfer(new PrintStream(new ByteArrayOutputStream()));
271                                 }
272                         } catch (IOException e) {
273                         }
274                 } 
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; } 
280         }
281         
282         //private class FutureStub implements Future<String> {
283         //}
284 }