From c45768a4e93a913db417316a05ce26fc2225cd01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Henning?= <soeren.henning@email.uni-kiel.de> Date: Sun, 4 Dec 2022 15:36:04 +0100 Subject: [PATCH] Fix non-string serialization --- .../patcher/ConfigMapYamlPatcher.kt | 4 +- .../patcher/ConfigMapYamlPatcherTest.kt | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 theodolite/src/test/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcherTest.kt diff --git a/theodolite/src/main/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcher.kt b/theodolite/src/main/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcher.kt index 3c495331f..28b2d55d4 100644 --- a/theodolite/src/main/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcher.kt +++ b/theodolite/src/main/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcher.kt @@ -27,8 +27,8 @@ class ConfigMapYamlPatcher( val parser = Yaml(dumperOptions) // Change value - val yaml = parser.loadAs(yamlFile, LinkedHashMap<String, String>()::class.java) - yaml[variableName] = value + val yaml = parser.loadAs(yamlFile, LinkedHashMap<String, Any>()::class.java) + yaml[variableName] = value.toLongOrNull() ?: value.toDoubleOrNull() ?: value.toBooleanStrictOrNull() ?: value // Convert back to String and set in Kubernetes resource resource.data[fileName] = parser.dump(yaml) diff --git a/theodolite/src/test/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcherTest.kt b/theodolite/src/test/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcherTest.kt new file mode 100644 index 000000000..474080b5c --- /dev/null +++ b/theodolite/src/test/kotlin/rocks/theodolite/kubernetes/patcher/ConfigMapYamlPatcherTest.kt @@ -0,0 +1,52 @@ +package rocks.theodolite.kubernetes.patcher + +import io.fabric8.kubernetes.api.model.ConfigMap +import io.fabric8.kubernetes.api.model.ConfigMapBuilder +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource + +internal class ConfigMapYamlPatcherTest { + + private lateinit var configMap: ConfigMap + + private val patcher = ConfigMapYamlPatcher("some-file.yaml", "second") + + @BeforeEach + fun setUp() { + val data = mapOf( + "some-file.yaml" to """ + first: some-test + second: 1 + third: 1234 + """.trimIndent() + ) + + this.configMap = ConfigMapBuilder() + .withNewMetadata() + .withName("example") + .endMetadata() + .addToData(data) + .build() + } + + @ParameterizedTest + @ValueSource(strings = ["some-string", "42", "42.42", "true"]) + fun setSettingString(inputValue: String) { + val patched = patcher.patchSingleResource(this.configMap, inputValue) + assertTrue(patched is ConfigMap) + //patched.let { it as ConfigMap }.data + patched as ConfigMap + val yaml = patched.data["some-file.yaml"] + assertTrue(yaml != null) + val line = yaml!!.lines().getOrNull(1) + assertTrue(line != null) + val value = line!!.split(": ").getOrNull(1) + assertEquals(inputValue, value) + } + + +} \ No newline at end of file -- GitLab