55
66package com .aws .greengrass .mqttbridge .auth ;
77
8- import com .aws .greengrass .certificatemanager .CertificateManager ;
8+ import com .aws .greengrass .device .ClientDevicesAuthServiceApi ;
9+ import com .aws .greengrass .device .api .CertificateUpdateEvent ;
10+ import com .aws .greengrass .device .api .GetCertificateRequest ;
911import com .aws .greengrass .testcommons .testutilities .GGExtension ;
10- import java . security . cert . CertificateEncodingException ;
12+ import org . junit . jupiter . api . BeforeEach ;
1113import org .junit .jupiter .api .Test ;
1214import org .junit .jupiter .api .extension .ExtendWith ;
1315import org .mockito .ArgumentCaptor ;
1416import org .mockito .Mock ;
1517import org .mockito .junit .jupiter .MockitoExtension ;
1618
19+ import javax .net .SocketFactory ;
20+ import javax .net .ssl .SSLSocketFactory ;
1721import java .io .ByteArrayInputStream ;
1822import java .io .ByteArrayOutputStream ;
1923import java .io .IOException ;
2024import java .io .InputStream ;
2125import java .nio .charset .StandardCharsets ;
26+ import java .security .KeyPair ;
27+ import java .security .KeyPairGenerator ;
2228import java .security .KeyStore ;
29+ import java .security .NoSuchAlgorithmException ;
2330import java .security .PrivateKey ;
31+ import java .security .cert .CertificateEncodingException ;
2432import java .security .cert .CertificateException ;
2533import java .security .cert .CertificateFactory ;
2634import java .security .cert .X509Certificate ;
2735import java .util .Base64 ;
2836import java .util .Collections ;
2937import java .util .concurrent .CountDownLatch ;
3038import java .util .concurrent .TimeUnit ;
31- import java .util .function .Consumer ;
32- import javax .net .SocketFactory ;
33- import javax .net .ssl .SSLSocketFactory ;
3439
3540import static com .aws .greengrass .mqttbridge .auth .MQTTClientKeyStore .DEFAULT_KEYSTORE_PASSWORD ;
3641import static com .aws .greengrass .mqttbridge .auth .MQTTClientKeyStore .KEY_ALIAS ;
3742import static org .hamcrest .MatcherAssert .assertThat ;
3843import static org .hamcrest .Matchers .instanceOf ;
3944import static org .hamcrest .Matchers .is ;
40- import static org .mockito .ArgumentMatchers .any ;
4145import static org .mockito .Mockito .times ;
4246import static org .mockito .Mockito .verify ;
4347
@@ -64,24 +68,33 @@ public class MQTTClientKeyStoreTest {
6468 private static final byte [] END_CERT = "\r \n -----END CERTIFICATE-----\r \n " .getBytes (StandardCharsets .UTF_8 );
6569
6670 @ Mock
67- private CertificateManager mockCertificateManager ;
71+ private ClientDevicesAuthServiceApi mockServiceApi ;
72+ private KeyPair keyPair ;
73+
74+ @ BeforeEach
75+ void beforeEach () throws NoSuchAlgorithmException {
76+ KeyPairGenerator kpg = KeyPairGenerator .getInstance ("RSA" );
77+ kpg .initialize (2048 );
78+ keyPair = kpg .generateKeyPair ();
79+ }
6880
6981 @ Test
7082 void GIVEN_MQTTClientKeyStore_WHEN_initialized_THEN_keyAndCertGenerated () throws Exception {
71- MQTTClientKeyStore mqttClientKeyStore = new MQTTClientKeyStore (mockCertificateManager );
83+ MQTTClientKeyStore mqttClientKeyStore = new MQTTClientKeyStore (mockServiceApi );
7284 mqttClientKeyStore .init ();
7385
74- ArgumentCaptor <Consumer < X509Certificate []>> cbArgumentCaptor = ArgumentCaptor .forClass (Consumer .class );
75- verify (mockCertificateManager , times (1 ))
76- .subscribeToClientCertificateUpdates ( any ( String . class ), cbArgumentCaptor .capture ());
77- Consumer < X509Certificate []> certCallback = cbArgumentCaptor .getValue ();
86+ ArgumentCaptor <GetCertificateRequest > cbArgumentCaptor = ArgumentCaptor .forClass (GetCertificateRequest .class );
87+ verify (mockServiceApi , times (1 ))
88+ .subscribeToCertificateUpdates ( cbArgumentCaptor .capture ());
89+ GetCertificateRequest getCertificateRequest = cbArgumentCaptor .getValue ();
7890
7991 KeyStore keyStore = mqttClientKeyStore .getKeyStore ();
8092 assertThat (keyStore .size (), is (0 ));
8193
8294 X509Certificate certificate = pemToX509Certificate (CERTIFICATE );
83- X509Certificate [] chain = {certificate , certificate };
84- certCallback .accept (chain );
95+ CertificateUpdateEvent certificateUpdate =
96+ new CertificateUpdateEvent (keyPair , certificate , new X509Certificate []{certificate });
97+ getCertificateRequest .getCertificateUpdateConsumer ().accept (certificateUpdate );
8598 assertThat (keyStore .size (), is (1 ));
8699
87100 PrivateKey privateKey = (PrivateKey ) keyStore .getKey (KEY_ALIAS , DEFAULT_KEYSTORE_PASSWORD );
@@ -100,7 +113,7 @@ private void verifyStoredCertificate(X509Certificate cert) throws CertificateEnc
100113
101114 @ Test
102115 void GIVEN_MQTTClientKeyStore_WHEN_called_updateCA_THEN_CA_stored () throws Exception {
103- MQTTClientKeyStore mqttClientKeyStore = new MQTTClientKeyStore (mockCertificateManager );
116+ MQTTClientKeyStore mqttClientKeyStore = new MQTTClientKeyStore (mockServiceApi );
104117 mqttClientKeyStore .init ();
105118 CountDownLatch updateLatch = new CountDownLatch (1 );
106119 mqttClientKeyStore .listenToCAUpdates (updateLatch ::countDown );
@@ -120,22 +133,23 @@ void GIVEN_MQTTClientKeyStore_WHEN_called_updateCA_THEN_CA_stored() throws Excep
120133
121134 @ Test
122135 void GIVEN_MQTTClientKeyStore_WHEN_getSSLSocketFactory_THEN_returns_SSLSocketFactory () throws Exception {
123- MQTTClientKeyStore mqttClientKeyStore = new MQTTClientKeyStore (mockCertificateManager );
136+ MQTTClientKeyStore mqttClientKeyStore = new MQTTClientKeyStore (mockServiceApi );
124137 mqttClientKeyStore .init ();
125138 CountDownLatch updateLatch = new CountDownLatch (1 );
126139 mqttClientKeyStore .listenToCAUpdates (updateLatch ::countDown );
127140
128- ArgumentCaptor <Consumer < X509Certificate []>> cbArgumentCaptor = ArgumentCaptor .forClass (Consumer .class );
129- verify (mockCertificateManager , times (1 ))
130- .subscribeToClientCertificateUpdates ( any ( String . class ), cbArgumentCaptor .capture ());
131- Consumer < X509Certificate []> certCallback = cbArgumentCaptor .getValue ();
141+ ArgumentCaptor <GetCertificateRequest > cbArgumentCaptor = ArgumentCaptor .forClass (GetCertificateRequest .class );
142+ verify (mockServiceApi , times (1 ))
143+ .subscribeToCertificateUpdates ( cbArgumentCaptor .capture ());
144+ GetCertificateRequest certificateRequest = cbArgumentCaptor .getValue ();
132145
133146 KeyStore keyStore = mqttClientKeyStore .getKeyStore ();
134147 assertThat (keyStore .size (), is (0 ));
135148
136149 X509Certificate certificate = pemToX509Certificate (CERTIFICATE );
137- X509Certificate [] chain = {certificate , certificate };
138- certCallback .accept (chain );
150+ CertificateUpdateEvent certificateUpdate =
151+ new CertificateUpdateEvent (keyPair , certificate , new X509Certificate []{certificate });
152+ certificateRequest .getCertificateUpdateConsumer ().accept (certificateUpdate );
139153 mqttClientKeyStore .updateCA (Collections .singletonList (CERTIFICATE ));
140154 assertThat (updateLatch .await (100 , TimeUnit .MILLISECONDS ), is (true ));
141155 assertThat (keyStore .size (), is (2 ));
0 commit comments