Merge all changes
This commit is contained in:
@@ -89,7 +89,7 @@ public class VerdictAttestationIntegrationTests
|
||||
NullLogger<VerdictAttestationService>.Instance);
|
||||
|
||||
// Act
|
||||
var verdictId = await service.AttestVerdictAsync(trace, CancellationToken.None);
|
||||
var verdictId = await service.AttestVerdictAsync(trace, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
verdictId.Should().NotBeNullOrEmpty();
|
||||
@@ -155,7 +155,7 @@ public class VerdictAttestationIntegrationTests
|
||||
NullLogger<VerdictAttestationService>.Instance);
|
||||
|
||||
// Act
|
||||
var verdictId = await service.AttestVerdictAsync(trace, CancellationToken.None);
|
||||
var verdictId = await service.AttestVerdictAsync(trace, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Service returns null on failure
|
||||
verdictId.Should().BeNull();
|
||||
@@ -200,7 +200,7 @@ public class VerdictAttestationIntegrationTests
|
||||
NullLogger<VerdictAttestationService>.Instance);
|
||||
|
||||
// Act
|
||||
var verdictId = await service.AttestVerdictAsync(trace, CancellationToken.None);
|
||||
var verdictId = await service.AttestVerdictAsync(trace, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Service returns null on timeout/failure
|
||||
verdictId.Should().BeNull();
|
||||
|
||||
@@ -330,7 +330,7 @@ public sealed class BudgetEnforcementIntegrationTests
|
||||
ReleaseId = "jan-release",
|
||||
RiskPoints = 50,
|
||||
ConsumedAt = DateTimeOffset.UtcNow
|
||||
}, CancellationToken.None);
|
||||
}, TestContext.Current.CancellationToken);
|
||||
|
||||
await _ledger.GetBudgetAsync(serviceId, window2);
|
||||
await _store.AddEntryAsync(new BudgetEntry
|
||||
@@ -341,7 +341,7 @@ public sealed class BudgetEnforcementIntegrationTests
|
||||
ReleaseId = "feb-release",
|
||||
RiskPoints = 30,
|
||||
ConsumedAt = DateTimeOffset.UtcNow
|
||||
}, CancellationToken.None);
|
||||
}, TestContext.Current.CancellationToken);
|
||||
|
||||
// Act
|
||||
var historyW1 = await _ledger.GetHistoryAsync(serviceId, window1);
|
||||
|
||||
@@ -149,7 +149,7 @@ public sealed class IncrementalOrchestratorTests
|
||||
"tenant1", "ADV-001", "CVE-001", ["pkg:npm/test"],
|
||||
"test", timeProvider.GetUtcNow(), timeProvider.GetUtcNow()));
|
||||
|
||||
var result = await orchestrator.ProcessAsync(CancellationToken.None);
|
||||
var result = await orchestrator.ProcessAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
result.TotalEventsRead.Should().Be(1);
|
||||
result.BatchesProcessed.Should().Be(1);
|
||||
@@ -173,11 +173,11 @@ public sealed class IncrementalOrchestratorTests
|
||||
"test", timeProvider.GetUtcNow(), timeProvider.GetUtcNow());
|
||||
|
||||
// Mark as already seen
|
||||
await idempotencyStore.MarkSeenAsync(evt.EventId, timeProvider.GetUtcNow(), CancellationToken.None);
|
||||
await idempotencyStore.MarkSeenAsync(evt.EventId, timeProvider.GetUtcNow(), TestContext.Current.CancellationToken);
|
||||
|
||||
eventSource.Enqueue(evt);
|
||||
|
||||
var result = await orchestrator.ProcessAsync(CancellationToken.None);
|
||||
var result = await orchestrator.ProcessAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
result.TotalEventsRead.Should().Be(1);
|
||||
result.EventsSkippedDuplicate.Should().Be(1);
|
||||
@@ -208,7 +208,7 @@ public sealed class IncrementalOrchestratorTests
|
||||
|
||||
eventSource.Enqueue(evt);
|
||||
|
||||
var result = await orchestrator.ProcessAsync(CancellationToken.None);
|
||||
var result = await orchestrator.ProcessAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
result.TotalEventsRead.Should().Be(1);
|
||||
result.EventsSkippedOld.Should().Be(1);
|
||||
@@ -235,7 +235,7 @@ public sealed class IncrementalOrchestratorTests
|
||||
"tenant2", "ADV-002", "CVE-002", [], "test",
|
||||
timeProvider.GetUtcNow(), timeProvider.GetUtcNow()));
|
||||
|
||||
var result = await orchestrator.ProcessAsync(CancellationToken.None);
|
||||
var result = await orchestrator.ProcessAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
result.BatchesProcessed.Should().Be(2); // One per tenant
|
||||
submitter.SubmittedBatches.Select(b => b.TenantId).Should()
|
||||
@@ -266,7 +266,7 @@ public sealed class IncrementalOrchestratorTests
|
||||
timeProvider.GetUtcNow(), timeProvider.GetUtcNow(),
|
||||
priority: PolicyChangePriority.Emergency));
|
||||
|
||||
await orchestrator.ProcessAsync(CancellationToken.None);
|
||||
await orchestrator.ProcessAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
// Emergency should be processed first (separate batch due to priority)
|
||||
submitter.SubmittedBatches.Should().HaveCount(2);
|
||||
|
||||
@@ -48,7 +48,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
profile,
|
||||
"alice@example.com",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -76,7 +76,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
profile,
|
||||
"alice@example.com",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -97,7 +97,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
"alice@example.com",
|
||||
"Deprecated in favor of v2.0.0",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -119,7 +119,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
"alice@example.com",
|
||||
"Increased high/critical thresholds",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -143,7 +143,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
"suppress",
|
||||
"False positive confirmed by security team",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -167,7 +167,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
"alice@example.com",
|
||||
"override-001",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -190,7 +190,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
highImpactCount: 5,
|
||||
completedAt: _timeProvider.GetUtcNow(),
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -224,7 +224,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
lifecycleEvent,
|
||||
profile,
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -254,7 +254,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
lifecycleEvent,
|
||||
profile,
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -283,7 +283,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
lifecycleEvent,
|
||||
profile: null,
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(_publisher.PublishedEvents);
|
||||
@@ -311,7 +311,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
profile,
|
||||
"alice@example.com",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(_publisher.PublishedEvents);
|
||||
@@ -336,7 +336,7 @@ public sealed class PolicyProfileNotificationServiceTests
|
||||
profile,
|
||||
"alice@example.com",
|
||||
"abc123hash",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - no exception thrown
|
||||
Assert.True(true);
|
||||
|
||||
@@ -26,7 +26,7 @@ public sealed class PolicyBundleServiceTests
|
||||
var services = CreateServices();
|
||||
var request = new PolicyBundleRequest(new PolicyDslPayload("stella-dsl@1", BaselineDsl), SigningKeyId: "test-key");
|
||||
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, CancellationToken.None);
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(response.Success);
|
||||
Assert.NotNull(response.Digest);
|
||||
@@ -41,7 +41,7 @@ public sealed class PolicyBundleServiceTests
|
||||
var services = CreateServices();
|
||||
var request = new PolicyBundleRequest(new PolicyDslPayload("unknown", "policy bad"), SigningKeyId: null);
|
||||
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, CancellationToken.None);
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(response.Success);
|
||||
Assert.Null(response.Digest);
|
||||
@@ -55,7 +55,7 @@ public sealed class PolicyBundleServiceTests
|
||||
var services = CreateServices();
|
||||
var request = new PolicyBundleRequest(new PolicyDslPayload("stella-dsl@1", BaselineDsl), SigningKeyId: "test-key");
|
||||
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, CancellationToken.None);
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(response.Success);
|
||||
Assert.NotNull(response.AocMetadata);
|
||||
@@ -83,13 +83,13 @@ public sealed class PolicyBundleServiceTests
|
||||
SigningKeyId: "test-key",
|
||||
Provenance: provenance);
|
||||
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, CancellationToken.None);
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(response.Success);
|
||||
Assert.NotNull(response.AocMetadata);
|
||||
|
||||
// Verify bundle record has provenance stored
|
||||
var bundle = await services.Repository.GetBundleAsync("pack-1", 1, CancellationToken.None);
|
||||
var bundle = await services.Repository.GetBundleAsync("pack-1", 1, TestContext.Current.CancellationToken);
|
||||
Assert.NotNull(bundle);
|
||||
Assert.NotNull(bundle!.AocMetadata);
|
||||
Assert.NotNull(bundle.AocMetadata!.Provenance);
|
||||
@@ -107,7 +107,7 @@ public sealed class PolicyBundleServiceTests
|
||||
var services = CreateServices();
|
||||
var request = new PolicyBundleRequest(new PolicyDslPayload("unknown", "policy bad"), SigningKeyId: null);
|
||||
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, CancellationToken.None);
|
||||
var response = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(response.Success);
|
||||
Assert.Null(response.AocMetadata);
|
||||
@@ -121,8 +121,8 @@ public sealed class PolicyBundleServiceTests
|
||||
var request1 = new PolicyBundleRequest(new PolicyDslPayload("stella-dsl@1", BaselineDsl), SigningKeyId: "test-key");
|
||||
var request2 = new PolicyBundleRequest(new PolicyDslPayload("stella-dsl@1", BaselineDsl), SigningKeyId: "test-key");
|
||||
|
||||
var response1 = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request1, CancellationToken.None);
|
||||
var response2 = await services.BundleService.CompileAndStoreAsync("pack-2", 1, request2, CancellationToken.None);
|
||||
var response1 = await services.BundleService.CompileAndStoreAsync("pack-1", 1, request1, TestContext.Current.CancellationToken);
|
||||
var response2 = await services.BundleService.CompileAndStoreAsync("pack-2", 1, request2, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(response1.AocMetadata);
|
||||
Assert.NotNull(response2.AocMetadata);
|
||||
|
||||
@@ -13,10 +13,10 @@ public class PolicyPackRepositoryTests
|
||||
[Fact]
|
||||
public async Task ActivateRevision_WithSingleApprover_ActivatesImmediately()
|
||||
{
|
||||
await repository.CreateAsync("pack-1", "Pack", CancellationToken.None);
|
||||
await repository.UpsertRevisionAsync("pack-1", 1, requiresTwoPersonApproval: false, PolicyRevisionStatus.Approved, CancellationToken.None);
|
||||
await repository.CreateAsync("pack-1", "Pack", TestContext.Current.CancellationToken);
|
||||
await repository.UpsertRevisionAsync("pack-1", 1, requiresTwoPersonApproval: false, PolicyRevisionStatus.Approved, TestContext.Current.CancellationToken);
|
||||
|
||||
var result = await repository.RecordActivationAsync("pack-1", 1, "alice", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
||||
var result = await repository.RecordActivationAsync("pack-1", 1, "alice", DateTimeOffset.UtcNow, null, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(PolicyActivationResultStatus.Activated, result.Status);
|
||||
Assert.NotNull(result.Revision);
|
||||
@@ -28,18 +28,18 @@ public class PolicyPackRepositoryTests
|
||||
[Fact]
|
||||
public async Task ActivateRevision_WithTwoPersonRequirement_ReturnsPendingUntilSecondApproval()
|
||||
{
|
||||
await repository.CreateAsync("pack-2", "Pack", CancellationToken.None);
|
||||
await repository.UpsertRevisionAsync("pack-2", 1, requiresTwoPersonApproval: true, PolicyRevisionStatus.Approved, CancellationToken.None);
|
||||
await repository.CreateAsync("pack-2", "Pack", TestContext.Current.CancellationToken);
|
||||
await repository.UpsertRevisionAsync("pack-2", 1, requiresTwoPersonApproval: true, PolicyRevisionStatus.Approved, TestContext.Current.CancellationToken);
|
||||
|
||||
var first = await repository.RecordActivationAsync("pack-2", 1, "alice", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
||||
var first = await repository.RecordActivationAsync("pack-2", 1, "alice", DateTimeOffset.UtcNow, null, TestContext.Current.CancellationToken);
|
||||
Assert.Equal(PolicyActivationResultStatus.PendingSecondApproval, first.Status);
|
||||
Assert.Equal(PolicyRevisionStatus.Approved, first.Revision!.Status);
|
||||
Assert.Single(first.Revision.Approvals);
|
||||
|
||||
var duplicate = await repository.RecordActivationAsync("pack-2", 1, "alice", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
||||
var duplicate = await repository.RecordActivationAsync("pack-2", 1, "alice", DateTimeOffset.UtcNow, null, TestContext.Current.CancellationToken);
|
||||
Assert.Equal(PolicyActivationResultStatus.DuplicateApproval, duplicate.Status);
|
||||
|
||||
var second = await repository.RecordActivationAsync("pack-2", 1, "bob", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
||||
var second = await repository.RecordActivationAsync("pack-2", 1, "bob", DateTimeOffset.UtcNow, null, TestContext.Current.CancellationToken);
|
||||
Assert.Equal(PolicyActivationResultStatus.Activated, second.Status);
|
||||
Assert.Equal(PolicyRevisionStatus.Active, second.Revision!.Status);
|
||||
Assert.Equal(2, second.Revision.Approvals.Length);
|
||||
|
||||
@@ -48,7 +48,7 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
|
||||
var request = CreateRequest("pack-1", 1, severity: "Critical");
|
||||
|
||||
var response = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("pack-1", response.PackId);
|
||||
Assert.Equal(1, response.Version);
|
||||
@@ -67,11 +67,11 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
var request = CreateRequest("pack-1", 1, severity: "High");
|
||||
|
||||
// First call - cache miss
|
||||
var response1 = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response1 = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
Assert.False(response1.Cached);
|
||||
|
||||
// Second call - cache hit
|
||||
var response2 = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response2 = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
Assert.True(response2.Cached);
|
||||
Assert.Equal(CacheSource.InMemory, response2.CacheSource);
|
||||
Assert.Equal(response1.Status, response2.Status);
|
||||
@@ -88,12 +88,12 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
var request = CreateRequest("pack-1", 1, severity: "Medium");
|
||||
|
||||
// First call
|
||||
var response1 = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response1 = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
Assert.False(response1.Cached);
|
||||
|
||||
// Second call with bypass
|
||||
var bypassRequest = request with { BypassCache = true };
|
||||
var response2 = await harness.Service.EvaluateAsync(bypassRequest, CancellationToken.None);
|
||||
var response2 = await harness.Service.EvaluateAsync(bypassRequest, TestContext.Current.CancellationToken);
|
||||
Assert.False(response2.Cached);
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
var request = CreateRequest("non-existent", 1, severity: "Low");
|
||||
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(
|
||||
() => harness.Service.EvaluateAsync(request, CancellationToken.None));
|
||||
() => harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken));
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -117,13 +117,13 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
|
||||
var request = CreateRequest("pack-1", 1, severity: "High");
|
||||
|
||||
var response1 = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response1 = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
// Create a new harness with fresh cache
|
||||
var harness2 = CreateHarness();
|
||||
await harness2.StoreTestPolicyAsync("pack-1", 1, TestPolicy);
|
||||
|
||||
var response2 = await harness2.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response2 = await harness2.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
// Same inputs should produce same correlation ID
|
||||
Assert.Equal(response1.CorrelationId, response2.CorrelationId);
|
||||
@@ -143,7 +143,7 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
CreateRequest("pack-1", 1, severity: "Medium", subjectPurl: "pkg:npm/axios@1.0.0"),
|
||||
};
|
||||
|
||||
var responses = await harness.Service.EvaluateBatchAsync(requests, CancellationToken.None);
|
||||
var responses = await harness.Service.EvaluateBatchAsync(requests, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(3, responses.Count);
|
||||
}
|
||||
@@ -157,7 +157,7 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
|
||||
// Pre-populate cache
|
||||
var request = CreateRequest("pack-1", 1, severity: "Critical");
|
||||
await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
var requests = new[]
|
||||
{
|
||||
@@ -165,7 +165,7 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
CreateRequest("pack-1", 1, severity: "High"), // New
|
||||
};
|
||||
|
||||
var responses = await harness.Service.EvaluateBatchAsync(requests, CancellationToken.None);
|
||||
var responses = await harness.Service.EvaluateBatchAsync(requests, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, responses.Count);
|
||||
Assert.Contains(responses, r => r.Cached);
|
||||
@@ -182,8 +182,8 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
var request1 = CreateRequest("pack-1", 1, severity: "High");
|
||||
var request2 = CreateRequest("pack-1", 1, severity: "Critical");
|
||||
|
||||
var response1 = await harness.Service.EvaluateAsync(request1, CancellationToken.None);
|
||||
var response2 = await harness.Service.EvaluateAsync(request2, CancellationToken.None);
|
||||
var response1 = await harness.Service.EvaluateAsync(request1, TestContext.Current.CancellationToken);
|
||||
var response2 = await harness.Service.EvaluateAsync(request2, TestContext.Current.CancellationToken);
|
||||
|
||||
// Both should be cache misses (different severity = different context)
|
||||
Assert.False(response1.Cached);
|
||||
@@ -233,11 +233,11 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
Metadata = new Dictionary<string, object?>()
|
||||
};
|
||||
|
||||
await harness.ReachabilityStore.SaveAsync(fact, CancellationToken.None);
|
||||
await harness.ReachabilityStore.SaveAsync(fact, TestContext.Current.CancellationToken);
|
||||
|
||||
var request = CreateRequest("pack-2", 1, severity: "Low");
|
||||
|
||||
var response = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("warn", response.Status);
|
||||
}
|
||||
@@ -289,10 +289,10 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
Metadata = new Dictionary<string, object?>()
|
||||
};
|
||||
|
||||
await harness.ReachabilityStore.SaveAsync(fact, CancellationToken.None);
|
||||
await harness.ReachabilityStore.SaveAsync(fact, TestContext.Current.CancellationToken);
|
||||
|
||||
var request = CreateRequest("pack-3", 1, severity: "Low");
|
||||
var response = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("under_investigation", response.Status);
|
||||
}
|
||||
@@ -344,10 +344,10 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
Metadata = new Dictionary<string, object?>()
|
||||
};
|
||||
|
||||
await harness.ReachabilityStore.SaveAsync(fact, CancellationToken.None);
|
||||
await harness.ReachabilityStore.SaveAsync(fact, TestContext.Current.CancellationToken);
|
||||
|
||||
var request = CreateRequest("pack-4", 1, severity: "Low");
|
||||
var response = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("under_investigation", response.Status);
|
||||
}
|
||||
@@ -399,10 +399,10 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
Metadata = new Dictionary<string, object?>()
|
||||
};
|
||||
|
||||
await harness.ReachabilityStore.SaveAsync(fact, CancellationToken.None);
|
||||
await harness.ReachabilityStore.SaveAsync(fact, TestContext.Current.CancellationToken);
|
||||
|
||||
var request = CreateRequest("pack-5", 1, severity: "Low");
|
||||
var response = await harness.Service.EvaluateAsync(request, CancellationToken.None);
|
||||
var response = await harness.Service.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("not_affected", response.Status);
|
||||
}
|
||||
@@ -489,7 +489,7 @@ public sealed class PolicyRuntimeEvaluationServiceTests
|
||||
{
|
||||
var bundleService = new PolicyBundleService(CompilationService, Repository, TimeProvider.System);
|
||||
var request = new PolicyBundleRequest(new PolicyDslPayload("stella-dsl@1", dsl), SigningKeyId: null);
|
||||
await bundleService.CompileAndStoreAsync(packId, version, request, CancellationToken.None);
|
||||
await bundleService.CompileAndStoreAsync(packId, version, request, TestContext.Current.CancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,13 +22,13 @@ public sealed class PolicyRuntimeEvaluatorTests
|
||||
Size: 4,
|
||||
CreatedAt: DateTimeOffset.UnixEpoch,
|
||||
Payload: new byte[] { 1, 2, 3, 4 }.ToImmutableArray()),
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
var evaluator = new PolicyRuntimeEvaluator(repo);
|
||||
var request = new PolicyEvaluationRequest("pack-1", 1, "subject-a");
|
||||
|
||||
var first = await evaluator.EvaluateAsync(request, CancellationToken.None);
|
||||
var second = await evaluator.EvaluateAsync(request, CancellationToken.None);
|
||||
var first = await evaluator.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
var second = await evaluator.EvaluateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(first.Decision, second.Decision);
|
||||
Assert.False(first.Cached);
|
||||
@@ -44,6 +44,6 @@ public sealed class PolicyRuntimeEvaluatorTests
|
||||
var evaluator = new PolicyRuntimeEvaluator(new InMemoryPolicyPackRepository());
|
||||
var request = new PolicyEvaluationRequest("pack-x", 1, "subject-a");
|
||||
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(() => evaluator.EvaluateAsync(request, CancellationToken.None));
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(() => evaluator.EvaluateAsync(request, TestContext.Current.CancellationToken));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public sealed class PolicyWorkerServiceTests
|
||||
|
||||
await jobStore.SaveAsync(job);
|
||||
|
||||
var result = await service.ExecuteAsync(new WorkerRunRequest(job.JobId), CancellationToken.None);
|
||||
var result = await service.ExecuteAsync(new WorkerRunRequest(job.JobId), TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(job.JobId, result.JobId);
|
||||
Assert.Equal("worker-stub", result.WorkerId);
|
||||
|
||||
@@ -22,7 +22,7 @@ public sealed class ExceptionLifecycleServiceTests
|
||||
options,
|
||||
NullLogger<ExceptionLifecycleService>.Instance);
|
||||
|
||||
await service.ProcessOnceAsync(CancellationToken.None);
|
||||
await service.ProcessOnceAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
repository.ExpiredTenants.Should().BeEmpty();
|
||||
}
|
||||
@@ -42,7 +42,7 @@ public sealed class ExceptionLifecycleServiceTests
|
||||
Reason = "test-fixture",
|
||||
ExpiresAt = new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero),
|
||||
CreatedAt = new DateTimeOffset(2025, 12, 1, 0, 0, 0, TimeSpan.Zero)
|
||||
}, CancellationToken.None);
|
||||
}, TestContext.Current.CancellationToken);
|
||||
|
||||
var configured = new PolicyEngineOptions();
|
||||
configured.ResourceServer.RequiredTenants.Add("tenant-b");
|
||||
@@ -52,9 +52,9 @@ public sealed class ExceptionLifecycleServiceTests
|
||||
Microsoft.Extensions.Options.Options.Create(configured),
|
||||
NullLogger<ExceptionLifecycleService>.Instance);
|
||||
|
||||
await service.ProcessOnceAsync(CancellationToken.None);
|
||||
await service.ProcessOnceAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
var updated = await repo.GetByIdAsync("tenant-b", id, CancellationToken.None);
|
||||
var updated = await repo.GetByIdAsync("tenant-b", id, TestContext.Current.CancellationToken);
|
||||
updated!.Status.Should().Be(ExceptionStatus.Expired);
|
||||
updated.RevokedAt.Should().NotBeNull();
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ public sealed class RecheckEvidenceMigrationTests : IAsyncLifetime
|
||||
[Fact]
|
||||
public async Task Migration_CreatesRecheckAndEvidenceTables()
|
||||
{
|
||||
await using var connection = await _dataSource.OpenConnectionAsync("default", "reader", CancellationToken.None);
|
||||
await using var connection = await _dataSource.OpenConnectionAsync("default", "reader", TestContext.Current.CancellationToken);
|
||||
|
||||
await AssertTableExistsAsync(connection, "policy.recheck_policies");
|
||||
await AssertTableExistsAsync(connection, "policy.evidence_hooks");
|
||||
|
||||
@@ -32,7 +32,7 @@ public sealed class BudgetLedgerTests
|
||||
public async Task GetBudget_ReturnsExistingBudget()
|
||||
{
|
||||
var existing = CreateBudget("existing-service", consumed: 50);
|
||||
await _store.CreateAsync(existing, CancellationToken.None);
|
||||
await _store.CreateAsync(existing, TestContext.Current.CancellationToken);
|
||||
|
||||
var budget = await _ledger.GetBudgetAsync("existing-service", _currentWindow);
|
||||
|
||||
@@ -43,7 +43,7 @@ public sealed class BudgetLedgerTests
|
||||
public async Task Consume_DeductsBudget()
|
||||
{
|
||||
var initial = CreateBudget("test-service", consumed: 50);
|
||||
await _store.CreateAsync(initial, CancellationToken.None);
|
||||
await _store.CreateAsync(initial, TestContext.Current.CancellationToken);
|
||||
|
||||
var result = await _ledger.ConsumeAsync("test-service", 20, "release-1");
|
||||
|
||||
@@ -58,7 +58,7 @@ public sealed class BudgetLedgerTests
|
||||
public async Task Consume_FailsWhenInsufficientBudget()
|
||||
{
|
||||
var initial = CreateBudget("test-service", consumed: 190);
|
||||
await _store.CreateAsync(initial, CancellationToken.None);
|
||||
await _store.CreateAsync(initial, TestContext.Current.CancellationToken);
|
||||
|
||||
var result = await _ledger.ConsumeAsync("test-service", 20, "release-1");
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ public sealed class PolicyBinderTests
|
||||
Strict = true,
|
||||
};
|
||||
|
||||
var exitCode = await cli.RunAsync(options, CancellationToken.None);
|
||||
var exitCode = await cli.RunAsync(options, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, exitCode);
|
||||
Assert.Contains("WARNING", output.ToString());
|
||||
|
||||
@@ -35,7 +35,7 @@ rules:
|
||||
var timeProvider = new FakeTimeProvider();
|
||||
var store = new PolicySnapshotStore(snapshotRepo, auditRepo, timeProvider, null, NullLogger<PolicySnapshotStore>.Instance);
|
||||
|
||||
await store.SaveAsync(new PolicySnapshotContent(yaml, PolicyDocumentFormat.Yaml, "tester", null, null), CancellationToken.None);
|
||||
await store.SaveAsync(new PolicySnapshotContent(yaml, PolicyDocumentFormat.Yaml, "tester", null, null), TestContext.Current.CancellationToken);
|
||||
|
||||
var service = new PolicyPreviewService(store, NullLogger<PolicyPreviewService>.Instance);
|
||||
|
||||
@@ -51,11 +51,11 @@ rules:
|
||||
"sha256:abc",
|
||||
findings,
|
||||
baseline),
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(response.Success);
|
||||
Assert.Equal(1, response.ChangedCount);
|
||||
var diff1 = Assert.Single(response.Diffs.Where(diff => diff.Projected.FindingId == "finding-1"));
|
||||
var diff1 = Assert.Single(response.Diffs, diff => diff.Projected.FindingId == "finding-1");
|
||||
Assert.Equal(PolicyVerdictStatus.Pass, diff1.Baseline.Status);
|
||||
Assert.Equal(PolicyVerdictStatus.Blocked, diff1.Projected.Status);
|
||||
Assert.Equal("Block Critical", diff1.Projected.RuleName);
|
||||
@@ -94,7 +94,7 @@ rules:
|
||||
baseline,
|
||||
SnapshotOverride: null,
|
||||
ProposedPolicy: new PolicySnapshotContent(yaml, PolicyDocumentFormat.Yaml, "tester", null, "dev override")),
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(response.Success);
|
||||
var diff = Assert.Single(response.Diffs);
|
||||
@@ -122,7 +122,7 @@ rules:
|
||||
SnapshotOverride: null,
|
||||
ProposedPolicy: new PolicySnapshotContent(invalid, PolicyDocumentFormat.Yaml, null, null, null));
|
||||
|
||||
var response = await service.PreviewAsync(request, CancellationToken.None);
|
||||
var response = await service.PreviewAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(response.Success);
|
||||
Assert.NotEmpty(response.Issues);
|
||||
@@ -160,7 +160,7 @@ rules:
|
||||
Assert.True(binding.Document.Rules[0].Action.Quiet);
|
||||
|
||||
var store = new PolicySnapshotStore(new InMemoryPolicySnapshotRepository(), new InMemoryPolicyAuditRepository(), TimeProvider.System, null, NullLogger<PolicySnapshotStore>.Instance);
|
||||
await store.SaveAsync(new PolicySnapshotContent(yaml, PolicyDocumentFormat.Yaml, "tester", null, "quiet test"), CancellationToken.None);
|
||||
await store.SaveAsync(new PolicySnapshotContent(yaml, PolicyDocumentFormat.Yaml, "tester", null, "quiet test"), TestContext.Current.CancellationToken);
|
||||
var snapshot = await store.GetLatestAsync();
|
||||
Assert.NotNull(snapshot);
|
||||
Assert.True(snapshot!.Document.Rules[0].Action.Quiet);
|
||||
@@ -178,7 +178,7 @@ rules:
|
||||
"sha256:quiet",
|
||||
findings,
|
||||
baseline),
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(response.Success);
|
||||
var verdict = Assert.Single(response.Diffs).Projected;
|
||||
|
||||
@@ -29,7 +29,7 @@ rules:
|
||||
|
||||
var content = new PolicySnapshotContent(BasePolicyYaml, PolicyDocumentFormat.Yaml, "cli", "test", null);
|
||||
|
||||
var result = await store.SaveAsync(content, CancellationToken.None);
|
||||
var result = await store.SaveAsync(content, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.True(result.Created);
|
||||
@@ -59,11 +59,11 @@ rules:
|
||||
var store = new PolicySnapshotStore(snapshotRepo, auditRepo, timeProvider, null, NullLogger<PolicySnapshotStore>.Instance);
|
||||
|
||||
var content = new PolicySnapshotContent(BasePolicyYaml, PolicyDocumentFormat.Yaml, "cli", "test", null);
|
||||
var first = await store.SaveAsync(content, CancellationToken.None);
|
||||
var first = await store.SaveAsync(content, TestContext.Current.CancellationToken);
|
||||
Assert.True(first.Created);
|
||||
|
||||
timeProvider.Advance(TimeSpan.FromHours(1));
|
||||
var second = await store.SaveAsync(content, CancellationToken.None);
|
||||
var second = await store.SaveAsync(content, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(second.Success);
|
||||
Assert.False(second.Created);
|
||||
@@ -86,7 +86,7 @@ rules:
|
||||
const string invalidYaml = "version: '1.0'\nrules: []";
|
||||
var content = new PolicySnapshotContent(invalidYaml, PolicyDocumentFormat.Yaml, null, null, null);
|
||||
|
||||
var result = await store.SaveAsync(content, CancellationToken.None);
|
||||
var result = await store.SaveAsync(content, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(result.Success);
|
||||
Assert.False(result.Created);
|
||||
|
||||
Reference in New Issue
Block a user