1010import com .uid2 .admin .vertx .service .CloudEncryptionKeyService ;
1111import com .uid2 .admin .vertx .service .IService ;
1212import com .uid2 .admin .vertx .test .ServiceTestBase ;
13+ import com .uid2 .shared .auth .OperatorKey ;
1314import com .uid2 .shared .auth .Role ;
1415import com .uid2 .shared .model .CloudEncryptionKey ;
15- import com .uid2 .shared .model .Site ;
1616import com .uid2 .shared .util .Mapper ;
1717import io .vertx .core .Vertx ;
1818import io .vertx .core .buffer .Buffer ;
2424import java .util .Map ;
2525
2626import static org .junit .jupiter .api .Assertions .*;
27- import static org .mockito .Mockito .verify ;
28- import static org .mockito .Mockito .when ;
27+ import static org .mockito .Mockito .*;
2928
3029public class CloudEncryptionKeyServiceTest extends ServiceTestBase {
3130 private static final ObjectMapper OBJECT_MAPPER = Mapper .getInstance ();
@@ -38,12 +37,12 @@ public class CloudEncryptionKeyServiceTest extends ServiceTestBase {
3837 private final int keyId2 = 2 ;
3938 private final int keyId3 = 3 ;
4039 private final int keyId4 = 4 ;
41- private final String siteName1 = "Site 1" ;
42- private final Site site1 = new Site (siteId1 , siteName1 , true );
40+ private final OperatorKey operator1 = testOperatorKey ( siteId1 , "one" ) ;
41+ private final OperatorKey operator2 = testOperatorKey (siteId1 , "two" );
4342 private final String secret1 = "secret 1" ;
4443 private final String secret2 = "secret 2" ;
4544 private final String secret3 = "secret 3" ;
46- private final String secret4 = "secret4 " ;
45+ private final String secret4 = "secret 4 " ;
4746
4847 @ Override
4948 protected IService createService () {
@@ -54,7 +53,7 @@ protected IService createService() {
5453 auth ,
5554 cloudEncryptionKeyProvider ,
5655 cloudEncryptionKeyStoreWriter ,
57- siteProvider ,
56+ operatorKeyProvider ,
5857 rotationStrategy
5958 );
6059 }
@@ -127,30 +126,27 @@ public void testRotate_canBeRotatedBySecretRotationJob(Vertx vertx, VertxTestCon
127126 }
128127
129128 @ Test
130- public void testRotate_noSitesDoesNothing (Vertx vertx , VertxTestContext testContext ) {
129+ public void testRotate_noOperatorsNoKeys (Vertx vertx , VertxTestContext testContext ) {
131130 fakeAuth (Role .MAINTAINER );
132131
133132 setCloudEncryptionKeys ();
134- setSites ();
133+ setOperatorKeys ();
135134
136135 post (vertx , testContext , Endpoints .CLOUD_ENCRYPTION_KEY_ROTATE , null , rotateResponse -> {
137136 assertEquals (200 , rotateResponse .statusCode ());
138137
139- get (vertx , testContext , Endpoints .CLOUD_ENCRYPTION_KEY_LIST , listResponse -> {
140- assertEquals (200 , listResponse .statusCode ());
141- assertEquals (noKeys , parseKeyListResponse (listResponse ));
138+ verify (cloudEncryptionKeyStoreWriter ).upload (Map .of (), null );
142139
143- testContext .completeNow ();
144- });
140+ testContext .completeNow ();
145141 });
146142 }
147143
148144 @ Test
149- public void testRotate_forSiteWithNoKeysCreatesKey (Vertx vertx , VertxTestContext testContext ) {
145+ public void testRotate_forOperatorSiteWithNoKeysCreatesKey (Vertx vertx , VertxTestContext testContext ) {
150146 fakeAuth (Role .MAINTAINER );
151147
152148 setCloudEncryptionKeys ();
153- setSites ( site1 );
149+ setOperatorKeys ( operator1 );
154150 when (cloudSecretGenerator .generate ()).thenReturn (secret1 );
155151 when (clock .getEpochSecond ()).thenReturn (now );
156152
@@ -166,7 +162,26 @@ siteId1, new CloudEncryptionKey(keyId1, siteId1, now, now, secret1)
166162 }
167163
168164 @ Test
169- public void testRotate_forSiteWithKeyCreatesNewActiveKey (Vertx vertx , VertxTestContext testContext ) {
165+ public void testRotate_CreatesOneKeyWhenThereAreMultipleOperatorsPerSite (Vertx vertx , VertxTestContext testContext ) {
166+ fakeAuth (Role .MAINTAINER );
167+
168+ setCloudEncryptionKeys ();
169+ setOperatorKeys (operator1 , operator2 );
170+
171+ post (vertx , testContext , Endpoints .CLOUD_ENCRYPTION_KEY_ROTATE , null , rotateResponse -> {
172+ assertEquals (200 , rotateResponse .statusCode ());
173+
174+ get (vertx , testContext , Endpoints .CLOUD_ENCRYPTION_KEY_LIST , listResponse -> {
175+ assertEquals (200 , listResponse .statusCode ());
176+ assertEquals (noKeys , parseKeyListResponse (listResponse ));
177+
178+ testContext .completeNow ();
179+ });
180+ });
181+ }
182+
183+ @ Test
184+ public void testRotate_forOperatorSiteWithKeyCreatesNewActiveKey (Vertx vertx , VertxTestContext testContext ) {
170185 fakeAuth (Role .MAINTAINER );
171186
172187 var existingKey1 = new CloudEncryptionKey (keyId1 , siteId1 , before , before , secret1 );
@@ -181,7 +196,7 @@ keyId4, new CloudEncryptionKey(4, siteId1, now, now, secret4)
181196 );
182197
183198 setCloudEncryptionKeys (existingKey1 , existingKey2 , existingKey3 );
184- setSites ( site1 );
199+ setOperatorKeys ( operator1 );
185200 when (cloudSecretGenerator .generate ()).thenReturn (secret4 );
186201 when (clock .getEpochSecond ()).thenReturn (now );
187202
@@ -205,7 +220,7 @@ key2Id, new CloudEncryptionKey(key2Id, siteId1, now, now, secret2)
205220 );
206221
207222 setCloudEncryptionKeys (existingKey );
208- setSites ( site1 );
223+ setOperatorKeys ( operator1 );
209224 when (cloudSecretGenerator .generate ()).thenReturn (secret2 );
210225 when (clock .getEpochSecond ()).thenReturn (now );
211226
@@ -220,4 +235,18 @@ private static CloudEncryptionKeyListResponse parseKeyListResponse(HttpResponse<
220235 return OBJECT_MAPPER .readValue (response .bodyAsString (), new TypeReference <>() {
221236 });
222237 }
238+
239+ private static OperatorKey testOperatorKey (int siteId , String keyId ) {
240+ return new OperatorKey (
241+ "hash " + keyId ,
242+ "key salt " + keyId ,
243+ "name " + keyId ,
244+ "contact " + keyId ,
245+ "protocol " + keyId ,
246+ 0 ,
247+ false ,
248+ siteId ,
249+ keyId
250+ );
251+ }
223252}
0 commit comments