audit, advisories and doctors/setup work

This commit is contained in:
master
2026-01-13 18:53:39 +02:00
parent 9ca7cb183e
commit d7be6ba34b
811 changed files with 54242 additions and 4056 deletions

View File

@@ -1,8 +1,10 @@
// Copyright (c) StellaOps. Licensed under AGPL-3.0-or-later.
// Unit tests for RegistrySourceService
using System.Globalization;
using FluentAssertions;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Moq;
using StellaOps.SbomService.Models;
using StellaOps.SbomService.Repositories;
@@ -22,10 +24,22 @@ public class RegistrySourceServiceTests
_sourceRepoMock = new Mock<IRegistrySourceRepository>();
_runRepoMock = new Mock<IRegistrySourceRunRepository>();
var timeProvider = new FixedTimeProvider(FixedNow);
var guidProvider = CreateGuidProvider();
var httpOptions = Options.Create(new RegistryHttpOptions
{
AllowedHosts = new List<string> { "harbor.example.com", "registry.example.com", "test-registry.example.com" }
});
var queryOptions = Options.Create(new RegistrySourceQueryOptions());
_service = new RegistrySourceService(
_sourceRepoMock.Object,
_runRepoMock.Object,
NullLogger<RegistrySourceService>.Instance);
NullLogger<RegistrySourceService>.Instance,
timeProvider,
guidProvider,
httpOptions,
queryOptions);
}
[Trait("Category", "Unit")]
@@ -90,7 +104,7 @@ public class RegistrySourceServiceTests
.Returns<RegistrySource, CancellationToken>((s, _) => Task.FromResult(s));
// Act
var result = await _service.CreateAsync(request, null, null);
var result = await _service.CreateAsync(request, null, "tenant-1");
// Assert
result.RegistryUrl.Should().Be("https://registry.example.com");
@@ -107,7 +121,7 @@ public class RegistrySourceServiceTests
.ReturnsAsync(source);
// Act
var result = await _service.GetByIdAsync(source.Id);
var result = await _service.GetByIdAsync(source.Id, "tenant-1");
// Assert
result.Should().NotBeNull();
@@ -125,7 +139,7 @@ public class RegistrySourceServiceTests
.ReturnsAsync((RegistrySource?)null);
// Act
var result = await _service.GetByIdAsync(id);
var result = await _service.GetByIdAsync(id, "tenant-1");
// Assert
result.Should().BeNull();
@@ -153,7 +167,7 @@ public class RegistrySourceServiceTests
var request = new ListRegistrySourcesRequest(Type: RegistrySourceType.Harbor);
// Act
var result = await _service.ListAsync(request, null);
var result = await _service.ListAsync(request, "tenant-1");
// Assert
result.Items.Should().HaveCount(2);
@@ -188,7 +202,7 @@ public class RegistrySourceServiceTests
Tags: null);
// Act
var result = await _service.UpdateAsync(source.Id, request, "updater@example.com");
var result = await _service.UpdateAsync(source.Id, request, "updater@example.com", "tenant-1");
// Assert
result.Should().NotBeNull();
@@ -213,7 +227,7 @@ public class RegistrySourceServiceTests
WebhookSecretRefUri: null, Status: null, Tags: null);
// Act
var result = await _service.UpdateAsync(id, request, "user");
var result = await _service.UpdateAsync(id, request, "user", "tenant-1");
// Assert
result.Should().BeNull();
@@ -234,7 +248,7 @@ public class RegistrySourceServiceTests
.Returns(Task.CompletedTask);
// Act
var result = await _service.DeleteAsync(source.Id, "deleter@example.com");
var result = await _service.DeleteAsync(source.Id, "deleter@example.com", "tenant-1");
// Assert
result.Should().BeTrue();
@@ -262,7 +276,7 @@ public class RegistrySourceServiceTests
.Returns<RegistrySource, CancellationToken>((s, _) => Task.FromResult(s));
// Act
var result = await _service.TriggerAsync(source.Id, "manual", null, "user@example.com");
var result = await _service.TriggerAsync(source.Id, "manual", null, "user@example.com", "tenant-1");
// Assert
result.Should().NotBeNull();
@@ -288,7 +302,7 @@ public class RegistrySourceServiceTests
.Returns<RegistrySource, CancellationToken>((s, _) => Task.FromResult(s));
// Act
var result = await _service.PauseAsync(source.Id, "Maintenance", "admin@example.com");
var result = await _service.PauseAsync(source.Id, "Maintenance", "admin@example.com", "tenant-1");
// Assert
result.Should().NotBeNull();
@@ -312,7 +326,7 @@ public class RegistrySourceServiceTests
.Returns<RegistrySource, CancellationToken>((s, _) => Task.FromResult(s));
// Act
var result = await _service.ResumeAsync(source.Id, "admin@example.com");
var result = await _service.ResumeAsync(source.Id, "admin@example.com", "tenant-1");
// Assert
result.Should().NotBeNull();
@@ -337,7 +351,7 @@ public class RegistrySourceServiceTests
.ReturnsAsync(runs);
// Act
var result = await _service.GetRunHistoryAsync(sourceId, 50);
var result = await _service.GetRunHistoryAsync(sourceId, 50, "tenant-1");
// Assert
result.Should().HaveCount(3);
@@ -348,23 +362,39 @@ public class RegistrySourceServiceTests
private static RegistrySource CreateTestSource(RegistrySourceType type = RegistrySourceType.Harbor) => new()
{
Id = Guid.NewGuid(),
Id = Guid.Parse("11111111-1111-1111-1111-111111111111"),
Name = "Test Registry",
Type = type,
RegistryUrl = "https://test-registry.example.com",
Status = RegistrySourceStatus.Pending,
TriggerMode = RegistryTriggerMode.Manual
TriggerMode = RegistryTriggerMode.Manual,
CreatedAt = FixedNow,
UpdatedAt = FixedNow,
TenantId = "tenant-1"
};
private static RegistrySourceRun CreateTestRun(Guid sourceId) => new()
{
Id = Guid.NewGuid(),
Id = Guid.Parse("22222222-2222-2222-2222-222222222222"),
SourceId = sourceId,
Status = RegistryRunStatus.Completed,
TriggerType = "manual",
StartedAt = DateTimeOffset.UtcNow.AddMinutes(-5),
CompletedAt = DateTimeOffset.UtcNow
StartedAt = FixedNow.AddMinutes(-5),
CompletedAt = FixedNow
};
private static QueueGuidProvider CreateGuidProvider()
{
return new QueueGuidProvider(new[]
{
Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),
Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"),
Guid.Parse("cccccccc-cccc-cccc-cccc-cccccccccccc")
});
}
private static DateTimeOffset FixedNow =>
DateTimeOffset.Parse("2025-12-29T12:00:00Z", CultureInfo.InvariantCulture);
#endregion
}