Skip to content

Commit 7f5a2d4

Browse files
committed
more tests
1 parent 95232ad commit 7f5a2d4

3 files changed

Lines changed: 77 additions & 23 deletions

File tree

sdk/src/main/java/io/opentdf/platform/sdk/Planner.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ public class Planner {
2828
private static final String BASE_KEY = "base_key";
2929
private final Config.TDFConfig tdfConfig;
3030
private final SDK.Services services;
31+
private final BiFunction<SDK.Services, Config.TDFConfig, Autoconfigure.Granter> granterFactory;
3132

3233

3334
private static final Logger logger = LoggerFactory.getLogger(Planner.class);
3435

3536
public Planner(Config.TDFConfig config, SDK.Services services, BiFunction<SDK.Services, Config.TDFConfig, Autoconfigure.Granter> granterFactory) {
3637
this.tdfConfig = Objects.requireNonNull(config);
3738
this.services = Objects.requireNonNull(services);
39+
this.granterFactory = granterFactory;
3840
}
3941

4042
private static String getUUID() {
@@ -60,8 +62,8 @@ Map<String, List<Config.KASInfo>> getSplits(Config.TDFConfig tdfConfig) {
6062
return resolveKeys(splitPlan);
6163
}
6264

63-
private static List<Autoconfigure.KeySplitStep> getAutoconfigurePlan(SDK.Services services, Config.TDFConfig tdfConfig) {
64-
Autoconfigure.Granter granter = Autoconfigure.createGranter(services, tdfConfig);
65+
private List<Autoconfigure.KeySplitStep> getAutoconfigurePlan(SDK.Services services, Config.TDFConfig tdfConfig) {
66+
Autoconfigure.Granter granter = granterFactory.apply(services, tdfConfig);
6567
return granter.getSplits(defaultKases(tdfConfig), Planner::getUUID, () -> Planner.fetchBaseKey(services.wellknown()));
6668
}
6769

sdk/src/test/java/io/opentdf/platform/sdk/AutoconfigureTest.java

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import static org.junit.jupiter.api.Assertions.assertEquals;
77
import static org.junit.jupiter.api.Assertions.assertNotNull;
88
import static org.mockito.ArgumentMatchers.any;
9-
import static org.mockito.ArgumentMatchers.isA;
109
import static org.mockito.Mockito.mock;
1110
import static org.mockito.Mockito.never;
1211
import static org.mockito.Mockito.verify;
@@ -35,10 +34,8 @@
3534
import io.opentdf.platform.sdk.Autoconfigure.KeySplitStep;
3635
import io.opentdf.platform.sdk.Autoconfigure.Granter;
3736

38-
import org.assertj.core.api.AtomicIntegerArrayAssert;
3937
import org.junit.jupiter.api.BeforeAll;
4038
import org.junit.jupiter.api.Test;
41-
import org.junit.platform.commons.JUnitException;
4239
import org.mockito.Mockito;
4340

4441
import java.util.ArrayList;
@@ -49,6 +46,7 @@
4946
import java.util.Optional;
5047
import java.util.Set;
5148
import java.util.concurrent.atomic.AtomicInteger;
49+
import java.util.function.BiFunction;
5250
import java.util.function.Supplier;
5351
import java.util.stream.Collectors;
5452
import java.util.regex.Matcher;
@@ -1071,9 +1069,6 @@ void createsGranterFromService() {
10711069
new AttributeValueFQN("https://other.com/attr/specified/value/specked"),
10721070
new AttributeValueFQN("https://virtru.com/attr/Releasable%20To/value/GBR")
10731071
);
1074-
// GetAttributeValuesByFqnsRequest request = GetAttributeValuesByFqnsRequest.newBuilder()
1075-
// .addAllFqns(policy.stream().map(AttributeValueFQN::toString).collect(Collectors.toList()))
1076-
// .build();
10771072

10781073
when(services.kas()).thenReturn(kas);
10791074
when(services.attributes()).thenReturn(attributesServiceClient);
@@ -1115,4 +1110,47 @@ public void cancel() {
11151110
// If you want to check the service call, verify it:
11161111
verify(services).attributes();
11171112
}
1113+
1114+
@Test
1115+
void getSplits_usesAutoconfigurePlan_whenAutoconfigureTrue() {
1116+
var tdfConfig = new Config.TDFConfig();
1117+
tdfConfig.autoconfigure = true;
1118+
tdfConfig.kasInfoList = new ArrayList<>();
1119+
tdfConfig.splitPlan = null;
1120+
1121+
var kas = Mockito.mock(SDK.KAS.class);
1122+
Mockito.when(kas.getKeyCache()).thenReturn(new KASKeyCache());
1123+
Config.KASInfo kasInfo = new Config.KASInfo() {{
1124+
URL = "https://kas.example.com";
1125+
Algorithm = "ec:secp256r1";
1126+
KID = "kid";
1127+
}};
1128+
Mockito.when(kas.getPublicKey(any())).thenReturn(kasInfo);
1129+
1130+
var services = new FakeServicesBuilder().setKas(kas).build();
1131+
1132+
// Mock granterFactory to return a granter with a known split plan
1133+
var expectedSplit = new Autoconfigure.KeySplitStep("https://kas.example.com", "", "kid");
1134+
var granter = Mockito.mock(Autoconfigure.Granter.class);
1135+
Mockito.when(granter.getSplits(
1136+
Mockito.anyList(),
1137+
Mockito.any(),
1138+
Mockito.any()))
1139+
.thenReturn(List.of(expectedSplit));
1140+
1141+
BiFunction<SDK.Services, Config.TDFConfig, Granter> granterFactory =
1142+
(s, c) -> granter;
1143+
1144+
var planner = new Planner(tdfConfig, services, granterFactory);
1145+
1146+
// Act
1147+
var splits = planner.getSplits(tdfConfig);
1148+
1149+
// Assert
1150+
assertThat(splits).containsKey("");
1151+
assertThat(splits.get("")).hasSize(1);
1152+
assertThat(splits.get("").get(0).URL).isEqualTo("https://kas.example.com");
1153+
assertThat(splits.get("").get(0).KID).isEqualTo("kid");
1154+
assertThat(splits.get("").get(0).Algorithm).isEqualTo("ec:secp256r1");
1155+
}
11181156
}

sdk/src/test/java/io/opentdf/platform/sdk/PlannerTest.java

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.protobuf.Struct;
44
import com.google.protobuf.Value;
55
import io.opentdf.platform.policy.Algorithm;
6+
import io.opentdf.platform.policy.PublicKey;
67
import io.opentdf.platform.wellknownconfiguration.GetWellKnownConfigurationResponse;
78
import io.opentdf.platform.wellknownconfiguration.WellKnownServiceClientInterface;
89
import org.assertj.core.api.Assertions;
@@ -132,29 +133,42 @@ void testFillingInKeysWithAutoConfigure() {
132133
var tdfConfig = new Config.TDFConfig();
133134
tdfConfig.autoconfigure = true;
134135
tdfConfig.wrappingKeyType = KeyType.RSA2048Key;
135-
var planner = new Planner(new Config.TDFConfig(), new FakeServicesBuilder().setKas(kas).build(), (ignore1, ignored2) -> { throw new IllegalArgumentException("no granter needed"); });
136+
tdfConfig.kasInfoList = List.of(
137+
new Config.KASInfo() {{
138+
URL = "https://kas4.example.com";
139+
KID = "kid4";
140+
Algorithm = "ec:secp384r1";
141+
PublicKey = "pem4";
142+
}}
143+
);
144+
var planner = new Planner(tdfConfig, new FakeServicesBuilder().setKas(kas).build(), (ignore1, ignored2) -> { throw new IllegalArgumentException("no granter needed"); });
136145
var plan = List.of(
137146
new Autoconfigure.KeySplitStep("https://kas1.example.com", "split1", null),
147+
new Autoconfigure.KeySplitStep("https://kas4.example.com", "split1", "kid4"),
138148
new Autoconfigure.KeySplitStep("https://kas2.example.com", "split2", "kid2"),
139149
new Autoconfigure.KeySplitStep("https://kas3.example.com", "split2", "kid3")
140150
);
141151
Map<String, List<Config.KASInfo>> filledInPlan = planner.resolveKeys(plan);
142152
assertThat(filledInPlan.keySet().stream().collect(Collectors.toList())).asList().containsExactlyInAnyOrder("split1", "split2");
143-
assertThat(filledInPlan.get("split1")).asList().hasSize(1);
144-
var split1KasInfo = filledInPlan.get("split1").get(0);
145-
assertThat(split1KasInfo.URL).isEqualTo("https://kas1.example.com");
146-
assertThat(split1KasInfo.KID).isEqualTo("kid1");
147-
assertThat(split1KasInfo.Algorithm).isEqualTo("rsa:2048");
148-
assertThat(split1KasInfo.PublicKey).isEqualTo("pem1");
153+
assertThat(filledInPlan.get("split1")).asList().hasSize(2);
154+
var kasInfo1 = filledInPlan.get("split1").stream().filter(k -> "kid1".equals(k.KID)).findFirst().get();
155+
assertThat(kasInfo1.URL).isEqualTo("https://kas1.example.com");
156+
assertThat(kasInfo1.Algorithm).isEqualTo("rsa:2048");
157+
assertThat(kasInfo1.PublicKey).isEqualTo("pem1");
158+
var kasInfo4 = filledInPlan.get("split1").stream().filter(k -> "kid4".equals(k.KID)).findFirst().get();
159+
assertThat(kasInfo4.URL).isEqualTo("https://kas4.example.com");
160+
assertThat(kasInfo4.Algorithm).isEqualTo("ec:secp384r1");
161+
assertThat(kasInfo4.PublicKey).isEqualTo("pem4");
162+
149163
assertThat(filledInPlan.get("split2")).asList().hasSize(2);
150-
var split2KasInfo = filledInPlan.get("split2").stream().filter(kasInfo -> "kid2".equals(kasInfo.KID)).findFirst().get();
151-
assertThat(split2KasInfo.URL).isEqualTo("https://kas2.example.com");
152-
assertThat(split2KasInfo.Algorithm).isEqualTo("ec:secp256r1");
153-
assertThat(split2KasInfo.PublicKey).isEqualTo("pem2");
154-
var split3KasInfo = filledInPlan.get("split2").stream().filter(kasInfo -> "kid3".equals(kasInfo.KID)).findFirst().get();
155-
assertThat(split3KasInfo.URL).isEqualTo("https://kas3.example.com");
156-
assertThat(split3KasInfo.Algorithm).isEqualTo("rsa:4096");
157-
assertThat(split3KasInfo.PublicKey).isEqualTo("pem3");
164+
var kasInfo2 = filledInPlan.get("split2").stream().filter(kasInfo -> "kid2".equals(kasInfo.KID)).findFirst().get();
165+
assertThat(kasInfo2.URL).isEqualTo("https://kas2.example.com");
166+
assertThat(kasInfo2.Algorithm).isEqualTo("ec:secp256r1");
167+
assertThat(kasInfo2.PublicKey).isEqualTo("pem2");
168+
var kasInfo3 = filledInPlan.get("split2").stream().filter(kasInfo -> "kid3".equals(kasInfo.KID)).findFirst().get();
169+
assertThat(kasInfo3.URL).isEqualTo("https://kas3.example.com");
170+
assertThat(kasInfo3.Algorithm).isEqualTo("rsa:4096");
171+
assertThat(kasInfo3.PublicKey).isEqualTo("pem3");
158172
}
159173

160174
@Test

0 commit comments

Comments
 (0)