From 32c9629e09657bb979e66e46c821c5904b11d9f2 Mon Sep 17 00:00:00 2001 From: Emily Casey Date: Fri, 29 May 2020 11:47:34 -0400 Subject: [PATCH] Handles k8s style bindings When a binding is provided as a mounted ConfigMap/Secret pair (containing metadata and secret values respectively) the files within the metadata and secret directories will be symlinks to files in a colocated hidden directory that contains the content. In order to handle bindings presented in this format a Binding object will ignore hidden files and directories when it is contructed using a path. This prevents errors that previously occured when the Binding assumed all metadata and secret entries were regular files, and attempted to read the content of those directories directly. Resolves #40 Signed-off-by: Emily Casey --- .../org/springframework/cloud/bindings/Binding.java | 3 +++ .../springframework/cloud/bindings/BindingTest.java | 13 +++++++++++++ .../cloud/bindings/BindingsTests.java | 3 +-- ...BindingSpecificEnvironmentPostProcessorTest.java | 2 +- src/test/resources/test-k8s/metadata/.hidden-data | 1 + .../test-k8s/metadata/.hidden-data-1/.gitkeep | 0 .../resources/test-k8s/metadata/.hidden-data-1/kind | 1 + .../test-k8s/metadata/.hidden-data-1/provider | 1 + src/test/resources/test-k8s/metadata/kind | 1 + src/test/resources/test-k8s/metadata/provider | 1 + src/test/resources/test-k8s/secret/.hidden-data | 1 + .../test-k8s/secret/.hidden-data-1/.gitkeep | 0 .../test-k8s/secret/.hidden-data-1/test-key | 1 + src/test/resources/test-k8s/secret/test-key | 1 + 14 files changed, 26 insertions(+), 3 deletions(-) create mode 120000 src/test/resources/test-k8s/metadata/.hidden-data create mode 100644 src/test/resources/test-k8s/metadata/.hidden-data-1/.gitkeep create mode 100644 src/test/resources/test-k8s/metadata/.hidden-data-1/kind create mode 100644 src/test/resources/test-k8s/metadata/.hidden-data-1/provider create mode 120000 src/test/resources/test-k8s/metadata/kind create mode 120000 src/test/resources/test-k8s/metadata/provider create mode 120000 src/test/resources/test-k8s/secret/.hidden-data create mode 100644 src/test/resources/test-k8s/secret/.hidden-data-1/.gitkeep create mode 100644 src/test/resources/test-k8s/secret/.hidden-data-1/test-key create mode 120000 src/test/resources/test-k8s/secret/test-key diff --git a/src/main/java/org/springframework/cloud/bindings/Binding.java b/src/main/java/org/springframework/cloud/bindings/Binding.java index 9f3f3db..5cfe378 100644 --- a/src/main/java/org/springframework/cloud/bindings/Binding.java +++ b/src/main/java/org/springframework/cloud/bindings/Binding.java @@ -15,6 +15,7 @@ */ package org.springframework.cloud.bindings; +import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -141,6 +142,8 @@ public final class Binding { private Map createFilePerEntryMap(Path path) { try { return Files.list(path) + .filter(p -> !p.getFileName().toString().startsWith(".")) + .filter(p -> !new File(p.toString()).isDirectory()) .collect(Collectors.toMap( p -> p.getFileName().toString(), p -> { diff --git a/src/test/java/org/springframework/cloud/bindings/BindingTest.java b/src/test/java/org/springframework/cloud/bindings/BindingTest.java index 3d14dbb..228c67c 100644 --- a/src/test/java/org/springframework/cloud/bindings/BindingTest.java +++ b/src/test/java/org/springframework/cloud/bindings/BindingTest.java @@ -39,4 +39,17 @@ final class BindingTest { .isEqualTo(Paths.get("src/test/resources/test-name-1/secret/test-key")); } + @Test + @DisplayName("populates k8s style content from filesystem") + void testK8s() { + //When bindings are provided as a k8s configmap secret pairs data files will be symlinks to hidden directories + Binding binding = new Binding(Paths.get("src/test/resources/test-k8s")); + + assertThat(binding.getKind()).isEqualTo("test-kind-1"); + assertThat(binding.getProvider()).isEqualTo("test-provider-1"); + assertThat(binding.getMetadataFilePath("test-key")) + .isEqualTo(Paths.get("src/test/resources/test-k8s/metadata/test-key")); + assertThat(binding.getSecretFilePath("test-key")) + .isEqualTo(Paths.get("src/test/resources/test-k8s/secret/test-key")); + } } diff --git a/src/test/java/org/springframework/cloud/bindings/BindingsTests.java b/src/test/java/org/springframework/cloud/bindings/BindingsTests.java index 7e40eb5..67b943c 100644 --- a/src/test/java/org/springframework/cloud/bindings/BindingsTests.java +++ b/src/test/java/org/springframework/cloud/bindings/BindingsTests.java @@ -65,7 +65,7 @@ final class BindingsTests { String path = "src/test/resources"; Bindings b = new Bindings(path); - assertThat(b.getBindings()).hasSize(2); + assertThat(b.getBindings()).hasSize(3); } } @@ -102,5 +102,4 @@ final class BindingsTests { } } - } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java index f1df2eb..3b36200 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java @@ -98,7 +98,7 @@ final class BindingSpecificEnvironmentPostProcessorTest { @Test @DisplayName("included implementations are registered") void includedImplementations() { - assertThat(new BindingSpecificEnvironmentPostProcessor().processors).hasSize(14); + assertThat(new BindingSpecificEnvironmentPostProcessor().processors).hasSize(15); } } diff --git a/src/test/resources/test-k8s/metadata/.hidden-data b/src/test/resources/test-k8s/metadata/.hidden-data new file mode 120000 index 0000000..b4901b5 --- /dev/null +++ b/src/test/resources/test-k8s/metadata/.hidden-data @@ -0,0 +1 @@ +.hidden-data-1 \ No newline at end of file diff --git a/src/test/resources/test-k8s/metadata/.hidden-data-1/.gitkeep b/src/test/resources/test-k8s/metadata/.hidden-data-1/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/test-k8s/metadata/.hidden-data-1/kind b/src/test/resources/test-k8s/metadata/.hidden-data-1/kind new file mode 100644 index 0000000..d08f71b --- /dev/null +++ b/src/test/resources/test-k8s/metadata/.hidden-data-1/kind @@ -0,0 +1 @@ +test-kind-1 diff --git a/src/test/resources/test-k8s/metadata/.hidden-data-1/provider b/src/test/resources/test-k8s/metadata/.hidden-data-1/provider new file mode 100644 index 0000000..0036389 --- /dev/null +++ b/src/test/resources/test-k8s/metadata/.hidden-data-1/provider @@ -0,0 +1 @@ +test-provider-1 diff --git a/src/test/resources/test-k8s/metadata/kind b/src/test/resources/test-k8s/metadata/kind new file mode 120000 index 0000000..d90b3e5 --- /dev/null +++ b/src/test/resources/test-k8s/metadata/kind @@ -0,0 +1 @@ +.hidden-data/kind \ No newline at end of file diff --git a/src/test/resources/test-k8s/metadata/provider b/src/test/resources/test-k8s/metadata/provider new file mode 120000 index 0000000..7ba8004 --- /dev/null +++ b/src/test/resources/test-k8s/metadata/provider @@ -0,0 +1 @@ +.hidden-data/provider \ No newline at end of file diff --git a/src/test/resources/test-k8s/secret/.hidden-data b/src/test/resources/test-k8s/secret/.hidden-data new file mode 120000 index 0000000..b4901b5 --- /dev/null +++ b/src/test/resources/test-k8s/secret/.hidden-data @@ -0,0 +1 @@ +.hidden-data-1 \ No newline at end of file diff --git a/src/test/resources/test-k8s/secret/.hidden-data-1/.gitkeep b/src/test/resources/test-k8s/secret/.hidden-data-1/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/test-k8s/secret/.hidden-data-1/test-key b/src/test/resources/test-k8s/secret/.hidden-data-1/test-key new file mode 100644 index 0000000..2278763 --- /dev/null +++ b/src/test/resources/test-k8s/secret/.hidden-data-1/test-key @@ -0,0 +1 @@ +test-value diff --git a/src/test/resources/test-k8s/secret/test-key b/src/test/resources/test-k8s/secret/test-key new file mode 120000 index 0000000..c8d4599 --- /dev/null +++ b/src/test/resources/test-k8s/secret/test-key @@ -0,0 +1 @@ +.hidden-data/test-key \ No newline at end of file