2 * ============LICENSE_START====================================================
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
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====================================================
22 package org.onap.aaf.cadi.aaf.cert.test;
24 import static org.mockito.Mockito.*;
25 import static org.hamcrest.CoreMatchers.*;
26 import static org.junit.Assert.*;
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;
42 import javax.servlet.http.HttpServletRequest;
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;
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;
60 public class JU_AAFListedCertIdentity {
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;
69 @Mock private Users usersMock;
70 @Mock private User userMock1;
71 @Mock private User userMock2;
72 @Mock private User userMock3;
74 @Mock private Certs certsMock;
75 @Mock private Cert certMock1;
76 @Mock private Cert certMock2;
77 @Mock private Cert certMock3;
79 @Mock private HttpServletRequest reqMock;
80 @Mock private X509Certificate x509Mock;
82 private List<User> usersList;
83 private List<Cert> certsList;
85 private PropAccess access;
87 private ByteArrayOutputStream outStream;
89 private static final String USERS = "user1,user2,user3";
90 private static final String ID = "id";
91 private static final String FINGERPRINT = "fingerprint";
93 private static final byte[] certBytes = "certificate".getBytes();
96 public void setup() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
97 MockitoAnnotations.initMocks(this);
99 certsList = new ArrayList<>();
100 certsList.add(certMock1);
101 certsList.add(certMock2);
102 certsList.add(certMock3);
104 usersList = new ArrayList<>();
105 usersList.add(userMock1);
106 usersList.add(userMock2);
107 usersList.add(userMock3);
109 outStream = new ByteArrayOutputStream();
110 access = new PropAccess(new PrintStream(outStream), new String[0]);
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);
119 public void test() throws APIException, CadiException, CertificateException {
120 doReturn(rcliMock).when(conMock).client();
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);
125 when(futureUsersMock.get(5000)).thenReturn(true);
126 futureUsersMock.value = usersMock;
127 when(usersMock.getUser()).thenReturn(usersList);
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);
133 when(futureCertsMock.get(5000)).thenReturn(true);
134 futureCertsMock.value = certsMock;
135 when(certsMock.getCert()).thenReturn(certsList);
137 when(userMock1.getId()).thenReturn("user1");
138 when(userMock2.getId()).thenReturn("user2");
139 when(userMock3.getId()).thenReturn("user3");
141 prepareCert(certMock1);
142 prepareCert(certMock2);
143 prepareCert(certMock3);
145 AAFListedCertIdentity certID = new AAFListedCertIdentity(access, conMock);
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);
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));
160 private void setFinal(Object object, Field field, Object newValue) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
161 field.setAccessible(true);
163 Field modifiersField = Field.class.getDeclaredField("modifiers");
164 modifiersField.setAccessible(true);
165 modifiersField.setInt(field, field.getModifiers() & Modifier.FINAL);
167 field.set(object, newValue);
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());