Skip to content

Commit

Permalink
test: Verify Serialization.clone works with UnmatchedFieldTypeModule
Browse files Browse the repository at this point in the history
Signed-off-by: Marc Nuri <marc@marcnuri.com>
  • Loading branch information
manusa committed Aug 23, 2022
1 parent 3296ece commit 0a28e95
Showing 1 changed file with 49 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,18 @@
import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
import io.fabric8.kubernetes.api.model.KubernetesResource;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.client.KubernetesClientException;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.Collections;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry;
import static org.junit.jupiter.api.Assertions.assertThrows;

class SerializationAdditionalPropertiesTest {
Expand Down Expand Up @@ -71,7 +74,7 @@ void unmarshalWithUnmatchedTypeFieldsAndDefaults() {
() -> Serialization.unmarshal(marshalled));
// Then
assertThat(result)
.getCause()
.cause()
.isInstanceOf(InvalidFormatException.class)
.hasMessageStartingWith("Cannot deserialize value of type `java.lang.Boolean` from String \"${immutable}\"");
}
Expand Down Expand Up @@ -145,4 +148,49 @@ void marshalWithAdditionalPropertiesOverridingFields() {
"}");
}

@Test
@DisplayName("clone, with unmatched type fields and unrestricted, values are in additionalProperties map are cloned")
void cloneShouldPreserveAdditionalProperties() {
// Given
Serialization.UNMATCHED_FIELD_TYPE_MODULE.setRestrictToTemplates(false);
final ConfigMap configMap = new ConfigMapBuilder()
.withNewMetadata().withName("name").addToAnnotations("key", "value").endMetadata()
.build();
configMap.getMetadata().getAdditionalProperties().put("annotations", "${annotations}");
configMap.getAdditionalProperties().put("immutable", "${immutable}");
configMap.getAdditionalProperties().put("unknownField", "unknownValue");
// When
final ConfigMap result = Serialization.clone(configMap);
// Then
assertThat(result)
.satisfies(cm -> assertThat(cm.getMetadata())
.returns(Collections.emptyMap(), ObjectMeta::getAnnotations)
.hasFieldOrPropertyWithValue("name", "name")
.extracting(ObjectMeta::getAdditionalProperties)
.asInstanceOf(InstanceOfAssertFactories.map(String.class, Object.class))
.containsExactly(
entry("annotations", "${annotations}")))
.extracting(ConfigMap::getAdditionalProperties)
.asInstanceOf(InstanceOfAssertFactories.map(String.class, Object.class))
.containsExactly(
entry("immutable", "${immutable}"),
entry("unknownField", "unknownValue"));
}

@Test
@DisplayName("clone, with unmatched type fields, should throw Exception")
void cloneShouldThrowException() {
// Given
final ConfigMap configMap = new ConfigMapBuilder().withNewMetadata().withName("name").endMetadata().build();
configMap.getAdditionalProperties().put("immutable", "${immutable}");
configMap.getAdditionalProperties().put("unknownField", "unknownValue");
// When
final IllegalStateException result = assertThrows(IllegalStateException.class,
() -> Serialization.clone(configMap));
// Then
assertThat(result)
.cause()
.isInstanceOf(InvalidFormatException.class)
.hasMessageStartingWith("Cannot deserialize value of type `java.lang.Boolean` from String \"${immutable}\"");
}
}

0 comments on commit 0a28e95

Please sign in to comment.