Skip to content

Commit c3c4e73

Browse files
authored
[System Tests] adapted record encryption test cases to CR deployment (kroxylicious#2022)
* adapted record encryption test cases to CR deployment Signed-off-by: Francisco Vila <fvila@redhat.com> * removed commented code Signed-off-by: Francisco Vila <fvila@redhat.com> * fix format Signed-off-by: Francisco Vila <fvila@redhat.com> * removed unused pom dependency Signed-off-by: Francisco Vila <fvila@redhat.com> --------- Signed-off-by: Francisco Vila <fvila@redhat.com>
1 parent f7d07b9 commit c3c4e73

File tree

14 files changed

+203
-332
lines changed

14 files changed

+203
-332
lines changed

kroxylicious-systemtests/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,10 @@
175175
<groupId>io.kroxylicious</groupId>
176176
<artifactId>kroxylicious-kms-provider-fortanix-dsm-test-support</artifactId>
177177
</dependency>
178+
<dependency>
179+
<groupId>io.kroxylicious</groupId>
180+
<artifactId>kroxylicious-record-encryption</artifactId>
181+
</dependency>
178182
<dependency>
179183
<groupId>org.apache.logging.log4j</groupId>
180184
<artifactId>log4j-api</artifactId>
@@ -183,10 +187,6 @@
183187
<groupId>com.fasterxml.jackson.core</groupId>
184188
<artifactId>jackson-annotations</artifactId>
185189
</dependency>
186-
<dependency>
187-
<groupId>com.fasterxml.jackson.dataformat</groupId>
188-
<artifactId>jackson-dataformat-yaml</artifactId>
189-
</dependency>
190190
<dependency>
191191
<groupId>info.schnatterer.moby-names-generator</groupId>
192192
<artifactId>moby-names-generator</artifactId>

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ private Constants() {
2424
public static final String KROXY_DEPLOYMENT_NAME = "kroxylicious-proxy";
2525
public static final String KROXYLICIOUS_PROXY_SIMPLE_NAME = "simple";
2626
public static final String KROXYLICIOUS_INGRESS_CLUSTER_IP = "cluster-ip";
27+
public static final String KROXYLICIOUS_ENCRYPTION_FILTER_NAME = "encryption";
2728

2829
/**
2930
* The service name for kroxylicious. Used for the bootstrap url

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/installation/kroxylicious/Kroxylicious.java

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,20 @@
77
package io.kroxylicious.systemtests.installation.kroxylicious;
88

99
import java.time.Duration;
10+
import java.util.List;
1011

1112
import org.slf4j.Logger;
1213
import org.slf4j.LoggerFactory;
1314

1415
import io.kroxylicious.kms.service.TestKmsFacade;
1516
import io.kroxylicious.systemtests.Constants;
16-
import io.kroxylicious.systemtests.Environment;
1717
import io.kroxylicious.systemtests.k8s.exception.KubeClusterException;
1818
import io.kroxylicious.systemtests.resources.kms.ExperimentalKmsConfig;
1919
import io.kroxylicious.systemtests.resources.manager.ResourceManager;
20-
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousConfigMapTemplates;
21-
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousDeploymentTemplates;
20+
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousFilterTemplates;
2221
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousKafkaClusterRefTemplates;
2322
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousKafkaProxyIngressTemplates;
2423
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousKafkaProxyTemplates;
25-
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousServiceTemplates;
2624
import io.kroxylicious.systemtests.templates.kroxylicious.KroxyliciousVirtualKafkaClusterTemplates;
2725

2826
import static io.kroxylicious.systemtests.k8s.KubeClusterResource.kubeClient;
@@ -34,7 +32,6 @@
3432
public class Kroxylicious {
3533
private static final Logger LOGGER = LoggerFactory.getLogger(Kroxylicious.class);
3634
private final String deploymentNamespace;
37-
private final String containerImage;
3835
private final ResourceManager resourceManager = ResourceManager.getInstance();
3936

4037
/**
@@ -44,22 +41,29 @@ public class Kroxylicious {
4441
*/
4542
public Kroxylicious(String deploymentNamespace) {
4643
this.deploymentNamespace = deploymentNamespace;
47-
String kroxyUrl = Environment.KROXY_IMAGE_REPO + (Environment.KROXY_IMAGE_REPO.endsWith(":") ? "" : ":");
48-
this.containerImage = kroxyUrl + Environment.KROXY_VERSION;
4944
}
5045

51-
private void createRecordEncryptionFilterConfigMap(String clusterName, TestKmsFacade<?, ?, ?> testKmsFacade, ExperimentalKmsConfig experimentalKmsConfig) {
46+
private void createRecordEncryptionFilterConfigMap(TestKmsFacade<?, ?, ?> testKmsFacade, ExperimentalKmsConfig experimentalKmsConfig) {
5247
LOGGER.info("Deploy Kroxylicious config Map with record encryption filter in {} namespace", deploymentNamespace);
53-
resourceManager
54-
.createResourceWithWait(
55-
KroxyliciousConfigMapTemplates.kroxyliciousRecordEncryptionConfig(clusterName, deploymentNamespace, testKmsFacade, experimentalKmsConfig)
56-
.build());
48+
resourceManager.createResourceFromBuilder(
49+
KroxyliciousFilterTemplates.kroxyliciousRecordEncryptionFilter(deploymentNamespace, testKmsFacade, experimentalKmsConfig));
5750
}
5851

59-
private void deployPortPerBrokerPlain(int replicas) {
60-
LOGGER.info("Deploy Kroxylicious in {} namespace", deploymentNamespace);
61-
resourceManager.createResourceWithWait(KroxyliciousDeploymentTemplates.defaultKroxyDeployment(deploymentNamespace, containerImage, replicas).build());
62-
resourceManager.createResourceWithoutWait(KroxyliciousServiceTemplates.defaultKroxyService(deploymentNamespace).build());
52+
/**
53+
* Deploy port identifies node with filters.
54+
*
55+
* @param clusterName the cluster name
56+
* @param filterNames the filter names
57+
*/
58+
public void deployPortIdentifiesNodeWithFilters(String clusterName, List<String> filterNames) {
59+
resourceManager.createResourceFromBuilder(
60+
KroxyliciousKafkaProxyTemplates.defaultKafkaProxyDeployment(deploymentNamespace, Constants.KROXYLICIOUS_PROXY_SIMPLE_NAME),
61+
KroxyliciousKafkaProxyIngressTemplates.defaultKafkaProxyIngressDeployment(deploymentNamespace, Constants.KROXYLICIOUS_INGRESS_CLUSTER_IP,
62+
Constants.KROXYLICIOUS_PROXY_SIMPLE_NAME),
63+
KroxyliciousKafkaClusterRefTemplates.defaultKafkaClusterRefDeployment(deploymentNamespace, clusterName),
64+
KroxyliciousVirtualKafkaClusterTemplates.virtualKafkaClusterWithFilterDeployment(deploymentNamespace, clusterName,
65+
Constants.KROXYLICIOUS_PROXY_SIMPLE_NAME,
66+
clusterName, Constants.KROXYLICIOUS_INGRESS_CLUSTER_IP, filterNames));
6367
}
6468

6569
/**
@@ -79,24 +83,23 @@ public void deployPortIdentifiesNodeWithNoFilters(String clusterName) {
7983
* Deploy port per broker plain with record encryption filter.
8084
*
8185
* @param clusterName the cluster name
82-
* @param replicas the replicas
8386
* @param testKmsFacade the test kms facade
8487
*/
85-
public void deployPortPerBrokerPlainWithRecordEncryptionFilter(String clusterName, int replicas, TestKmsFacade<?, ?, ?> testKmsFacade) {
86-
deployPortPerBrokerPlainWithRecordEncryptionFilter(clusterName, replicas, testKmsFacade, null);
88+
public void deployPortPerBrokerPlainWithRecordEncryptionFilter(String clusterName, TestKmsFacade<?, ?, ?> testKmsFacade) {
89+
deployPortPerBrokerPlainWithRecordEncryptionFilter(clusterName, testKmsFacade, null);
8790
}
8891

8992
/**
9093
* Deploy port per broker plain with record encryption filter.
9194
*
9295
* @param clusterName the cluster name
93-
* @param replicas the replicas
9496
* @param testKmsFacade the test kms facade
97+
* @param experimentalKmsConfig the experimental kms config
9598
*/
96-
public void deployPortPerBrokerPlainWithRecordEncryptionFilter(String clusterName, int replicas, TestKmsFacade<?, ?, ?> testKmsFacade,
99+
public void deployPortPerBrokerPlainWithRecordEncryptionFilter(String clusterName, TestKmsFacade<?, ?, ?> testKmsFacade,
97100
ExperimentalKmsConfig experimentalKmsConfig) {
98-
createRecordEncryptionFilterConfigMap(clusterName, testKmsFacade, experimentalKmsConfig);
99-
deployPortPerBrokerPlain(replicas);
101+
createRecordEncryptionFilterConfigMap(testKmsFacade, experimentalKmsConfig);
102+
deployPortIdentifiesNodeWithFilters(clusterName, List.of(Constants.KROXYLICIOUS_ENCRYPTION_FILTER_NAME));
100103
}
101104

102105
/**

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/resources/manager/ResourceManager.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.kroxylicious.kubernetes.api.v1alpha1.KafkaProxyIngress;
3030
import io.kroxylicious.kubernetes.api.v1alpha1.KafkaService;
3131
import io.kroxylicious.kubernetes.api.v1alpha1.VirtualKafkaCluster;
32+
import io.kroxylicious.kubernetes.filter.api.v1alpha1.KafkaProtocolFilter;
3233
import io.kroxylicious.systemtests.Constants;
3334
import io.kroxylicious.systemtests.enums.ConditionStatus;
3435
import io.kroxylicious.systemtests.k8s.HelmClient;
@@ -117,7 +118,8 @@ public static HelmClient helmClient() {
117118
new KroxyliciousResource<>(KafkaProxy.class),
118119
new KroxyliciousResource<>(KafkaService.class),
119120
new KroxyliciousResource<>(KafkaProxyIngress.class),
120-
new KroxyliciousResource<>(VirtualKafkaCluster.class)
121+
new KroxyliciousResource<>(VirtualKafkaCluster.class),
122+
new KroxyliciousResource<>(KafkaProtocolFilter.class)
121123
};
122124

123125
/**
@@ -153,17 +155,6 @@ public final void createResourceFromBuilder(Builder<? extends HasMetadata>... re
153155
createResource(true, Arrays.stream(resources).map(Builder::build).toList().toArray(new HasMetadata[0]));
154156
}
155157

156-
/**
157-
* Create resource without wait.
158-
*
159-
* @param <T> the type parameter
160-
* @param resources the resources
161-
*/
162-
@SafeVarargs
163-
public final <T extends HasMetadata> void createResourceWithoutWait(T... resources) {
164-
createResource(false, resources);
165-
}
166-
167158
/**
168159
* Create resource with wait.
169160
*

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/resources/operator/KroxyliciousOperatorBundleInstaller.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.junit.jupiter.api.extension.ExtensionContext;
2424
import org.junit.platform.commons.PreconditionViolationException;
2525

26+
import io.fabric8.kubernetes.api.model.LocalObjectReferenceBuilder;
2627
import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition;
2728
import io.fabric8.kubernetes.api.model.apps.Deployment;
2829
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
@@ -139,6 +140,9 @@ private void applyDeploymentFile() {
139140
.withImage(ImageUtils.changeRegistryOrgAndTag(deploymentImage, Environment.KROXY_REGISTRY, Environment.KROXY_ORG, Environment.KROXY_TAG))
140141
.withImagePullPolicy(Constants.PULL_IMAGE_IF_NOT_PRESENT)
141142
.endContainer()
143+
.withImagePullSecrets(new LocalObjectReferenceBuilder()
144+
.withName("regcred")
145+
.build())
142146
.endSpec()
143147
.endTemplate()
144148
.endSpec()

kroxylicious-systemtests/src/main/java/io/kroxylicious/systemtests/templates/kroxylicious/KroxyliciousConfigMapTemplates.java

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -6,110 +6,14 @@
66

77
package io.kroxylicious.systemtests.templates.kroxylicious;
88

9-
import java.io.UncheckedIOException;
10-
11-
import com.fasterxml.jackson.core.JsonProcessingException;
12-
import com.fasterxml.jackson.databind.ObjectMapper;
13-
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
14-
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
15-
16-
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
17-
18-
import io.kroxylicious.kms.service.TestKmsFacade;
19-
import io.kroxylicious.systemtests.Constants;
20-
import io.kroxylicious.systemtests.resources.kms.ExperimentalKmsConfig;
21-
229
/**
2310
* The type Kroxylicious config templates.
2411
*/
2512
public final class KroxyliciousConfigMapTemplates {
26-
private static final YAMLFactory FACTORY = YAMLFactory.builder()
27-
.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)
28-
.build();
29-
private static final ObjectMapper YAML_OBJECT_MAPPER = new ObjectMapper(FACTORY);
3013

3114
private KroxyliciousConfigMapTemplates() {
3215
}
3316

34-
private static ConfigMapBuilder baseKroxyliciousConfig(String namespaceName) {
35-
return new ConfigMapBuilder()
36-
.withApiVersion("v1")
37-
.withKind(Constants.CONFIG_MAP)
38-
.editMetadata()
39-
.withName(Constants.KROXY_CONFIG_NAME)
40-
.withNamespace(namespaceName)
41-
.endMetadata();
42-
}
43-
44-
/**
45-
* Kroxylicious record encryption config.
46-
*
47-
* @param clusterName the cluster name
48-
* @param namespaceName the namespace name
49-
* @param testKmsFacade the test kms facade
50-
* @return the config map builder
51-
*/
52-
public static ConfigMapBuilder kroxyliciousRecordEncryptionConfig(String clusterName, String namespaceName, TestKmsFacade<?, ?, ?> testKmsFacade,
53-
ExperimentalKmsConfig experimentalKmsConfig) {
54-
return baseKroxyliciousConfig(namespaceName)
55-
.addToData("config.yaml", getRecordEncryptionConfigMap(clusterName, testKmsFacade, experimentalKmsConfig));
56-
}
57-
58-
private static String buildEncryptionFilter(TestKmsFacade<?, ?, ?> testKmsFacade, ExperimentalKmsConfig experimentalKmsConfig) {
59-
return """
60-
- name: encrypt
61-
type: RecordEncryption
62-
config:
63-
kms: %s
64-
kmsConfig:
65-
%s
66-
selector: TemplateKekSelector
67-
selectorConfig:
68-
template: "KEK_$(topicName)"
69-
experimental:
70-
%s
71-
""".formatted(testKmsFacade.getKmsServiceClass().getSimpleName(), getNestedYaml(testKmsFacade.getKmsServiceConfig(), 6),
72-
getNestedYaml(experimentalKmsConfig, 6));
73-
}
74-
75-
private static String getNestedYaml(Object config, int indent) {
76-
String configYaml;
77-
78-
try {
79-
configYaml = YAML_OBJECT_MAPPER.writeValueAsString(config).indent(indent).trim();
80-
}
81-
catch (JsonProcessingException e) {
82-
throw new UncheckedIOException(e);
83-
}
84-
85-
return configYaml;
86-
}
87-
88-
private static String getRecordEncryptionConfigMap(String clusterName, TestKmsFacade<?, ?, ?> testKmsFacade, ExperimentalKmsConfig experimentalKmsConfig) {
89-
String configYaml = buildEncryptionFilter(testKmsFacade, experimentalKmsConfig);
90-
91-
return """
92-
management:
93-
endpoints:
94-
prometheus: {}
95-
virtualClusters:
96-
- name: my-cluster-proxy
97-
gateways:
98-
- name: default
99-
portIdentifiesNode:
100-
bootstrapAddress: localhost:9292
101-
advertisedBrokerAddressPattern: %s
102-
targetCluster:
103-
bootstrapServers: %s-kafka-bootstrap.%s.svc.cluster.local:9092
104-
logFrames: false
105-
filterDefinitions:
106-
%s
107-
defaultFilters:
108-
- encrypt
109-
"""
110-
.formatted(Constants.KROXY_SERVICE_NAME, clusterName, Constants.KAFKA_DEFAULT_NAMESPACE, configYaml);
111-
}
112-
11317
/**
11418
* Gets default external kroxylicious config map.
11519
*

0 commit comments

Comments
 (0)