using Tests.EndToEnd.Infra;
using Xunit.Abstractions;
namespace Tests.EndToEnd.DiscoveryTests;
///
/// `rpk discover docker` against endpoints it cannot reach. Every case here fails
/// before any container is listed, so these tests never talk to a daemon.
///
[Collection("Yaml CLI tests")]
public class DiscoverDockerEndpointTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
: IClassFixture {
private async Task ExecuteAsync(params string[] args) =>
await YamlCliTestHost.RunAsync(args, fs.Root, outputHelper, "config.yaml");
[Theory]
[InlineData("ssh://user@nas")]
[InlineData("npipe:////./pipe/docker_engine")]
public async Task an_endpoint_that_cannot_be_dialled_says_so_instead_of_crashing(string endpoint) {
// `docker context` sets ssh:// for a remote host and npipe:// is the Windows
// default, so both are ordinary values to find in DOCKER_HOST. They used to
// reach HttpClient, which accepts the URI and throws NotSupportedException on
// the first request — past the command's catch list, so the user got
// "Unexpected error occurred" and a stack trace.
var output = await ExecuteAsync("discover", "docker", "--docker-host", endpoint);
Assert.DoesNotContain("Unexpected error", output);
Assert.DoesNotContain("at RackPeek.", output);
// And the message says what to do about it.
Assert.Contains("ssh -L", output);
}
}