Files
git.stella-ops.org/src/Concelier/__Tests/StellaOps.Concelier.Connector.Distro.Alpine.Tests/AlpineDependencyInjectionRoutineTests.cs

80 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using StellaOps.Concelier.Core.Jobs;
using StellaOps.Concelier.Connector.Common.Http;
using StellaOps.Concelier.Connector.Distro.Alpine;
using StellaOps.Concelier.Connector.Distro.Alpine.Configuration;
using Xunit;
using StellaOps.TestKit;
namespace StellaOps.Concelier.Connector.Distro.Alpine.Tests;
public sealed class AlpineDependencyInjectionRoutineTests
{
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Register_ConfiguresOptionsAndScheduler()
{
var services = new ServiceCollection();
services.AddLogging();
services.AddOptions();
services.AddSourceCommon();
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>
{
["concelier:sources:alpine:baseUri"] = "https://secdb.alpinelinux.org/",
["concelier:sources:alpine:releases:0"] = "v3.20",
["concelier:sources:alpine:repositories:0"] = "main",
["concelier:sources:alpine:maxDocumentsPerFetch"] = "5",
["concelier:sources:alpine:fetchTimeout"] = "00:00:30",
["concelier:sources:alpine:requestDelay"] = "00:00:00.100",
["concelier:sources:alpine:userAgent"] = "StellaOps.Tests.Alpine/1.0"
})
.Build();
var routine = new AlpineDependencyInjectionRoutine();
routine.Register(services, configuration);
services.Configure<JobSchedulerOptions>(_ => { });
using var provider = services.BuildServiceProvider(validateScopes: true);
var options = provider.GetRequiredService<IOptions<AlpineOptions>>().Value;
Assert.Equal(new Uri("https://secdb.alpinelinux.org/"), options.BaseUri);
Assert.Equal(new[] { "v3.20" }, options.Releases);
Assert.Equal(new[] { "main" }, options.Repositories);
Assert.Equal(5, options.MaxDocumentsPerFetch);
Assert.Equal(TimeSpan.FromSeconds(30), options.FetchTimeout);
Assert.Equal(TimeSpan.FromMilliseconds(100), options.RequestDelay);
Assert.Equal("StellaOps.Tests.Alpine/1.0", options.UserAgent);
var schedulerOptions = provider.GetRequiredService<IOptions<JobSchedulerOptions>>().Value;
Assert.True(schedulerOptions.Definitions.TryGetValue(AlpineJobKinds.Fetch, out var fetchDefinition));
Assert.True(schedulerOptions.Definitions.TryGetValue(AlpineJobKinds.Parse, out var parseDefinition));
Assert.True(schedulerOptions.Definitions.TryGetValue(AlpineJobKinds.Map, out var mapDefinition));
Assert.Equal(typeof(AlpineFetchJob), fetchDefinition.JobType);
Assert.Equal(TimeSpan.FromMinutes(5), fetchDefinition.Timeout);
Assert.Equal(TimeSpan.FromMinutes(4), fetchDefinition.LeaseDuration);
Assert.Equal("*/30 * * * *", fetchDefinition.CronExpression);
Assert.True(fetchDefinition.Enabled);
Assert.Equal(typeof(AlpineParseJob), parseDefinition.JobType);
Assert.Equal(TimeSpan.FromMinutes(6), parseDefinition.Timeout);
Assert.Equal(TimeSpan.FromMinutes(4), parseDefinition.LeaseDuration);
Assert.Equal("7,37 * * * *", parseDefinition.CronExpression);
Assert.True(parseDefinition.Enabled);
Assert.Equal(typeof(AlpineMapJob), mapDefinition.JobType);
Assert.Equal(TimeSpan.FromMinutes(8), mapDefinition.Timeout);
Assert.Equal(TimeSpan.FromMinutes(4), mapDefinition.LeaseDuration);
Assert.Equal("12,42 * * * *", mapDefinition.CronExpression);
Assert.True(mapDefinition.Enabled);
}
}