f2d91b02e356b193fb7ef0f8d09e9ac70626e965
[aaf/authz.git] / cadi / aaf / src / test / java / org / onap / aaf / cadi / aaf / cert / test / JU_AAFListedCertIdentity.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.aaf.cert.test;
23
24 import static org.mockito.Mockito.*;
25 import static org.hamcrest.CoreMatchers.*;
26 import static org.junit.Assert.*;
27
28 import org.junit.*;
29 import org.mockito.*;
30
31 import java.io.ByteArrayOutputStream;
32 import java.io.PrintStream;
33 import java.lang.reflect.Field;
34 import java.lang.reflect.Modifier;
35 import java.security.cert.CertificateException;
36 import java.security.cert.X509Certificate;
37 import java.util.ArrayList;
38 import java.util.Date;
39 import java.util.List;
40 import java.util.Set;
41
42 import javax.servlet.http.HttpServletRequest;
43
44 import org.onap.aaf.cadi.CadiException;
45 import org.onap.aaf.cadi.PropAccess;
46 import org.onap.aaf.cadi.aaf.cert.AAFListedCertIdentity;
47 import org.onap.aaf.cadi.aaf.v2_0.AAFCon;
48 import org.onap.aaf.cadi.client.Future;
49 import org.onap.aaf.cadi.client.Rcli;
50 import org.onap.aaf.cadi.config.Config;
51 import org.onap.aaf.misc.env.APIException;
52 import org.onap.aaf.misc.env.util.Chrono;
53 import org.onap.aaf.misc.rosetta.env.RosettaDF;
54
55 import aaf.v2_0.Certs;
56 import aaf.v2_0.Certs.Cert;
57 import aaf.v2_0.Users;
58 import aaf.v2_0.Users.User;
59
60 public class JU_AAFListedCertIdentity {
61
62         @Mock private AAFCon<?> conMock;
63         @Mock private Rcli<Object> rcliMock;
64         @Mock private RosettaDF<Users> userDFMock;
65         @Mock private RosettaDF<Certs> certDFMock;
66         @Mock private Future<Users> futureUsersMock;
67         @Mock private Future<Certs> futureCertsMock;
68
69         @Mock private Users usersMock;
70         @Mock private User userMock1;
71         @Mock private User userMock2;
72         @Mock private User userMock3;
73
74         @Mock private Certs certsMock;
75         @Mock private Cert certMock1;
76         @Mock private Cert certMock2;
77         @Mock private Cert certMock3;
78
79         @Mock private HttpServletRequest reqMock;
80         @Mock private X509Certificate x509Mock;
81
82         private List<User> usersList;
83         private List<Cert> certsList;
84
85         private PropAccess access;
86
87         private ByteArrayOutputStream outStream;
88
89         private static final String USERS = "user1,user2,user3";
90         private static final String ID = "id";
91         private static final String FINGERPRINT = "fingerprint";
92
93         private static final byte[] certBytes = "certificate".getBytes();
94
95         @Before
96         public void setup() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
97                 MockitoAnnotations.initMocks(this);
98
99                 certsList = new ArrayList<>();
100                 certsList.add(certMock1);
101                 certsList.add(certMock2);
102                 certsList.add(certMock3);
103
104                 usersList = new ArrayList<>();
105                 usersList.add(userMock1);
106                 usersList.add(userMock2);
107                 usersList.add(userMock3);
108
109                 outStream = new ByteArrayOutputStream();
110                 access = new PropAccess(new PrintStream(outStream), new String[0]);
111                 outStream.reset();
112                 access.setProperty(Config.AAF_CERT_IDS, USERS);
113                 setFinal(conMock, conMock.getClass().getField("usersDF"), userDFMock);
114                 setFinal(conMock, conMock.getClass().getField("certsDF"), certDFMock);
115                 setFinal(conMock, conMock.getClass().getField("access"), access);
116         }
117
118         @Test
119         public void test() throws APIException, CadiException, CertificateException {
120                 doReturn(rcliMock).when(conMock).client(Config.AAF_DEFAULT_VERSION);
121                 when(rcliMock.read("/authz/users/perm/com.att.aaf.trust/tguard/authenticate", Users.class, userDFMock)).thenReturn(futureUsersMock);
122                 when(rcliMock.read("/authz/users/perm/com.att.aaf.trust/basicAuth/authenticate", Users.class, userDFMock)).thenReturn(futureUsersMock);
123                 when(rcliMock.read("/authz/users/perm/com.att.aaf.trust/csp/authenticate", Users.class, userDFMock)).thenReturn(futureUsersMock);
124
125                 when(futureUsersMock.get(5000)).thenReturn(true);
126                 futureUsersMock.value = usersMock;
127                 when(usersMock.getUser()).thenReturn(usersList);
128
129                 when(rcliMock.read("/authn/cert/id/user1", Certs.class, conMock.certsDF)).thenReturn(futureCertsMock);
130                 when(rcliMock.read("/authn/cert/id/user2", Certs.class, conMock.certsDF)).thenReturn(futureCertsMock);
131                 when(rcliMock.read("/authn/cert/id/user3", Certs.class, conMock.certsDF)).thenReturn(futureCertsMock);
132
133                 when(futureCertsMock.get(5000)).thenReturn(true);
134                 futureCertsMock.value = certsMock;
135                 when(certsMock.getCert()).thenReturn(certsList);
136
137                 when(userMock1.getId()).thenReturn("user1");
138                 when(userMock2.getId()).thenReturn("user2");
139                 when(userMock3.getId()).thenReturn("user3");
140
141                 prepareCert(certMock1);
142                 prepareCert(certMock2);
143                 prepareCert(certMock3);
144
145                 AAFListedCertIdentity certID = new AAFListedCertIdentity(access, conMock);
146
147                 when(x509Mock.getEncoded()).thenReturn(certBytes);
148                 certID.identity(reqMock, null, null);
149                 certID.identity(reqMock, null, certBytes);
150                 certID.identity(reqMock, x509Mock, null);
151                 certID.identity(reqMock, x509Mock, certBytes);
152
153                 Set<String> hashSetOfUsers = AAFListedCertIdentity.trusted("basicAuth");
154                 assertThat(hashSetOfUsers.contains("user1"), is(true));
155                 assertThat(hashSetOfUsers.contains("user2"), is(true));
156                 assertThat(hashSetOfUsers.contains("user3"), is(true));
157
158         }
159
160         private void setFinal(Object object, Field field, Object newValue) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
161                 field.setAccessible(true);
162
163                 Field modifiersField = Field.class.getDeclaredField("modifiers");
164                 modifiersField.setAccessible(true);
165                 modifiersField.setInt(field, field.getModifiers() & Modifier.FINAL);
166
167                 field.set(object, newValue);
168         }
169
170         private void prepareCert(Cert cert) {
171                 Date date = new Date();
172                 when(cert.getExpires()).thenReturn(Chrono.timeStamp(new Date(date.getTime() + (60 * 60 * 24))));
173                 when(cert.getId()).thenReturn(ID);
174                 when(cert.getFingerprint()).thenReturn(FINGERPRINT.getBytes());
175         }
176
177 }