@@ -241,61 +241,81 @@ void testRefreshFromCalculation(int lastRotationDaysAgo, int refreshFromDaysFrom
241241 }
242242
243243 @ Test
244- void rotateSaltsPopulatePreviousSalt () throws Exception {
244+ void rotateSaltsPopulatePreviousSaltsOnRotation () throws Exception {
245245 final Duration [] minAges = {
246- Duration .ofDays (5 ),
246+ Duration .ofDays (90 ),
247+ Duration .ofDays (60 ),
248+ Duration .ofDays (30 )
247249 };
248250
249- final long validForRotation = daysEarlier (8 ).toEpochMilli ();
250- final Instant notValidForRotation = daysEarlier (2 );
251- final RotatingSaltProvider .SaltSnapshot lastSnapshot = SnapshotBuilder .start ()
251+ var lessThan90Days = daysEarlier (60 ).toEpochMilli ();
252+ var exactly90Days = daysEarlier (90 ).toEpochMilli ();
253+ var over90Days = daysEarlier (120 ).toEpochMilli ();
254+ var lastSnapshot = SnapshotBuilder .start ()
252255 .withEntries (
253- new SaltEntry (1 , "1" , validForRotation , "salt1" , null , null , null , null ),
254- new SaltEntry (2 , "2" , validForRotation , "salt2" , null , null , null , null ),
255- new SaltEntry (3 , "3" , validForRotation , "salt3" , null , null , null , null )
256+ new SaltEntry (1 , "1" , lessThan90Days , "salt1" , null , null , null , null ),
257+ new SaltEntry (3 , "2" , exactly90Days , "salt2" , null , null , null , null ),
258+ new SaltEntry (5 , "3" , over90Days , "salt3" , null , null , null , null )
256259 )
257- .withEntries (7 , notValidForRotation )
258260 .build (daysEarlier (1 ), daysLater (6 ));
259261
260- final SaltRotation . Result result = saltRotation .rotateSalts (lastSnapshot , minAges , 0.3 , targetDate );
262+ var result = saltRotation .rotateSalts (lastSnapshot , minAges , 1 , targetDate );
261263 assertTrue (result .hasSnapshot ());
262- assertEquals ("salt1" , result .getSnapshot ().getAllRotatingSalts ()[0 ].previousSalt ());
263- assertEquals ("salt2" , result .getSnapshot ().getAllRotatingSalts ()[1 ].previousSalt ());
264- assertEquals ("salt3" , result .getSnapshot ().getAllRotatingSalts ()[2 ].previousSalt ());
265- assertEquals (7 , Arrays .stream (result .getSnapshot ().getAllRotatingSalts ()).filter (s -> s .previousSalt () == null ).count ());
266264
267- verify (keyGenerator , times (3 )).generateRandomKeyString (anyInt ());
265+ var salts = result .getSnapshot ().getAllRotatingSalts ();
266+ assertEquals ("salt1" , salts [0 ].previousSalt ());
267+ assertEquals ("salt2" , salts [1 ].previousSalt ());
268+ assertEquals ("salt3" , salts [2 ].previousSalt ());
268269 }
269270
270271 @ Test
271- void rotateSaltsRemovePreviousSaltIfOver90DaysOld () throws Exception {
272+ void rotateSaltsPreservePreviousSaltsLessThan90DaysOld () throws Exception {
272273 final Duration [] minAges = {
273- Duration .ofDays (90 ),
274274 Duration .ofDays (60 ),
275- Duration .ofDays (40 ),
276275 };
277276
278- final long lessThan90Days = daysEarlier (50 ).toEpochMilli ();
279- final long is90DaysOld = daysEarlier (90 ).toEpochMilli ();
280- final long over90Days = daysEarlier (100 ). toEpochMilli ( );
281- final RotatingSaltProvider . SaltSnapshot lastSnapshot = SnapshotBuilder .start ()
277+ var notValidForRotation1 = daysEarlier (40 ).toEpochMilli ();
278+ var notValidForRotation2 = daysEarlier (50 ).toEpochMilli ();
279+ var validForRotation = daysEarlier (70 );
280+ var lastSnapshot = SnapshotBuilder .start ()
282281 .withEntries (
283- new SaltEntry (1 , "1" , lessThan90Days , "currentSalt" , null , "lessThan90DaysOld" , null , null ),
284- new SaltEntry (2 , "2" , lessThan90Days , "currentSalt" , null , "lessThan90DaysOld" , null , null ),
285- new SaltEntry (3 , "3" , is90DaysOld , "currentSalt" , null , "90DaysOld" , null , null ),
286- new SaltEntry (4 , "4" , is90DaysOld , "currentSalt" , null , "90DaysOld" , null , null ),
287- new SaltEntry (5 , "5" , over90Days , "currentSalt" , null , null , null , null ),
288- new SaltEntry (6 , "6" , over90Days , "currentSalt" , null , null , null , null )
282+ new SaltEntry (1 , "1" , notValidForRotation1 , "salt1" , null , "previousSalt1" , null , null ),
283+ new SaltEntry (2 , "2" , notValidForRotation2 , "salt2" , null , null , null , null )
289284 )
285+ .withEntries (1 , validForRotation )
290286 .build (daysEarlier (1 ), daysLater (6 ));
291287
292- final SaltRotation . Result result = saltRotation .rotateSalts (lastSnapshot , minAges , 0.5 , targetDate );
288+ var result = saltRotation .rotateSalts (lastSnapshot , minAges , 1 , targetDate );
293289 assertTrue (result .hasSnapshot ());
294- assertEquals (2 , Arrays .stream (result .getSnapshot ().getAllRotatingSalts ()).filter (s -> "lessThan90DaysOld" .equals (s .previousSalt ())).count ());
295- assertEquals (1 , Arrays .stream (result .getSnapshot ().getAllRotatingSalts ()).filter (s -> s .previousSalt () == null ).count ());
296- assertEquals (3 , Arrays .stream (result .getSnapshot ().getAllRotatingSalts ()).filter (s -> "currentSalt" .equals (s .previousSalt ())).count ());
297290
298- verify (keyGenerator , times (3 )).generateRandomKeyString (anyInt ());
291+ var salts = result .getSnapshot ().getAllRotatingSalts ();
292+ assertEquals ("previousSalt1" , salts [0 ].previousSalt ());
293+ assertNull (salts [1 ].previousSalt ());
294+ }
295+
296+ @ Test
297+ void rotateSaltsRemovePreviousSaltsOver90DaysOld () throws Exception {
298+ final Duration [] minAges = {
299+ Duration .ofDays (100 ),
300+ };
301+
302+ var exactly90Days = daysEarlier (90 ).toEpochMilli ();
303+ var over90Days = daysEarlier (100 ).toEpochMilli ();
304+ var validForRotation = daysEarlier (120 );
305+ var lastSnapshot = SnapshotBuilder .start ()
306+ .withEntries (
307+ new SaltEntry (1 , "1" , exactly90Days , "salt1" , null , "90DaysOld" , null , null ),
308+ new SaltEntry (2 , "2" , over90Days , "salt2" , null , "over90DaysOld" , null , null )
309+ )
310+ .withEntries (1 , validForRotation )
311+ .build (daysEarlier (1 ), daysLater (6 ));
312+
313+ var result = saltRotation .rotateSalts (lastSnapshot , minAges , 0.5 , targetDate );
314+ assertTrue (result .hasSnapshot ());
315+
316+ var salts = result .getSnapshot ().getAllRotatingSalts ();
317+ assertNull (salts [0 ].previousSalt ());
318+ assertNull (salts [1 ].previousSalt ());
299319 }
300320
301321}
0 commit comments