1111import com .nimbusds .jwt .JWTClaimsSet ;
1212import com .nimbusds .jwt .SignedJWT ;
1313import com .nimbusds .oauth2 .sdk .auth .PrivateKeyJWT ;
14+ import org .apache .commons .lang3 .StringUtils ;
1415import org .easymock .EasyMock ;
1516import org .powermock .api .easymock .PowerMock ;
1617import org .powermock .core .classloader .annotations .PowerMockIgnore ;
1718import org .powermock .core .classloader .annotations .PrepareForTest ;
1819import org .powermock .modules .testng .PowerMockTestCase ;
1920import org .testng .Assert ;
21+ import org .testng .annotations .BeforeClass ;
2022import org .testng .annotations .Test ;
2123
22- import java .io .FileInputStream ;
24+ import java .io .IOException ;
2325import java .net .URI ;
24- import java .security .KeyStore ;
25- import java .security .PrivateKey ;
26- import java .security .cert .X509Certificate ;
27- import java .util .ArrayList ;
28- import java .util .Collections ;
29- import java .util .Date ;
30- import java .util .List ;
31- import java .util .UUID ;
26+ import java .security .*;
27+ import java .security .cert .CertificateException ;
28+ import java .util .*;
3229import java .util .concurrent .Future ;
3330
3431import static org .testng .Assert .assertFalse ;
3532import static org .testng .Assert .assertNotNull ;
3633
3734@ PowerMockIgnore ({"javax.net.ssl.*" })
38- @ Test (groups = {"checkin" })
3935@ PrepareForTest ({ConfidentialClientApplication .class ,
4036 ClientCertificate .class , UserDiscoveryRequest .class , JwtHelper .class })
41- public class ConfidentialClientApplicationTest extends PowerMockTestCase {
37+ public class ConfidentialClientApplicationUnitT extends PowerMockTestCase {
4238
4339 private ConfidentialClientApplication app = null ;
40+ private IClientCertificate clientCertificate ;
41+
42+ @ BeforeClass
43+ private void init () throws
44+ KeyStoreException , IOException , NoSuchAlgorithmException ,
45+ CertificateException , UnrecoverableKeyException , NoSuchProviderException {
46+
47+ clientCertificate = CertificateHelper .getClientCertificate ();
48+ }
4449
4550 @ Test
4651 public void testAcquireTokenAuthCode_ClientCredential () throws Exception {
4752 app = PowerMock .createPartialMock (ConfidentialClientApplication .class ,
4853 new String []{"acquireTokenCommon" },
4954 ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID ,
50- ClientCredentialFactory .createFromSecret (TestConfiguration .AAD_CLIENT_SECRET ))
55+ ClientCredentialFactory .createFromSecret (TestConfiguration .AAD_CLIENT_DUMMYSECRET ))
5156 .authority (TestConfiguration .AAD_TENANT_ENDPOINT )
5257 );
5358
@@ -77,23 +82,9 @@ public void testAcquireTokenAuthCode_ClientCredential() throws Exception {
7782
7883 @ Test
7984 public void testAcquireTokenAuthCode_KeyCredential () throws Exception {
80- final KeyStore keystore = KeyStore .getInstance ("PKCS12" , "SunJSSE" );
81- keystore .load (
82- new FileInputStream (this .getClass ()
83- .getResource (TestConfiguration .AAD_CERTIFICATE_PATH )
84- .getFile ()),
85- TestConfiguration .AAD_CERTIFICATE_PASSWORD .toCharArray ());
86- final String alias = keystore .aliases ().nextElement ();
87- final PrivateKey key = (PrivateKey ) keystore .getKey (alias ,
88- TestConfiguration .AAD_CERTIFICATE_PASSWORD .toCharArray ());
89- final X509Certificate cert = (X509Certificate ) keystore
90- .getCertificate (alias );
91-
92- IClientCredential clientCredential = ClientCredentialFactory .createFromCertificate (key , cert );
93-
9485 app = PowerMock .createPartialMock (ConfidentialClientApplication .class ,
9586 new String []{"acquireTokenCommon" },
96- ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID , clientCredential )
87+ ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID , clientCertificate )
9788 .authority (TestConfiguration .AAD_TENANT_ENDPOINT ));
9889
9990 PowerMock .expectPrivate (app , "acquireTokenCommon" ,
@@ -121,24 +112,11 @@ public void testAcquireTokenAuthCode_KeyCredential() throws Exception {
121112 PowerMock .resetAll (app );
122113 }
123114
115+ @ Test
124116 public void testAcquireToken_KeyCred () throws Exception {
125- final KeyStore keystore = KeyStore .getInstance ("PKCS12" , "SunJSSE" );
126- keystore .load (
127- new FileInputStream (this .getClass ()
128- .getResource (TestConfiguration .AAD_CERTIFICATE_PATH )
129- .getFile ()),
130- TestConfiguration .AAD_CERTIFICATE_PASSWORD .toCharArray ());
131- final String alias = keystore .aliases ().nextElement ();
132- final PrivateKey key = (PrivateKey ) keystore .getKey (alias ,
133- TestConfiguration .AAD_CERTIFICATE_PASSWORD .toCharArray ());
134- final X509Certificate cert = (X509Certificate ) keystore
135- .getCertificate (alias );
136-
137- IClientCredential clientCredential = ClientCredentialFactory .createFromCertificate (key , cert );
138-
139117 app = PowerMock .createPartialMock (ConfidentialClientApplication .class ,
140118 new String []{"acquireTokenCommon" },
141- ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID , clientCredential )
119+ ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID , clientCertificate )
142120 .authority (TestConfiguration .AAD_TENANT_ENDPOINT ));
143121
144122 PowerMock .expectPrivate (app , "acquireTokenCommon" ,
@@ -167,23 +145,13 @@ public void testAcquireToken_KeyCred() throws Exception {
167145
168146 @ Test
169147 public void testClientCertificateRebuildsWhenExpired () throws Exception {
170- final KeyStore keystore = KeyStore .getInstance ("PKCS12" , "SunJSSE" );
171- keystore .load (
172- new FileInputStream (this .getClass ()
173- .getResource (TestConfiguration .AAD_CERTIFICATE_PATH )
174- .getFile ()),
175- TestConfiguration .AAD_CERTIFICATE_PASSWORD .toCharArray ());
176- final String alias = keystore .aliases ().nextElement ();
177- final PrivateKey key = (PrivateKey ) keystore .getKey (alias ,
178- TestConfiguration .AAD_CERTIFICATE_PASSWORD .toCharArray ());
179- final X509Certificate cert = (X509Certificate ) keystore
180- .getCertificate (alias );
181-
182- ClientCertificate clientCredential = (ClientCertificate ) ClientCredentialFactory .createFromCertificate (key , cert );
183-
184148 PowerMock .mockStaticPartial (JwtHelper .class , new String []{"buildJwt" });
185149 long jwtExperiationPeriodMilli = 2000 ;
186- ClientAssertion shortExperationJwt = buildShortJwt (TestConfiguration .AAD_CLIENT_ID , clientCredential , TestConfiguration .AAD_TENANT_ENDPOINT , jwtExperiationPeriodMilli );
150+ ClientAssertion shortExperationJwt = buildShortJwt (TestConfiguration .AAD_CLIENT_ID ,
151+ clientCertificate ,
152+ TestConfiguration .AAD_TENANT_ENDPOINT ,
153+ jwtExperiationPeriodMilli );
154+
187155 PowerMock .expectPrivate (
188156 JwtHelper .class ,
189157 "buildJwt" ,
@@ -194,7 +162,7 @@ public void testClientCertificateRebuildsWhenExpired() throws Exception {
194162 .times (2 ); // By this being called twice we ensure the client assertion is rebuilt once it has expired
195163
196164 PowerMock .replay (JwtHelper .class );
197- app = ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID , clientCredential )
165+ app = ConfidentialClientApplication .builder (TestConfiguration .AAD_CLIENT_ID , clientCertificate )
198166 .authority (TestConfiguration .AAD_TENANT_ENDPOINT ).build ();
199167 Thread .sleep (jwtExperiationPeriodMilli + 1000 ); //Have to sleep to ensure that the time period has passed
200168 final PrivateKeyJWT clientAuthentication = (PrivateKeyJWT ) app .clientAuthentication ();
@@ -203,7 +171,7 @@ public void testClientCertificateRebuildsWhenExpired() throws Exception {
203171 }
204172
205173 private ClientAssertion buildShortJwt (String clientId ,
206- ClientCertificate credential ,
174+ IClientCertificate credential ,
207175 String jwtAudience ,
208176 long jwtExperiationPeriod ) {
209177 final long time = System .currentTimeMillis ();
0 commit comments