Skip to content

Commit bbd359f

Browse files
philliphoffbrendandburns
authored andcommitted
Fix for delete post-config-load. (#68)
1 parent 759c101 commit bbd359f

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

Diff for: src/KubernetesClientConfiguration.ConfigFile.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,10 @@ private static K8SConfiguration LoadKubeConfig(FileInfo kubeconfig)
223223

224224
var deserializeBuilder = new DeserializerBuilder();
225225
var deserializer = deserializeBuilder.Build();
226-
return deserializer.Deserialize<K8SConfiguration>(kubeconfig.OpenText());
226+
using (var kubeConfigTextStream = kubeconfig.OpenText())
227+
{
228+
return deserializer.Deserialize<K8SConfiguration>(kubeConfigTextStream);
229+
}
227230
}
228231
}
229232
}

Diff for: tests/KubernetesClientConfigurationTests.cs

+34-8
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,40 @@ public void SmartSkipTlsVerify()
250250
[Fact]
251251
public void NoCurrentContext()
252252
{
253-
var fi = new FileInfo("assets/kubeconfig.no-current-context.yml");
254-
255-
// failed if cannot infer any server host
256-
Assert.Throws<KubeConfigException>(() => KubernetesClientConfiguration.BuildConfigFromConfigFile(fi));
257-
258-
// survive when masterUrl is set
259-
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(fi, masterUrl: "http://test.server");
253+
var fi = new FileInfo("assets/kubeconfig.no-current-context.yml");
254+
255+
// failed if cannot infer any server host
256+
Assert.Throws<KubeConfigException>(() => KubernetesClientConfiguration.BuildConfigFromConfigFile(fi));
257+
258+
// survive when masterUrl is set
259+
var cfg = KubernetesClientConfiguration.BuildConfigFromConfigFile(fi, masterUrl: "http://test.server");
260260
Assert.Equal("http://test.server", cfg.Host);
261-
}
261+
}
262+
263+
/// <summary>
264+
/// Checks that loading a configuration from a file leaves no outstanding handles to the file.
265+
/// </summary>
266+
/// <remarks>
267+
/// This test fails only on Windows.
268+
/// </remarks>
269+
[Fact]
270+
public void DeletedConfigurationFile()
271+
{
272+
var assetFileInfo = new FileInfo("assets/kubeconfig.yml");
273+
var tempFileInfo = new FileInfo(Path.GetTempFileName());
274+
275+
File.Copy(assetFileInfo.FullName, tempFileInfo.FullName, /* overwrite: */ true);
276+
277+
KubernetesClientConfiguration config;
278+
279+
try
280+
{
281+
config = KubernetesClientConfiguration.BuildConfigFromConfigFile(tempFileInfo);
282+
}
283+
finally
284+
{
285+
File.Delete(tempFileInfo.FullName);
286+
}
287+
}
262288
}
263289
}

0 commit comments

Comments
 (0)