886c5d846aec4fac0a48f9296387459a679717b7
[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.hamcrest.CoreMatchers.is;
25 import static org.junit.Assert.assertThat;
26 import static org.mockito.Matchers.any;
27 import static org.mockito.Mockito.when;
28
29 import java.io.ByteArrayOutputStream;
30 import java.io.IOException;
31 import java.io.PrintStream;
32 import java.net.HttpURLConnection;
33 import java.net.URI;
34 import java.net.URISyntaxException;
35 import java.util.Enumeration;
36
37 import javax.servlet.ServletInputStream;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40
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;
55
56 public class JU_Rcli {
57
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;
64         
65         private final static String uriString = "example.com";
66         private final static String apiVersion = "v1.0";
67         private final static String contentType = "contentType";
68         
69         private static URI uri;
70         private static Enumeration<String> enumeration;
71
72         private Client client;
73         
74         @Before
75         public void setup() throws URISyntaxException, IOException {
76                 MockitoAnnotations.initMocks(this);
77                 
78                 when(dfMock.getTypeClass()).thenReturn(HttpURLConnection.class);
79                 when(dfMock.newData()).thenReturn(dataMock);
80                 when(dataMock.out((TYPE) any())).thenReturn(dataMock);
81                 
82                 when(reqMock.getInputStream()).thenReturn(isMock);
83                 when(isMock.read((byte[]) any())).thenReturn(-1);
84
85                 uri = new URI(uriString);
86                 enumeration = new CustomEnumeration();
87                 client = new Client();
88         }
89         
90         @Test
91         public void createTest() throws APIException, CadiException {
92                 RcliStub rcli = new RcliStub(uri);
93                 rcli.type(Data.TYPE.XML);
94
95                 rcli.create(null, contentType, dfMock, conMock);
96                 rcli.create("No question mark", contentType, dfMock, conMock);
97                 rcli.create("question?mark", contentType, dfMock, conMock);
98
99                 rcli.create(null, dfMock, conMock);
100                 rcli.create("No question mark", dfMock, conMock);
101                 rcli.create("question?mark", dfMock, conMock);
102
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);
106
107                 rcli.create(null, HttpURLConnection.class);
108                 rcli.create("No question mark", HttpURLConnection.class);
109                 rcli.create("question?mark", HttpURLConnection.class);
110
111                 rcli.create(null, contentType);
112                 rcli.create("No question mark", contentType);
113                 rcli.create("question?mark", contentType);
114         }
115         
116         @Test
117         public void postFormTest() throws APIException, CadiException {
118                 RcliStub rcli = new RcliStub(uri);
119
120                 rcli.type(Data.TYPE.DEFAULT);
121                 rcli.postForm(null, dfMock);
122                 rcli.postForm("No question mark", dfMock);
123                 rcli.postForm("question?mark", dfMock);
124                 
125                 rcli.type(Data.TYPE.JSON);
126                 rcli.postForm("question?mark", dfMock);
127
128                 rcli.type(Data.TYPE.XML);
129                 rcli.postForm("question?mark", dfMock);
130
131         }
132
133         @Test
134         public void readPostTest() throws APIException, CadiException {
135                 RcliStub rcli = new RcliStub(uri);
136                 rcli.type(Data.TYPE.DEFAULT);
137
138                 rcli.readPost(null, dfMock, conMock);
139                 rcli.readPost("No question mark", dfMock, conMock);
140                 rcli.readPost("question?mark", dfMock, conMock);
141
142                 rcli.readPost(null, dfMock, conMock, dfMock);
143                 rcli.readPost("No question mark", dfMock, conMock, dfMock);
144                 rcli.readPost("question?mark", dfMock, conMock, dfMock);
145
146                 rcli.readPost("First string", "Second string");
147         }
148         
149         @Test
150         public void readTest() throws APIException, CadiException {
151                 RcliStub rcli = new RcliStub(uri);
152                 rcli.type(Data.TYPE.DEFAULT);
153
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);
158         }
159
160         @Test
161         public void updateTest() throws APIException, CadiException {
162                 RcliStub rcli = new RcliStub(uri);
163                 rcli.type(Data.TYPE.DEFAULT);
164
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);
170         }
171
172         @Test
173         public void deleteTest() throws APIException, CadiException {
174                 RcliStub rcli = new RcliStub(uri);
175                 rcli.type(Data.TYPE.DEFAULT);
176
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");
182         }
183
184         @Test
185         public void transferTest() throws APIException, CadiException {
186                 RcliStub rcli = new RcliStub(uri);
187                 rcli.type(Data.TYPE.DEFAULT);
188
189                 when(reqMock.getRequestURI()).thenReturn(uriString);
190                 when(reqMock.getHeaderNames()).thenReturn(enumeration);
191                 rcli.transfer(reqMock, respMock, "string", 200);
192                 
193                 // coverage...
194                 when(reqMock.getMethod()).thenReturn("GET");
195                 rcli.transfer(reqMock, respMock, "string", 200);
196         }
197
198         @Test(expected = CadiException.class)
199         public void transferThrowsTest() throws APIException, CadiException {
200                 RcliStub rcli = new RcliStub(uri);
201                 rcli.type(Data.TYPE.DEFAULT);
202
203                 rcli.transfer(reqMock, respMock, "string", 200);
204         }
205
206         @Test
207         public void accessorMutatorTest() throws URISyntaxException {
208                 RcliStub rcli = new RcliStub();
209                 Rcli<?> rcliClone = rcli.forUser(null);
210                 
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));
216                 
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"));
227                 
228                 rcliClone = rcli.forUser(null);
229                 assertThat(rcliClone.toString(), is(uriString));
230         }
231
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; }
242         }
243         
244         private class CustomEnumeration implements Enumeration<String> {
245                 private int idx = 0;
246                 private final String[] elements = {"This", "is", "a", "test"};
247                 @Override
248                 public String nextElement() {
249                         return idx >= elements.length ? null : elements[idx++];
250                 }
251                 @Override
252                 public boolean hasMoreElements() {
253                         return idx < elements.length;
254                 }
255         }
256
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 {
266                         try {
267                                 if (transfer != null) {
268                                         transfer.transfer(new PrintStream(new ByteArrayOutputStream()));
269                                 }
270                         } catch (IOException e) {
271                         }
272                 } 
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; } 
278         }
279         
280         //private class FutureStub implements Future<String> {
281         //}
282 }