Skip to content

Commit 8a1cdae

Browse files
committed
fixes
1 parent 2553b48 commit 8a1cdae

File tree

5 files changed

+38
-20
lines changed

5 files changed

+38
-20
lines changed

api/src/main/java/io/kafbat/ui/exception/GlobalErrorWebExceptionHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ private String extractFieldErrorMsg(FieldError fieldError) {
161161
return coalesce(fieldError.getDefaultMessage(), fieldError.getCode(), "Invalid field value");
162162
}
163163

164+
@SafeVarargs
164165
private <T> T coalesce(T... items) {
165166
return Stream.of(items).filter(Objects::nonNull).findFirst().orElse(null);
166167
}

api/src/main/java/io/kafbat/ui/mapper/DynamicConfigMapper.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55
import io.kafbat.ui.model.ApplicationConfigPropertiesAuthOauth2ResourceServerJwtDTO;
66
import io.kafbat.ui.model.ApplicationConfigPropertiesAuthOauth2ResourceServerOpaquetokenDTO;
77
import io.kafbat.ui.model.ApplicationConfigPropertiesDTO;
8+
import io.kafbat.ui.model.ApplicationConfigPropertiesRbacRolesInnerPermissionsInnerDTO;
9+
import io.kafbat.ui.model.rbac.Permission;
810
import io.kafbat.ui.util.DynamicConfigOperations;
911
import java.util.Optional;
1012
import org.mapstruct.Mapper;
11-
import org.mapstruct.Mapping;
1213
import org.springframework.boot.autoconfigure.security.oauth2.resource.OAuth2ResourceServerProperties;
1314
import org.springframework.core.io.FileSystemResource;
1415
import org.springframework.core.io.Resource;
1516

