d33811e3d9e53c73a2ba67d7b3383dac6b64f441
[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 }