1 /*******************************************************************************
2 * ============LICENSE_START====================================================
4 * * ===========================================================================
5 * * Copyright © 2017 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====================================================
21 ******************************************************************************/
22 package org.onap.aaf.cadi.lur.aaf.test;
24 import static org.junit.Assert.assertEquals;
26 import java.io.BufferedReader;
27 import java.io.IOException;
28 import java.io.UnsupportedEncodingException;
29 import java.net.HttpURLConnection;
30 import java.security.Principal;
31 import java.util.Collection;
32 import java.util.Enumeration;
33 import java.util.Locale;
36 import javax.servlet.AsyncContext;
37 import javax.servlet.DispatcherType;
38 import javax.servlet.RequestDispatcher;
39 import javax.servlet.ServletContext;
40 import javax.servlet.ServletException;
41 import javax.servlet.ServletInputStream;
42 import javax.servlet.ServletRequest;
43 import javax.servlet.ServletResponse;
44 import javax.servlet.http.Cookie;
45 import javax.servlet.http.HttpServletRequest;
46 import javax.servlet.http.HttpServletResponse;
47 import javax.servlet.http.HttpSession;
48 import javax.servlet.http.Part;
50 import org.junit.BeforeClass;
51 import org.junit.Test;
52 import org.onap.aaf.cadi.CadiException;
53 import org.onap.aaf.cadi.Lur;
54 import org.onap.aaf.cadi.Permission;
55 import org.onap.aaf.cadi.PropAccess;
56 import org.onap.aaf.cadi.Symm;
57 import org.onap.aaf.cadi.Taf.LifeForm;
58 import org.onap.aaf.cadi.aaf.AAFPermission;
59 import org.onap.aaf.cadi.aaf.v2_0.AAFConHttp;
60 import org.onap.aaf.cadi.aaf.v2_0.AAFLurPerm;
61 import org.onap.aaf.cadi.aaf.v2_0.AAFTaf;
62 import org.onap.aaf.cadi.locator.DNSLocator;
63 import org.onap.aaf.cadi.lur.ConfigPrincipal;
64 import org.onap.aaf.cadi.lur.LocalPermission;
65 import org.onap.aaf.cadi.taf.TafResp;
67 public class JU_Lur2_0Call {
68 private static AAFConHttp aaf;
69 private static PropAccess access;
72 public static void setUpBeforeClass() throws Exception {
73 access = new PropAccess();
74 aaf = new AAFConHttp(access,new DNSLocator(access,"https","localhost","8100"));
75 aaf.basicAuth("testid", "whatever");
79 public void test() throws Exception {
81 AAFLurPerm aafLur = aaf.newLur();
83 Principal pri = new ConfigPrincipal("testid@aaf.att.com","whatever");
84 for (int i = 0; i < 10; ++i) {
85 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance|write"),true);
86 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|kumquat|write"),false);
87 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance|read"),true);
88 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|kumquat|read"),true);
90 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","myInstance","write"),true);
91 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","kumquat","write"),false);
92 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","myInstance","read"),true);
93 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","kumquat","read"),true);
95 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|!kum.*|read"),true);
96 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance|!wr*"),true);
97 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance"),true);
99 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","!kum.*","read"),true);
100 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","myInstance","!wr*"),true);
102 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|!kum[Qq]uat|read"),true);
103 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|!my[iI]nstance|!wr*"),true);
104 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|!my[iI]nstance|!wr*"),true);
105 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance|!wr*"),true);
107 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","!kum[Qq]uat","read"),true);
108 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","!my[iI]nstance","!wr*"),true);
109 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","!my[iI]nstance","!wr*"),true);
110 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service","myInstance","!wr*"),true);
113 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|!my.nstance|!wr*"),true);
114 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|my.nstance|!wr*"),false);
116 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|my.nstance|!wr*"),false);
118 //Maitrayee, aren't we going to have issues if we do RegExp with "."?
119 //Is it too expensive to only do Reg Ex in presence of special characters, []{}*, etc? Not sure this helps for GRID.
120 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|kum.quat|read"),true);
121 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|!kum..uat|read"),true);
123 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance"),true); // ok if Stored Action is "*"
126 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|:myCluster:*:!my.*|write"),true); // ok if Stored Action is "*"
127 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|:myCluster:*|write"),false); // not ok if key lengths don't match "*"
128 print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|:myCluster:*:myCF|write"),true); // ok if Stored Action is "*"
129 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service",":myCluster:*:!my.*","write"),true); // ok if Stored Action is "*"
130 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service",":myCluster:*:myCF","write"),true); // ok if Stored Action is "*"
131 print(aafLur, pri, new AAFPermission("com.test.JU_Lur2_0Call.service",":myCluster:*","write"),false); // not ok if key lengths don't match
135 print(aafLur, pri, new LocalPermission("bogus"),false);
138 // Thread.sleep(7000);
139 // } catch (InterruptedException e) {
140 // e.printStackTrace();
142 for (int i = 0; i < 10; ++i)
143 print(aafLur, pri, new LocalPermission("supergroup"),false);
145 System.out.println("All Done");
148 public void testTaf() throws Exception {
149 AAFTaf<?> aaft = new AAFTaf<HttpURLConnection>(aaf,true);
153 resp = aaft.validate(LifeForm.CBLF, new Req(), null);
154 assertEquals(TafResp.RESP.TRY_AUTHENTICATING, resp.isAuthenticated());
156 String auth = "Basic " + Symm.base64.encode("testid:whatever");
157 resp = aaft.validate(LifeForm.CBLF, new Req("Authorization",auth), null);
158 assertEquals(TafResp.RESP.IS_AUTHENTICATED, resp.isAuthenticated());
162 // public void testRole() throws CadiException {
163 // TestAccess ta = new TestAccess();
164 // AAFLurRole1_0 aafLur = new AAFLurRole1_0(
166 //// "http://DME2RESOLVE/service=com.att.authz.AuthorizationService/version=1.0.0/envContext=UAT/routeOffer=BAU_SE",
167 // "http://DME2RESOLVE/service=com.att.authz.AuthorizationService/version=1.0.0/envContext=DEV/routeOffer=D1",
168 // "m12345", "m12345pass", 50000, // dme Time
169 // // 5*60000); // 5 minutes User Expiration
170 // 50000, // 5 seconds after Expiration
171 // 200); // High Count of items.. These do not take much memory
173 // Principal pri = new ConfigPrincipal("xy1234","whatever");
174 // for (int i = 0; i < 10; ++i) {
175 //// print(aafLur, pri, new LocalPermission("*|*|*|com.att.authz"));
176 // print(aafLur, pri, new LocalPermission("service|myInstance|write"),false);
177 // print(aafLur, pri, new LocalPermission("com.test.JU_Lur2_0Call.service|myInstance|write"),false);
178 // print(aafLur, pri, new LocalPermission("org.osaaf.cadi"),true);
179 // print(aafLur, pri, new LocalPermission("global"),true);
180 // print(aafLur, pri, new LocalPermission("kumquat"),false);
183 // print(aafLur, pri, new LocalPermission("bogus"),false);
185 // for (int i = 0; i < 10; ++i)
186 // print(aafLur, pri, new LocalPermission("supergroup"),false);
188 // System.out.println("All Done");
192 private void print(Lur aafLur, Principal pri, Permission perm, boolean shouldBe)
193 throws CadiException {
194 long start = System.nanoTime();
197 boolean ok = aafLur.fish(pri, perm);
199 assertEquals(shouldBe,ok);
200 float ms = (System.nanoTime() - start) / 1000000f;
202 System.out.println("Yes, part of " + perm.getKey() + " (" + ms
205 System.out.println("No, not part of " + perm.getKey() + " (" + ms
210 @SuppressWarnings("rawtypes")
211 public class Req implements HttpServletRequest {
212 private String[] headers;
214 public Req(String ... headers) {
215 this.headers = headers;
218 public Object getAttribute(String name) {
219 // TODO Auto-generated method stub
223 @SuppressWarnings("unchecked")
224 public Enumeration getAttributeNames() {
225 // TODO Auto-generated method stub
229 public String getCharacterEncoding() {
230 // TODO Auto-generated method stub
234 public void setCharacterEncoding(String env)
235 throws UnsupportedEncodingException {
236 // TODO Auto-generated method stub
240 public int getContentLength() {
241 // TODO Auto-generated method stub
245 public String getContentType() {
246 // TODO Auto-generated method stub
250 public ServletInputStream getInputStream() throws IOException {
251 // TODO Auto-generated method stub
255 public String getParameter(String name) {
256 // TODO Auto-generated method stub
260 @SuppressWarnings("unchecked")
261 public Enumeration getParameterNames() {
262 // TODO Auto-generated method stub
266 public String[] getParameterValues(String name) {
267 // TODO Auto-generated method stub
271 @SuppressWarnings("unchecked")
272 public Map getParameterMap() {
273 // TODO Auto-generated method stub
277 public String getProtocol() {
278 // TODO Auto-generated method stub
282 public String getScheme() {
283 // TODO Auto-generated method stub
287 public String getServerName() {
288 // TODO Auto-generated method stub
292 public int getServerPort() {
293 // TODO Auto-generated method stub
297 public BufferedReader getReader() throws IOException {
298 // TODO Auto-generated method stub
302 public String getRemoteAddr() {
303 // TODO Auto-generated method stub
307 public String getRemoteHost() {
308 // TODO Auto-generated method stub
312 public void setAttribute(String name, Object o) {
313 // TODO Auto-generated method stub
317 public void removeAttribute(String name) {
318 // TODO Auto-generated method stub
322 public Locale getLocale() {
323 // TODO Auto-generated method stub
327 @SuppressWarnings("unchecked")
328 public Enumeration getLocales() {
329 // TODO Auto-generated method stub
333 public boolean isSecure() {
334 // TODO Auto-generated method stub
338 public RequestDispatcher getRequestDispatcher(String path) {
339 // TODO Auto-generated method stub
343 public String getRealPath(String path) {
344 // TODO Auto-generated method stub
348 public int getRemotePort() {
349 // TODO Auto-generated method stub
353 public String getLocalName() {
354 // TODO Auto-generated method stub
358 public String getLocalAddr() {
359 // TODO Auto-generated method stub
363 public int getLocalPort() {
364 // TODO Auto-generated method stub
368 public String getAuthType() {
369 // TODO Auto-generated method stub
373 public Cookie[] getCookies() {
374 // TODO Auto-generated method stub
378 public long getDateHeader(String name) {
379 // TODO Auto-generated method stub
383 public String getHeader(String name) {
384 for(int i=1;i<headers.length;i=i+2) {
385 if(headers[i-1].equals(name)) return headers[i];
390 @SuppressWarnings("unchecked")
391 public Enumeration getHeaders(String name) {
392 // TODO Auto-generated method stub
396 @SuppressWarnings("unchecked")
397 public Enumeration getHeaderNames() {
398 // TODO Auto-generated method stub
402 public int getIntHeader(String name) {
403 // TODO Auto-generated method stub
407 public String getMethod() {
408 // TODO Auto-generated method stub
412 public String getPathInfo() {
413 // TODO Auto-generated method stub
417 public String getPathTranslated() {
418 // TODO Auto-generated method stub
422 public String getContextPath() {
423 // TODO Auto-generated method stub
427 public String getQueryString() {
428 // TODO Auto-generated method stub
432 public String getRemoteUser() {
433 // TODO Auto-generated method stub
437 public boolean isUserInRole(String role) {
438 // TODO Auto-generated method stub
442 public Principal getUserPrincipal() {
443 // TODO Auto-generated method stub
447 public String getRequestedSessionId() {
448 // TODO Auto-generated method stub
452 public String getRequestURI() {
453 // TODO Auto-generated method stub
457 public StringBuffer getRequestURL() {
458 // TODO Auto-generated method stub
462 public String getServletPath() {
463 // TODO Auto-generated method stub
467 public HttpSession getSession(boolean create) {
468 // TODO Auto-generated method stub
472 public HttpSession getSession() {
473 // TODO Auto-generated method stub
477 public boolean isRequestedSessionIdValid() {
478 // TODO Auto-generated method stub
482 public boolean isRequestedSessionIdFromCookie() {
483 // TODO Auto-generated method stub
487 public boolean isRequestedSessionIdFromURL() {
488 // TODO Auto-generated method stub
492 public boolean isRequestedSessionIdFromUrl() {
493 // TODO Auto-generated method stub
498 public ServletContext getServletContext() {
499 // TODO Auto-generated method stub
504 public AsyncContext startAsync() throws IllegalStateException {
505 // TODO Auto-generated method stub
510 public AsyncContext startAsync(ServletRequest servletRequest,
511 ServletResponse servletResponse) throws IllegalStateException {
512 // TODO Auto-generated method stub
517 public boolean isAsyncStarted() {
518 // TODO Auto-generated method stub
523 public boolean isAsyncSupported() {
524 // TODO Auto-generated method stub
529 public AsyncContext getAsyncContext() {
530 // TODO Auto-generated method stub
535 public DispatcherType getDispatcherType() {
536 // TODO Auto-generated method stub
541 public boolean authenticate(HttpServletResponse response)
542 throws IOException, ServletException {
543 // TODO Auto-generated method stub
548 public void login(String username, String password)
549 throws ServletException {
550 // TODO Auto-generated method stub
555 public void logout() throws ServletException {
556 // TODO Auto-generated method stub
561 public Collection<Part> getParts() throws IOException, ServletException {
562 // TODO Auto-generated method stub
567 public Part getPart(String name) throws IOException, ServletException {
568 // TODO Auto-generated method stub