1617
@Mapper(componentModel = "spring")
1718
public interface DynamicConfigMapper {
1819

19-
@Mapping(target = "rbac.roles[].permissions[].parsedActions", ignore = true)
2020
DynamicConfigOperations.PropertiesStructure fromDto(ApplicationConfigPropertiesDTO dto);
2121

2222
ApplicationConfigPropertiesDTO toDto(DynamicConfigOperations.PropertiesStructure propertiesStructure);
@@ -25,6 +25,14 @@ default String map(Resource resource) {
2525
return resource.getFilename();
2626
}
2727

28+
default Permission map(ApplicationConfigPropertiesRbacRolesInnerPermissionsInnerDTO perm) {
29+
Permission permission = new Permission();
30+
permission.setResource(perm.getResource().getValue());
31+
permission.setActions(perm.getActions().stream().map(ActionDTO::getValue).toList());
32+
permission.setValue(perm.getValue());
33+
return permission;
34+
}
35+
2836
default OAuth2ResourceServerProperties map(ApplicationConfigPropertiesAuthOauth2ResourceServerDTO value) {
2937
if (value != null) {
3038
OAuth2ResourceServerProperties result = new OAuth2ResourceServerProperties();

api/src/main/java/io/kafbat/ui/util/DynamicConfigOperations.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,15 @@ protected NodeTuple representJavaBeanProperty(Object javaBean,
206206
representer.setPropertyUtils(propertyUtils);
207207
representer.addClassTag(PropertiesStructure.class, Tag.MAP); //to avoid adding class tag
208208
representer.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); //use indent instead of {}
209-
return new Yaml(
210-
new Constructor(new LoaderOptions()),
211-
representer,
212-
new DumperOptions()
213-
).dump(props);
209+
210+
DumperOptions dumperOptions = new DumperOptions();
211+
dumperOptions.setDefaultFlowStyle(representer.getDefaultFlowStyle());
212+
dumperOptions.setDefaultScalarStyle(representer.getDefaultScalarStyle());
213+
dumperOptions
214+
.setAllowReadOnlyProperties(representer.getPropertyUtils().isAllowReadOnlyProperties());
215+
dumperOptions.setTimeZone(representer.getTimeZone());
216+
217+
return new Yaml(representer, dumperOptions).dump(props);
214218
}
215219

216220
///---------------------------------------------------------------------

api/src/test/java/io/kafbat/ui/service/quota/ClientQuotaServiceTest.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package io.kafbat.ui.service.quota;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.awaitility.Awaitility.await;
45

56
import io.kafbat.ui.AbstractIntegrationTest;
67
import io.kafbat.ui.model.KafkaCluster;
78
import io.kafbat.ui.service.ClustersStorage;
89
import java.util.Map;
9-
import java.util.Objects;
10+
import java.util.concurrent.TimeUnit;
11+
import java.util.function.Consumer;
12+
import org.assertj.core.api.ListAssert;
1013
import org.junit.jupiter.api.BeforeEach;
1114
import org.junit.jupiter.params.ParameterizedTest;
1215
import org.junit.jupiter.params.provider.CsvSource;
@@ -48,8 +51,9 @@ void createUpdateDelete(String user, String clientId, String ip) {
4851
.assertNext(status -> assertThat(status.value()).isEqualTo(201))
4952
.verifyComplete();
5053

51-
assertThat(quotaRecordExists(new ClientQuotaRecord(user, clientId, ip, initialQuotas)))
52-
.isTrue();
54+
awaitAndVerify((l) ->
55+
l.contains(new ClientQuotaRecord(user, clientId, ip, initialQuotas))
56+
);
5357

5458
//updating
5559
StepVerifier.create(
@@ -58,8 +62,9 @@ void createUpdateDelete(String user, String clientId, String ip) {
5862
.assertNext(status -> assertThat(status.value()).isEqualTo(200))
5963
.verifyComplete();
6064

61-
assertThat(quotaRecordExists(new ClientQuotaRecord(user, clientId, ip, Map.of("producer_byte_rate", 22222.0))))
62-
.isTrue();
65+
awaitAndVerify((l) ->
66+
l.contains(new ClientQuotaRecord(user, clientId, ip, Map.of("producer_byte_rate", 22222.0)))
67+
);
6368

6469
//deleting created record
6570
StepVerifier.create(
@@ -68,12 +73,16 @@ void createUpdateDelete(String user, String clientId, String ip) {
6873
.assertNext(status -> assertThat(status.value()).isEqualTo(204))
6974
.verifyComplete();
7075

71-
assertThat(quotaRecordExists(new ClientQuotaRecord(user, clientId, ip, Map.of("producer_byte_rate", 22222.0))))
72-
.isFalse();
76+
awaitAndVerify((l) ->
77+
l.doesNotContain(new ClientQuotaRecord(user, clientId, ip, Map.of("producer_byte_rate", 22222.0)))
78+
);
7379
}
7480

75-
private boolean quotaRecordExists(ClientQuotaRecord rec) {
76-
return Objects.requireNonNull(quotaService.getAll(cluster).collectList().block()).contains(rec);
81+
private void awaitAndVerify(Consumer<ListAssert<ClientQuotaRecord>> verifier) {
82+
await()
83+
.atMost(5, TimeUnit.SECONDS)
84+
.pollInterval(200, TimeUnit.MILLISECONDS)
85+
.untilAsserted(() -> verifier.accept(assertThat(quotaService.getAll(cluster).collectList().block())));
7786
}
7887

7988
}

contract/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ plugins {
99
def specDir = project.layout.projectDirectory.dir("src/main/resources/swagger/")
1010
def targetDir = project.layout.buildDirectory.dir("generated").get()
1111

12-
tasks.withType(JavaCompile).configureEach {
13-
options.compilerArgs << "-Xlint:deprecation" << "-Xlint:unchecked"
14-
}
15-
1612
dependencies {
1713
implementation libs.spring.starter.webflux
1814
implementation libs.spring.starter.validation

0 commit comments

Comments
 (0)