99import org .mockito .Mockito ;
1010
1111import java .util .List ;
12+ import java .util .Map ;
13+ import java .util .Objects ;
14+ import java .util .stream .Collectors ;
1215
1316import static org .assertj .core .api .AssertionsForClassTypes .assertThat ;
14- import static org .junit .jupiter .api .Assertions .*;
1517
1618class PlannerTest {
1719
@@ -85,4 +87,49 @@ void generatePlanFromProvidedKases() {
8587
8688 assertThat (splitPlan .get (0 ).splitID ).isNotEqualTo (splitPlan .get (1 ).splitID );
8789 }
90+
91+ @ Test
92+ void testFillingInKeysWithAutoConfigure () {
93+ var kas = Mockito .mock (SDK .KAS .class );
94+ Mockito .when (kas .getPublicKey (Mockito .any ())).thenAnswer (invocation -> {
95+ Config .KASInfo kasInfo = invocation .getArgument (0 , Config .KASInfo .class );
96+ var ret = new Config .KASInfo ();
97+ ret .URL = kasInfo .URL ;
98+ assertThat (kasInfo .Algorithm ).isNullOrEmpty ();
99+ if (Objects .equals (kasInfo .URL , "https://kas1.example.com" )) {
100+ ret .PublicKey = "pem1" ;
101+ ret .Algorithm = "rsa:2048" ;
102+ ret .KID = "kid1" ;
103+ } else if (Objects .equals (kasInfo .URL , "https://kas2.example.com" )) {
104+ ret .PublicKey = "pem2" ;
105+ ret .Algorithm = "ec:secp256r1" ;
106+ ret .KID = "kid2" ;
107+ } else {
108+ throw new IllegalArgumentException ("Unexpected KAS URL: " + kasInfo .URL );
109+ }
110+ return ret ;
111+ });
112+ var tdfConfig = new Config .TDFConfig ();
113+ tdfConfig .autoconfigure = true ;
114+ tdfConfig .wrappingKeyType = KeyType .RSA2048Key ;
115+ var planner = new Planner (new Config .TDFConfig (), new FakeServicesBuilder ().setKas (kas ).build ());
116+ var plan = List .of (
117+ new Autoconfigure .KeySplitStep ("https://kas1.example.com" , "split1" , null ),
118+ new Autoconfigure .KeySplitStep ("https://kas2.example.com" , "split2" , "kid2" )
119+ );
120+ Map <String , List <Config .KASInfo >> filledInPlan = planner .resolveKeys (plan );
121+ assertThat (filledInPlan .keySet ().stream ().collect (Collectors .toList ())).asList ().containsExactlyInAnyOrder ("split1" , "split2" );
122+ assertThat (filledInPlan .get ("split1" )).asList ().hasSize (1 );
123+ var split1KasInfo = filledInPlan .get ("split1" ).get (0 );
124+ assertThat (split1KasInfo .URL ).isEqualTo ("https://kas1.example.com" );
125+ assertThat (split1KasInfo .KID ).isEqualTo ("kid1" );
126+ assertThat (split1KasInfo .Algorithm ).isEqualTo ("rsa:2048" );
127+ assertThat (split1KasInfo .PublicKey ).isEqualTo ("pem1" );
128+ assertThat (filledInPlan .get ("split2" )).asList ().hasSize (1 );
129+ var split2KasInfo = filledInPlan .get ("split2" ).get (0 );
130+ assertThat (split2KasInfo .URL ).isEqualTo ("https://kas2.example.com" );
131+ assertThat (split2KasInfo .KID ).isEqualTo ("kid2" );
132+ assertThat (split2KasInfo .Algorithm ).isEqualTo ("ec:secp256r1" );
133+ assertThat (split2KasInfo .PublicKey ).isEqualTo ("pem2" );
134+ }
88135}
0 commit comments