API Version backward compat
[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();
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 }