save progress
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
// Description: Model S1 idempotency tests for Scanner scan results storage
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
using Dapper;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Options;
|
||||
@@ -64,6 +65,8 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
// Arrange
|
||||
var manifest1 = CreateManifest("sha256:manifest1");
|
||||
var manifest2 = CreateManifest("sha256:manifest1"); // Same hash
|
||||
await EnsureScanAsync(manifest1.ScanId);
|
||||
await EnsureScanAsync(manifest2.ScanId);
|
||||
|
||||
// Act
|
||||
var saved1 = await _manifestRepository.SaveAsync(manifest1);
|
||||
@@ -94,6 +97,7 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
{
|
||||
// Arrange
|
||||
var manifest = CreateManifest("sha256:consistent");
|
||||
await EnsureScanAsync(manifest.ScanId);
|
||||
await _manifestRepository.SaveAsync(manifest);
|
||||
|
||||
// Act - Query same hash multiple times
|
||||
@@ -121,6 +125,7 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
// Arrange
|
||||
var scanId = Guid.NewGuid();
|
||||
var manifest = CreateManifest("sha256:byscan", scanId);
|
||||
await EnsureScanAsync(scanId);
|
||||
await _manifestRepository.SaveAsync(manifest);
|
||||
|
||||
// Act - Query same scan ID multiple times
|
||||
@@ -144,6 +149,7 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
{
|
||||
// Arrange
|
||||
var manifest = CreateManifest("sha256:complete");
|
||||
await EnsureScanAsync(manifest.ScanId);
|
||||
var saved = await _manifestRepository.SaveAsync(manifest);
|
||||
|
||||
var completedAt1 = DateTimeOffset.UtcNow;
|
||||
@@ -191,6 +197,7 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
// Act
|
||||
foreach (var manifest in manifests)
|
||||
{
|
||||
await EnsureScanAsync(manifest.ScanId);
|
||||
await _manifestRepository.SaveAsync(manifest);
|
||||
}
|
||||
|
||||
@@ -210,6 +217,7 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
var scanId = Guid.NewGuid();
|
||||
var manifest1 = CreateManifest("sha256:retry1", scanId);
|
||||
var manifest2 = CreateManifest("sha256:retry2", scanId);
|
||||
await EnsureScanAsync(scanId);
|
||||
|
||||
// Act
|
||||
await _manifestRepository.SaveAsync(manifest1);
|
||||
@@ -233,6 +241,19 @@ public sealed class ScanResultIdempotencyTests : IAsyncLifetime
|
||||
ManifestContent = """{"version": "1.0", "scanner": "stellaops"}""",
|
||||
ScannerVersion = "1.0.0"
|
||||
};
|
||||
|
||||
private async Task EnsureScanAsync(Guid scanId)
|
||||
{
|
||||
var schemaName = _dataSource.SchemaName ?? ScannerDataSource.DefaultSchema;
|
||||
var sql = $"""
|
||||
INSERT INTO {schemaName}.scans (scan_id)
|
||||
VALUES (@ScanId)
|
||||
ON CONFLICT DO NOTHING
|
||||
""";
|
||||
|
||||
await using var connection = await _dataSource.OpenSystemConnectionAsync();
|
||||
await connection.ExecuteAsync(sql, new { ScanId = scanId });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user