From bbd359f859873b48c6fb688485487d5b4ccc0495 Mon Sep 17 00:00:00 2001 From: Phillip Hoff Date: Wed, 20 Dec 2017 09:43:13 -0800 Subject: [PATCH] Fix for delete post-config-load. (#68) --- ...ubernetesClientConfiguration.ConfigFile.cs | 5 ++- tests/KubernetesClientConfigurationTests.cs | 42 +++++++++++++++---- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/KubernetesClientConfiguration.ConfigFile.cs b/src/KubernetesClientConfiguration.ConfigFile.cs index dd3b03d..862414d 100644 --- a/src/KubernetesClientConfiguration.ConfigFile.cs +++ b/src/KubernetesClientConfiguration.ConfigFile.cs @@ -223,7 +223,10 @@ namespace k8s var deserializeBuilder = new DeserializerBuilder(); var deserializer = deserializeBuilder.Build(); - return deserializer.Deserialize(kubeconfig.OpenText()); + using (var kubeConfigTextStream = kubeconfig.OpenText()) + { + return deserializer.Deserialize(kubeConfigTextStream); + } } } } diff --git a/tests/KubernetesClientConfigurationTests.cs b/tests/KubernetesClientConfigurationTests.cs index e996c05..da45677 100755 --- a/tests/KubernetesClientConfigurationTests.cs +++ b/tests/KubernetesClientConfigurationTests.cs @@ -250,14 +250,40 @@ namespace k8s.Tests [Fact] public void NoCurrentContext() { - var fi = new FileInfo("assets/kubeconfig.no-current-context.yml"); - - // failed if cannot infer any server host - Assert.Throws(() => KubernetesClientConfiguration.BuildConfigFromConfigFile(fi)); - - // survive when masterUrl is set - var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(fi, masterUrl: "http://test.server"); + var fi = new FileInfo("assets/kubeconfig.no-current-context.yml"); + + // failed if cannot infer any server host + Assert.Throws(() => KubernetesClientConfiguration.BuildConfigFromConfigFile(fi)); + + // survive when masterUrl is set + var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(fi, masterUrl: "http://test.server"); Assert.Equal("http://test.server", cfg.Host); - } + } + + /// + /// Checks that loading a configuration from a file leaves no outstanding handles to the file. + /// + /// + /// This test fails only on Windows. + /// + [Fact] + public void DeletedConfigurationFile() + { + var assetFileInfo = new FileInfo("assets/kubeconfig.yml"); + var tempFileInfo = new FileInfo(Path.GetTempFileName()); + + File.Copy(assetFileInfo.FullName, tempFileInfo.FullName, /* overwrite: */ true); + + KubernetesClientConfiguration config; + + try + { + config = KubernetesClientConfiguration.BuildConfigFromConfigFile(tempFileInfo); + } + finally + { + File.Delete(tempFileInfo.FullName); + } + } } }