Skip to content

Commit

Permalink
fix: clone configuration instead of creating a new one
Browse files Browse the repository at this point in the history
  • Loading branch information
jgiovaresco committed Jan 8, 2024
1 parent d555303 commit 80b3989
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 7 deletions.
7 changes: 6 additions & 1 deletion gravitee-plugin-annotation-processors/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@
<artifactId>lombok</artifactId>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

<!-- Tests dependencies -->
<dependency>
<groupId>com.google.testing.compile</groupId>
Expand Down Expand Up @@ -101,4 +106,4 @@
</plugin>
</plugins>
</build>
</project>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@
*/
package {{packageName}};

import com.fasterxml.jackson.databind.ObjectMapper;

import io.gravitee.gateway.reactive.api.ExecutionFailure;
import io.gravitee.gateway.reactive.api.context.ExecutionContext;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Flowable;
import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.core.Single;

import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
Expand All @@ -43,6 +44,8 @@ public class {{evaluatorSimpleClassName}} {
private final Logger logger = LoggerFactory.getLogger({{evaluatorSimpleClassName}}.class);

private final ObjectMapper objectMapper = new ObjectMapper();

private final {{simpleClassName}} configuration;

private static final Validator validator;
Expand Down Expand Up @@ -194,8 +197,14 @@ public class {{evaluatorSimpleClassName}} {
return Single.just(evaluatedConf);
}

{{simpleClassName}} evaluatedConfiguration = new {{simpleClassName}}();
{{simpleClassName}} evaluatedConfiguration;
try {
evaluatedConfiguration = objectMapper.readValue(objectMapper.writeValueAsString(configuration), {{simpleClassName}}.class);
} catch (com.fasterxml.jackson.core.JsonProcessingException e) {
logger.error("Unable to clone configuration", e);
return Single.error(e);
}

String currentAttributePrefix = attributePrefix;

List<Maybe<String>> toEval = new ArrayList<>();

Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,23 @@
import static org.mockito.Mockito.when;

import io.gravitee.gateway.reactive.api.context.ExecutionContext;
import io.gravitee.plugin.annotation.processor.result.KeyStore;
import io.gravitee.plugin.annotation.processor.result.SecurityConfiguration;
import io.gravitee.plugin.annotation.processor.result.SecurityProtocol;
import io.gravitee.plugin.annotation.processor.result.Ssl;
import io.gravitee.plugin.annotation.processor.result.TestConfiguration;
import io.gravitee.plugin.annotation.processor.result.TestConfigurationEvaluator;
import io.gravitee.plugin.annotation.processor.result.TrustStore;
import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.observers.TestObserver;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.Map;
import java.util.Set;

/**
* @author Remi Baptiste (remi.baptiste at graviteesource.com)
Expand Down Expand Up @@ -135,4 +140,39 @@ public void should_return_evaluated_configuration_from_internal_attribute() {

verify(spiedContext, times(0)).setInternalAttribute(anyString(), any(TestConfiguration.class));
}

@Test
public void should_return_original_configuration() {
var consumer = TestConfiguration.Consumer
.builder()
.enabled(true)
.autoOffsetReset("none")
.attributes(List.of("attribute1"))
.topics(Set.of("topic1"))
.build();
consumer.setTopicPattern("topic-pattern");
consumer.setTrustStore(TrustStore.builder().key("my-key").build());
var securityConfiguration = SecurityConfiguration.builder().property("my-prop").build();
var ssl = Ssl.builder().keyStore(KeyStore.builder().key("keystore-key").build()).timeout(10L).build();

var originalConfiguration = new TestConfiguration(SecurityProtocol.SASL_SSL, ssl, securityConfiguration, consumer);
evaluator = new TestConfigurationEvaluator(originalConfiguration);

TestObserver<TestConfiguration> testObserver = evaluator.eval(new ExecutionContext()).test();

testObserver.assertComplete();

testObserver.assertValue(testConfiguration -> {
assertThat(testConfiguration.getConsumer().isEnabled()).isTrue();
assertThat(testConfiguration.getConsumer().getAutoOffsetReset()).isEqualTo("none");
assertThat(testConfiguration.getConsumer().getAttributes()).isEqualTo(List.of("attribute1"));
assertThat(testConfiguration.getConsumer().getTopics()).isEqualTo(Set.of("topic1"));
assertThat(testConfiguration.getConsumer().getTopicPattern()).isEqualTo("topic-pattern");
assertThat(testConfiguration.getConsumer().getTrustStore().getKey()).isEqualTo("my-key");
assertThat(testConfiguration.getSecurity().getProperty()).isEqualTo("my-prop");
assertThat(testConfiguration.getSsl().getKeyStore().getKey()).isEqualTo("keystore-key");
assertThat(testConfiguration.getSsl().getTimeout()).isEqualTo(10L);
return true;
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
*/
package io.gravitee.plugin.annotation.processor.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KeyStore {

private String key;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
*/
package io.gravitee.plugin.annotation.processor.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SecurityConfiguration {

private String property;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
*/
package io.gravitee.plugin.annotation.processor.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Ssl {

private KeyStore keyStore;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
*/
package io.gravitee.plugin.annotation.processor.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TrustStore {

private String key;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package io.gravitee.plugin.annotation.processor.result;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.gravitee.gateway.reactive.api.ExecutionFailure;
import io.gravitee.gateway.reactive.api.context.ExecutionContext;
import io.reactivex.rxjava3.core.Completable;
Expand All @@ -40,6 +41,8 @@ public class TestConfigurationEvaluator {

private final Logger logger = LoggerFactory.getLogger(TestConfigurationEvaluator.class);

private final ObjectMapper objectMapper = new ObjectMapper();

private final TestConfiguration configuration;

private static final Validator validator;
Expand Down Expand Up @@ -179,7 +182,13 @@ public Single<TestConfiguration> eval(ExecutionContext ctx) {
return Single.just(evaluatedConf);
}

TestConfiguration evaluatedConfiguration = new TestConfiguration();
TestConfiguration evaluatedConfiguration;
try {
evaluatedConfiguration = objectMapper.readValue(objectMapper.writeValueAsString(configuration), TestConfiguration.class);
} catch (com.fasterxml.jackson.core.JsonProcessingException e) {
logger.error("Unable to clone configuration", e);
return Single.error(e);
}
String currentAttributePrefix = attributePrefix;

List<Maybe<String>> toEval = new ArrayList<>();
Expand Down

0 comments on commit 80b3989

Please sign in to comment.