From 4dde70d66844b58f786d444ca2bb45581403e7e1 Mon Sep 17 00:00:00 2001 From: Pavel Borisov Date: Sat, 9 Dec 2023 18:24:01 +0100 Subject: [PATCH] refactor tests --- .../LocalNugetFeed.cs | 50 +++++++++++++++++++ .../NuGetRepositoryTests.cs | 18 +------ .../TestConsoleLogger.cs | 2 +- 3 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 tests/Promote.NuGet.Feeds.Tests/LocalNugetFeed.cs diff --git a/tests/Promote.NuGet.Feeds.Tests/LocalNugetFeed.cs b/tests/Promote.NuGet.Feeds.Tests/LocalNugetFeed.cs new file mode 100644 index 0000000..1287783 --- /dev/null +++ b/tests/Promote.NuGet.Feeds.Tests/LocalNugetFeed.cs @@ -0,0 +1,50 @@ +using System.Net; +using DotNet.Testcontainers.Builders; +using DotNet.Testcontainers.Containers; + +namespace Promote.NuGet.Feeds.Tests; + +public sealed class LocalNugetFeed : IAsyncDisposable +{ + private readonly IContainer _container; + + public string FeedUrl { get; } + + public string ApiKey { get; } + + private LocalNugetFeed(IContainer container, string feedUrl, string apiKey) + { + _container = container; + FeedUrl = feedUrl; + ApiKey = apiKey; + } + + public static async Task Create() + { + var buffer = new byte[64]; + Random.Shared.NextBytes(buffer); + var apiKey = Convert.ToBase64String(buffer); + + const ushort bagetterPort = 8080; + + var container = new ContainerBuilder() + .WithImage("bagetter/bagetter:1.0.0") + .WithEnvironment("ApiKey", apiKey) + .WithPortBinding(bagetterPort, true) + .WithWaitStrategy(Wait.ForUnixContainer() + .UntilHttpRequestIsSucceeded( + r => r.ForPort(bagetterPort).ForPath("/").ForStatusCode(HttpStatusCode.OK))) + .Build(); + + await container.StartAsync(); + + var feedUrl = new UriBuilder("http", container.Hostname, container.GetMappedPublicPort(bagetterPort), "/v3/index.json").Uri.ToString(); + + return new LocalNugetFeed(container, feedUrl, apiKey); + } + + public ValueTask DisposeAsync() + { + return _container.DisposeAsync(); + } +} diff --git a/tests/Promote.NuGet.Feeds.Tests/NuGetRepositoryTests.cs b/tests/Promote.NuGet.Feeds.Tests/NuGetRepositoryTests.cs index 102b475..2f1389b 100644 --- a/tests/Promote.NuGet.Feeds.Tests/NuGetRepositoryTests.cs +++ b/tests/Promote.NuGet.Feeds.Tests/NuGetRepositoryTests.cs @@ -1,6 +1,4 @@ using System.IO; -using System.Net; -using DotNet.Testcontainers.Builders; using NuGet.Packaging.Core; using NuGet.Protocol.Core.Types; using NuGet.Versioning; @@ -13,22 +11,10 @@ public class NuGetRepositoryTests [Test] public async Task Downloads_a_package_from_source_feed_and_pushes_it_to_destination_feed() { - var apiKey = TestContext.CurrentContext.Random.GetString(20); - - await using var container = new ContainerBuilder() - .WithImage("bagetter/bagetter:1.0.0") - .WithEnvironment("ApiKey", apiKey) - .WithPortBinding(8080, true) - .WithWaitStrategy(Wait.ForUnixContainer() - .UntilHttpRequestIsSucceeded(r => r.ForPort(8080).ForPath("/").ForStatusCode(HttpStatusCode.OK))) - .Build(); - - await container.StartAsync(); + await using var feed = await LocalNugetFeed.Create(); var nugetOrgDescriptor = new NuGetRepositoryDescriptor("https://api.nuget.org/v3/index.json", apiKey: null); - - var destinationUri = new UriBuilder("http", container.Hostname, container.GetMappedPublicPort(8080), "/v3/index.json").Uri.ToString(); - var destinationFeedDescriptor = new NuGetRepositoryDescriptor(destinationUri, apiKey); + var destinationFeedDescriptor = new NuGetRepositoryDescriptor(feed.FeedUrl, feed.ApiKey); var sourceRepo = new NuGetRepository(nugetOrgDescriptor, new NullSourceCacheContext(), TestConsoleLogger.Instance); var destinationRepo = new NuGetRepository(destinationFeedDescriptor, new NullSourceCacheContext(), TestConsoleLogger.Instance); diff --git a/tests/Promote.NuGet.Feeds.Tests/TestConsoleLogger.cs b/tests/Promote.NuGet.Feeds.Tests/TestConsoleLogger.cs index 40af147..de491f2 100644 --- a/tests/Promote.NuGet.Feeds.Tests/TestConsoleLogger.cs +++ b/tests/Promote.NuGet.Feeds.Tests/TestConsoleLogger.cs @@ -2,7 +2,7 @@ namespace Promote.NuGet.Feeds.Tests; -public class TestConsoleLogger : LoggerBase +public sealed class TestConsoleLogger : LoggerBase { public static TestConsoleLogger Instance { get; } = new();