5e6cfb62e5599732f49f58e4740783be163fd939
[aaf/authz.git] / auth / auth-service / src / test / java / org / onap / aaf / auth / service / test / JU_BaseServiceImpl.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.auth.service.test;
23 import static org.mockito.Matchers.any;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.spy;
26 import static org.mockito.Mockito.when;
27
28 import java.util.ArrayList;
29 import java.util.GregorianCalendar;
30 import java.util.List;
31
32 import org.junit.runner.RunWith;
33 import org.mockito.Mock;
34 import org.mockito.Spy;
35 import org.mockito.runners.MockitoJUnitRunner;
36 import org.onap.aaf.auth.common.Define;
37 import org.onap.aaf.auth.dao.cached.CachedCertDAO;
38 import org.onap.aaf.auth.dao.cached.CachedCredDAO;
39 import org.onap.aaf.auth.dao.cached.CachedNSDAO;
40 import org.onap.aaf.auth.dao.cached.CachedPermDAO;
41 import org.onap.aaf.auth.dao.cached.CachedRoleDAO;
42 import org.onap.aaf.auth.dao.cached.CachedUserRoleDAO;
43 import org.onap.aaf.auth.dao.cass.ApprovalDAO;
44 import org.onap.aaf.auth.dao.cass.CacheInfoDAO;
45 import org.onap.aaf.auth.dao.cass.DelegateDAO;
46 import org.onap.aaf.auth.dao.cass.FutureDAO;
47 import org.onap.aaf.auth.dao.cass.HistoryDAO;
48 import org.onap.aaf.auth.dao.cass.LocateDAO;
49 import org.onap.aaf.auth.dao.cass.NsDAO;
50 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
51 import org.onap.aaf.auth.dao.hl.Question;
52 import org.onap.aaf.auth.env.AuthzEnv;
53 import org.onap.aaf.auth.env.AuthzTrans;
54 import org.onap.aaf.auth.layer.Result;
55 import org.onap.aaf.auth.service.AuthzCassServiceImpl;
56 import org.onap.aaf.auth.service.mapper.Mapper_2_0;
57 import org.onap.aaf.cadi.PropAccess;
58 import org.onap.aaf.cadi.config.Config;
59 import org.onap.aaf.org.DefaultOrg;
60 import org.onap.aaf.org.DefaultOrgIdentity;
61
62 import aaf.v2_0.Approvals;
63 import aaf.v2_0.Certs;
64 import aaf.v2_0.Delgs;
65 import aaf.v2_0.Error;
66 import aaf.v2_0.History;
67 import aaf.v2_0.Keys;
68 import aaf.v2_0.Nss;
69 import aaf.v2_0.Perms;
70 import aaf.v2_0.Pkey;
71 import aaf.v2_0.Request;
72 import aaf.v2_0.Roles;
73 import aaf.v2_0.UserRoles;
74 import aaf.v2_0.Users;
75
76 @RunWith(MockitoJUnitRunner.class)
77 public abstract class JU_BaseServiceImpl {
78         protected AuthzCassServiceImpl<Nss, Perms, Pkey, Roles, Users, UserRoles, Delgs, Certs, Keys, Request, History, Error, Approvals> 
79                 acsi;
80         protected Mapper_2_0 mapper;
81
82         @Mock
83     protected DefaultOrg org;
84         @Mock
85     protected DefaultOrgIdentity orgIdentity;
86
87 //
88 // NOTE: Annotation format (@Mock and @Spy) do NOT seem to always work as a Base Class,
89 //       so we construct manually.
90 //
91 // Mock Objects 
92     protected HistoryDAO historyDAO = mock(HistoryDAO.class);
93     protected CacheInfoDAO cacheInfoDAO = mock(CacheInfoDAO.class);
94     protected CachedNSDAO nsDAO = mock(CachedNSDAO.class);
95     protected CachedPermDAO permDAO = mock(CachedPermDAO.class);
96     protected CachedRoleDAO roleDAO = mock(CachedRoleDAO.class);
97     protected CachedUserRoleDAO userRoleDAO = mock(CachedUserRoleDAO.class);
98     protected CachedCredDAO credDAO = mock(CachedCredDAO.class);
99     protected CachedCertDAO certDAO = mock(CachedCertDAO.class);
100     protected LocateDAO locateDAO = mock(LocateDAO.class);
101     protected FutureDAO futureDAO = mock(FutureDAO.class);
102     protected DelegateDAO delegateDAO = mock(DelegateDAO.class);
103     protected ApprovalDAO approvalDAO = mock(ApprovalDAO.class);
104
105  // Spy Objects 
106     @Spy
107     protected static PropAccess access = new PropAccess();
108     @Spy
109         protected static AuthzEnv env = new AuthzEnv(access);
110     @Spy
111     protected static AuthzTrans trans = env.newTransNoAvg();
112     
113     // @Spy doesn't seem to work on Question.
114     @Spy
115     protected Question question = spy(new Question(trans,
116                         historyDAO,cacheInfoDAO,nsDAO,permDAO,
117                         roleDAO,userRoleDAO,credDAO,certDAO,
118                         locateDAO,futureDAO,delegateDAO,approvalDAO));
119     
120         public void setUp() throws Exception {
121             when(trans.org()).thenReturn(org);
122             when(org.getDomain()).thenReturn("org.onap");
123             Define.set(access);
124                 access.setProperty(Config.CADI_LATITUDE, "38.0");
125                 access.setProperty(Config.CADI_LONGITUDE, "-72.0");
126                 
127             mapper = new Mapper_2_0(question);
128                 acsi = new AuthzCassServiceImpl<>(trans, mapper, question);
129         }
130         
131         //////////
132         //  Common Data Objects
133         /////////
134     protected List<NsDAO.Data> nsData(String name) {
135         NsDAO.Data ndd = new NsDAO.Data();
136         ndd.name=name;
137         int dot = name.lastIndexOf('.');
138         if(dot<0) {
139                 ndd.parent=".";
140         } else {
141                 ndd.parent=name.substring(0,dot);
142         }
143         List<NsDAO.Data> rv = new ArrayList<NsDAO.Data>();
144         rv.add(ndd);
145         return rv;
146     }
147     
148     /**
149      * Setup Role Data for Mock Usages
150      * @param trans
151      * @param user
152      * @param ns
153      * @param role
154      * @param exists
155      * @param days
156      */
157     protected void whenRole(AuthzTrans trans, String user, String ns, String role, boolean exists, int days) {
158         Result<List<UserRoleDAO.Data>> result;
159         if(exists) {
160                 result = Result.ok(listOf(urData(user,ns,role,days)));
161         } else {
162                 result = Result.ok(emptyList(UserRoleDAO.Data.class));
163         }
164         when(question.userRoleDAO().read(trans, user, ns+'.'+role)).thenReturn(result);
165     }
166     
167     protected UserRoleDAO.Data urData(String user, String ns, String rname, int days) {
168         UserRoleDAO.Data urdd = new UserRoleDAO.Data();
169         urdd.user = user;
170         urdd.ns = ns;
171         urdd.rname = rname;
172         urdd.role = ns + '.' + rname;
173         GregorianCalendar gc = new GregorianCalendar();
174         gc.add(GregorianCalendar.DAY_OF_YEAR, days);
175         urdd.expires = gc.getTime();
176         return urdd;
177     }
178
179
180     protected <T> List<T> listOf(T t) {
181         List<T> list = new ArrayList<>();
182         list.add(t);
183         return list;
184     }
185     
186     protected <T> List<T> emptyList(Class<T> cls) {
187         return new ArrayList<>();
188     }
189
190 }