Kubernetes.Classic: add support for netstandard2.0 and net48 (#808)
* support gh nuget (#11) * trim to fit net48 * add net48 support * add very test framework * add test body * Revert "support gh nuget (#11)" This reverts commit 5cdaf59690170be44e4554485fb2e89785a6a1cf.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
<RootNamespace>k8s.Tests</RootNamespace>
|
||||
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net6</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">net6;net48</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MartinCostello.Logging.XUnit" Version="0.2.0" />
|
||||
<PackageReference Include="FluentAssertions" Version="6.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageReference Include="System.IO.Abstractions.TestingHelpers" Version="13.2.47" />
|
||||
<PackageReference Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
|
||||
<PackageReference Include="Portable.BouncyCastle" Version="1.8.10" />
|
||||
<PackageReference Include="AutoMapper" Version="10.1.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xunit.StaFact" Version="1.0.37" />
|
||||
<PackageReference Include="Moq" Version="4.16.1" />
|
||||
|
||||
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\KubernetesClient.Classic\KubernetesClient.Classic.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
81
tests/KubernetesClient.Classic.Tests/SimpleTests.cs
Normal file
81
tests/KubernetesClient.Classic.Tests/SimpleTests.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using k8s.Models;
|
||||
|
||||
namespace k8s.tests;
|
||||
|
||||
public class BasicTests
|
||||
{
|
||||
// TODO: fail to setup asp.net core 6 on net48
|
||||
private class DummyHttpServer : System.IDisposable
|
||||
{
|
||||
private TcpListener server;
|
||||
private readonly Task loop;
|
||||
private volatile bool running = false;
|
||||
|
||||
public string Addr => $"http://{server.LocalEndpoint}";
|
||||
|
||||
public DummyHttpServer(object obj)
|
||||
{
|
||||
server = new TcpListener(IPAddress.Parse("127.0.0.1"), 0);
|
||||
server.Start();
|
||||
running = true;
|
||||
loop = Task.Run(async () =>
|
||||
{
|
||||
while (running)
|
||||
{
|
||||
var result = KubernetesJson.Serialize(obj);
|
||||
|
||||
var client = await server.AcceptTcpClientAsync().ConfigureAwait(false);
|
||||
var stream = client.GetStream();
|
||||
stream.Read(new byte[1024], 0, 1024); // TODO ensure full header
|
||||
|
||||
var writer = new StreamWriter(stream);
|
||||
await writer.WriteLineAsync("HTTP/1.0 200 OK").ConfigureAwait(false);
|
||||
await writer.WriteLineAsync("Content-Length: " + result.Length).ConfigureAwait(false);
|
||||
await writer.WriteLineAsync("Content-Type: application/json").ConfigureAwait(false);
|
||||
await writer.WriteLineAsync().ConfigureAwait(false);
|
||||
await writer.WriteLineAsync(result).ConfigureAwait(false);
|
||||
|
||||
await writer.FlushAsync().ConfigureAwait(false);
|
||||
client.Close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
try
|
||||
{
|
||||
running = false;
|
||||
server.Stop();
|
||||
loop.Wait();
|
||||
loop.Dispose();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task QueryPods()
|
||||
{
|
||||
using var server = new DummyHttpServer(new V1Pod()
|
||||
{
|
||||
Metadata = new V1ObjectMeta()
|
||||
{
|
||||
Name = "pod0",
|
||||
},
|
||||
});
|
||||
var client = new Kubernetes(new KubernetesClientConfiguration { Host = server.Addr });
|
||||
|
||||
var pod = await client.ReadNamespacedPodAsync("pod", "default").ConfigureAwait(false);
|
||||
|
||||
Assert.Equal("pod0", pod.Metadata.Name);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user