Fix build and code structure improvements. New but essential UI functionality. CI improvements. Documentation improvements. AI module improvements.
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -6,11 +6,11 @@ public static class TaskRunnerTelemetry
|
||||
{
|
||||
public const string MeterName = "stellaops.taskrunner";
|
||||
|
||||
internal static readonly Meter Meter = new(MeterName);
|
||||
internal static readonly Histogram<double> StepDurationMs =
|
||||
public static readonly Meter Meter = new(MeterName);
|
||||
public static readonly Histogram<double> StepDurationMs =
|
||||
Meter.CreateHistogram<double>("taskrunner.step.duration.ms", unit: "ms");
|
||||
internal static readonly Counter<long> StepRetryCount =
|
||||
public static readonly Counter<long> StepRetryCount =
|
||||
Meter.CreateCounter<long>("taskrunner.step.retry.count");
|
||||
internal static readonly UpDownCounter<long> RunningSteps =
|
||||
public static readonly UpDownCounter<long> RunningSteps =
|
||||
Meter.CreateUpDownCounter<long>("taskrunner.steps.running");
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="YamlDotNet" Version="13.7.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="YamlDotNet" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<ProjectReference Include="..\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ public sealed class ApiDeprecationTests
|
||||
NullLogger<LoggingDeprecationNotificationService>.Instance,
|
||||
optionsMonitor);
|
||||
|
||||
var upcoming = await service.GetUpcomingDeprecationsAsync(90, TestContext.Current.CancellationToken);
|
||||
var upcoming = await service.GetUpcomingDeprecationsAsync(90, CancellationToken.None);
|
||||
|
||||
Assert.Single(upcoming);
|
||||
Assert.Equal("/v1/soon/*", upcoming[0].EndpointPath);
|
||||
@@ -97,7 +97,7 @@ public sealed class ApiDeprecationTests
|
||||
NullLogger<LoggingDeprecationNotificationService>.Instance,
|
||||
optionsMonitor);
|
||||
|
||||
var upcoming = await service.GetUpcomingDeprecationsAsync(90, TestContext.Current.CancellationToken);
|
||||
var upcoming = await service.GetUpcomingDeprecationsAsync(90, CancellationToken.None);
|
||||
|
||||
Assert.Equal(3, upcoming.Count);
|
||||
Assert.Equal("/v1/first/*", upcoming[0].EndpointPath);
|
||||
|
||||
@@ -92,7 +92,7 @@ public sealed class BundleImportEvidenceTests
|
||||
|
||||
var evidence = CreateTestEvidence();
|
||||
|
||||
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
|
||||
var result = await service.CaptureAsync(evidence, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.NotNull(result.Snapshot);
|
||||
@@ -111,7 +111,7 @@ public sealed class BundleImportEvidenceTests
|
||||
|
||||
var evidence = CreateTestEvidence();
|
||||
|
||||
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
|
||||
var result = await service.CaptureAsync(evidence, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
var snapshot = result.Snapshot!;
|
||||
@@ -136,7 +136,7 @@ public sealed class BundleImportEvidenceTests
|
||||
|
||||
var evidence = CreateTestEvidence();
|
||||
|
||||
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
|
||||
var result = await service.CaptureAsync(evidence, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
var snapshot = result.Snapshot!;
|
||||
@@ -164,7 +164,7 @@ public sealed class BundleImportEvidenceTests
|
||||
|
||||
var evidence = CreateTestEvidence();
|
||||
|
||||
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
|
||||
var result = await service.CaptureAsync(evidence, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.Equal(1, timelineSink.Count);
|
||||
@@ -182,9 +182,9 @@ public sealed class BundleImportEvidenceTests
|
||||
NullLogger<BundleImportEvidenceService>.Instance);
|
||||
|
||||
var evidence = CreateTestEvidence();
|
||||
await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
|
||||
await service.CaptureAsync(evidence, CancellationToken.None);
|
||||
|
||||
var retrieved = await service.GetAsync(evidence.JobId, TestContext.Current.CancellationToken);
|
||||
var retrieved = await service.GetAsync(evidence.JobId, CancellationToken.None);
|
||||
|
||||
Assert.NotNull(retrieved);
|
||||
Assert.Equal(evidence.JobId, retrieved.JobId);
|
||||
@@ -200,7 +200,7 @@ public sealed class BundleImportEvidenceTests
|
||||
store,
|
||||
NullLogger<BundleImportEvidenceService>.Instance);
|
||||
|
||||
var retrieved = await service.GetAsync("non-existent-job", TestContext.Current.CancellationToken);
|
||||
var retrieved = await service.GetAsync("non-existent-job", CancellationToken.None);
|
||||
|
||||
Assert.Null(retrieved);
|
||||
}
|
||||
@@ -215,7 +215,7 @@ public sealed class BundleImportEvidenceTests
|
||||
NullLogger<BundleImportEvidenceService>.Instance);
|
||||
|
||||
var evidence = CreateTestEvidence();
|
||||
await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
|
||||
await service.CaptureAsync(evidence, CancellationToken.None);
|
||||
|
||||
var outputPath = Path.Combine(Path.GetTempPath(), $"evidence-{Guid.NewGuid():N}.json");
|
||||
try
|
||||
@@ -223,7 +223,7 @@ public sealed class BundleImportEvidenceTests
|
||||
var result = await service.ExportToPortableBundleAsync(
|
||||
evidence.JobId,
|
||||
outputPath,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.Equal(outputPath, result.OutputPath);
|
||||
@@ -254,7 +254,7 @@ public sealed class BundleImportEvidenceTests
|
||||
var result = await service.ExportToPortableBundleAsync(
|
||||
"non-existent-job",
|
||||
outputPath,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.False(result.Success);
|
||||
Assert.Contains("No evidence found", result.Error);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Text.Json.Nodes;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using StellaOps.TaskRunner.Core.Configuration;
|
||||
@@ -18,7 +18,7 @@ public sealed class BundleIngestionStepExecutorTests
|
||||
{
|
||||
using var temp = new TempDirectory();
|
||||
var source = Path.Combine(temp.Path, "bundle.tgz");
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
await File.WriteAllTextAsync(source, "bundle-data", ct);
|
||||
var checksum = "b9c72134b48cdc15e7a47f2476a41612d2084b763bea0575f5600b22041db7dc"; // sha256 of "bundle-data"
|
||||
|
||||
@@ -50,7 +50,7 @@ public sealed class BundleIngestionStepExecutorTests
|
||||
{
|
||||
using var temp = new TempDirectory();
|
||||
var source = Path.Combine(temp.Path, "bundle.tgz");
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
await File.WriteAllTextAsync(source, "bundle-data", ct);
|
||||
|
||||
var options = Options.Create(new PackRunWorkerOptions { ArtifactsPath = temp.Path });
|
||||
@@ -73,9 +73,8 @@ public sealed class BundleIngestionStepExecutorTests
|
||||
public async Task ExecuteAsync_MissingChecksum_Fails()
|
||||
{
|
||||
using var temp = new TempDirectory();
|
||||
using StellaOps.TestKit;
|
||||
var source = Path.Combine(temp.Path, "bundle.tgz");
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
await File.WriteAllTextAsync(source, "bundle-data", ct);
|
||||
|
||||
var options = Options.Create(new PackRunWorkerOptions { ArtifactsPath = temp.Path });
|
||||
@@ -96,7 +95,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task ExecuteAsync_UnknownUses_NoOpSuccess()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var executor = new BundleIngestionStepExecutor(
|
||||
Options.Create(new PackRunWorkerOptions { ArtifactsPath = Path.GetTempPath() }),
|
||||
NullLogger<BundleIngestionStepExecutor>.Instance);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
using StellaOps.TaskRunner.Infrastructure.Execution;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ public sealed class FilesystemPackRunArtifactReaderTests
|
||||
public async Task ListAsync_ReturnsEmpty_WhenManifestMissing()
|
||||
{
|
||||
using var temp = new TempDir();
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var reader = new FilesystemPackRunArtifactReader(temp.Path);
|
||||
|
||||
var results = await reader.ListAsync("run-absent", ct);
|
||||
@@ -25,11 +25,10 @@ public sealed class FilesystemPackRunArtifactReaderTests
|
||||
public async Task ListAsync_ParsesManifestAndSortsByName()
|
||||
{
|
||||
using var temp = new TempDir();
|
||||
using StellaOps.TestKit;
|
||||
var runId = "run-1";
|
||||
var manifestPath = Path.Combine(temp.Path, "run-1", "artifact-manifest.json");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(manifestPath)!);
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
|
||||
var manifest = new
|
||||
{
|
||||
|
||||
@@ -23,21 +23,21 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
|
||||
public async Task CopiesFileOutputs()
|
||||
{
|
||||
var sourceFile = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid():n}.txt");
|
||||
await File.WriteAllTextAsync(sourceFile, "artifact-content", TestContext.Current.CancellationToken);
|
||||
await File.WriteAllTextAsync(sourceFile, "artifact-content", CancellationToken.None);
|
||||
|
||||
var uploader = CreateUploader();
|
||||
var output = CreateFileOutput("bundle", sourceFile);
|
||||
var context = CreateContext();
|
||||
var state = CreateState(context);
|
||||
|
||||
await uploader.UploadAsync(context, state, new[] { output }, TestContext.Current.CancellationToken);
|
||||
await uploader.UploadAsync(context, state, new[] { output }, CancellationToken.None);
|
||||
|
||||
var runPath = Path.Combine(artifactsRoot, context.RunId);
|
||||
var filesDirectory = Path.Combine(runPath, "files");
|
||||
var copiedFiles = Directory.GetFiles(filesDirectory);
|
||||
Assert.Single(copiedFiles);
|
||||
Assert.Equal("bundle.txt", Path.GetFileName(copiedFiles[0]));
|
||||
Assert.Equal("artifact-content", await File.ReadAllTextAsync(copiedFiles[0], TestContext.Current.CancellationToken));
|
||||
Assert.Equal("artifact-content", await File.ReadAllTextAsync(copiedFiles[0], CancellationToken.None));
|
||||
|
||||
var manifest = await ReadManifestAsync(runPath);
|
||||
Assert.Single(manifest.Outputs);
|
||||
@@ -54,7 +54,7 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
|
||||
var context = CreateContext();
|
||||
var state = CreateState(context);
|
||||
|
||||
await uploader.UploadAsync(context, state, new[] { output }, TestContext.Current.CancellationToken);
|
||||
await uploader.UploadAsync(context, state, new[] { output }, CancellationToken.None);
|
||||
|
||||
var manifest = await ReadManifestAsync(Path.Combine(artifactsRoot, context.RunId));
|
||||
Assert.Equal("missing", manifest.Outputs[0].Status);
|
||||
@@ -69,7 +69,7 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
|
||||
var context = CreateContext();
|
||||
var state = CreateState(context);
|
||||
|
||||
await uploader.UploadAsync(context, state, new[] { output }, TestContext.Current.CancellationToken);
|
||||
await uploader.UploadAsync(context, state, new[] { output }, CancellationToken.None);
|
||||
|
||||
var expressionPath = Path.Combine(artifactsRoot, context.RunId, "expressions", "metadata.json");
|
||||
Assert.True(File.Exists(expressionPath));
|
||||
@@ -124,7 +124,7 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
|
||||
|
||||
private static async Task<ArtifactManifestModel> ReadManifestAsync(string runPath)
|
||||
{
|
||||
var json = await File.ReadAllTextAsync(Path.Combine(runPath, "artifact-manifest.json"), TestContext.Current.CancellationToken);
|
||||
var json = await File.ReadAllTextAsync(Path.Combine(runPath, "artifact-manifest.json"), CancellationToken.None);
|
||||
return JsonSerializer.Deserialize<ArtifactManifestModel>(json, new JsonSerializerOptions(JsonSerializerDefaults.Web))!;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ public sealed class FilesystemPackRunDispatcherTests
|
||||
var root = Path.Combine(Path.GetTempPath(), "StellaOps_TaskRunnerTests", Guid.NewGuid().ToString("n"));
|
||||
Directory.CreateDirectory(root);
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var queuePath = Path.Combine(root, "queue");
|
||||
var archivePath = Path.Combine(root, "archive");
|
||||
|
||||
@@ -38,7 +38,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var result = await service.GenerateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.NotNull(result.Attestation);
|
||||
@@ -74,7 +74,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var result = await service.GenerateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.NotNull(result.Attestation);
|
||||
@@ -112,7 +112,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
await service.GenerateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.Equal(1, timelineSink.Count);
|
||||
var evt = timelineSink.GetEvents()[0];
|
||||
@@ -148,7 +148,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var genResult = await service.GenerateAsync(request, CancellationToken.None);
|
||||
Assert.NotNull(genResult.Attestation);
|
||||
|
||||
var verifyResult = await service.VerifyAsync(
|
||||
@@ -158,7 +158,7 @@ public sealed class PackRunAttestationTests
|
||||
VerifySignature: true,
|
||||
VerifySubjects: true,
|
||||
CheckRevocation: true),
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.True(verifyResult.Valid);
|
||||
Assert.Equal(PackRunSignatureVerificationStatus.Valid, verifyResult.SignatureStatus);
|
||||
@@ -195,7 +195,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var genResult = await service.GenerateAsync(request, CancellationToken.None);
|
||||
Assert.NotNull(genResult.Attestation);
|
||||
|
||||
// Verify with different expected subjects
|
||||
@@ -211,7 +211,7 @@ public sealed class PackRunAttestationTests
|
||||
VerifySignature: false,
|
||||
VerifySubjects: true,
|
||||
CheckRevocation: false),
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.False(verifyResult.Valid);
|
||||
Assert.Equal(PackRunSubjectVerificationStatus.Missing, verifyResult.SubjectStatus);
|
||||
@@ -248,7 +248,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var genResult = await service.GenerateAsync(request, CancellationToken.None);
|
||||
Assert.NotNull(genResult.Attestation);
|
||||
|
||||
// Revoke the attestation
|
||||
@@ -256,7 +256,7 @@ public sealed class PackRunAttestationTests
|
||||
genResult.Attestation.AttestationId,
|
||||
PackRunAttestationStatus.Revoked,
|
||||
"Compromised key",
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
var verifyResult = await service.VerifyAsync(
|
||||
new PackRunAttestationVerificationRequest(
|
||||
@@ -265,7 +265,7 @@ public sealed class PackRunAttestationTests
|
||||
VerifySignature: false,
|
||||
VerifySubjects: false,
|
||||
CheckRevocation: true),
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.False(verifyResult.Valid);
|
||||
Assert.Equal(PackRunRevocationStatus.Revoked, verifyResult.RevocationStatus);
|
||||
@@ -287,7 +287,7 @@ public sealed class PackRunAttestationTests
|
||||
VerifySignature: false,
|
||||
VerifySubjects: false,
|
||||
CheckRevocation: false),
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.False(verifyResult.Valid);
|
||||
Assert.NotNull(verifyResult.Errors);
|
||||
@@ -321,10 +321,10 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
await service.GenerateAsync(request, CancellationToken.None);
|
||||
}
|
||||
|
||||
var attestations = await service.ListByRunAsync("tenant-1", "run-007", TestContext.Current.CancellationToken);
|
||||
var attestations = await service.ListByRunAsync("tenant-1", "run-007", CancellationToken.None);
|
||||
|
||||
Assert.Equal(2, attestations.Count);
|
||||
Assert.All(attestations, a => Assert.Equal("run-007", a.RunId));
|
||||
@@ -354,10 +354,10 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var genResult = await service.GenerateAsync(request, CancellationToken.None);
|
||||
Assert.NotNull(genResult.Attestation);
|
||||
|
||||
var envelope = await service.GetEnvelopeAsync(genResult.Attestation.AttestationId, TestContext.Current.CancellationToken);
|
||||
var envelope = await service.GetEnvelopeAsync(genResult.Attestation.AttestationId, CancellationToken.None);
|
||||
|
||||
Assert.NotNull(envelope);
|
||||
Assert.Equal(PackRunDsseEnvelope.InTotoPayloadType, envelope.PayloadType);
|
||||
@@ -457,7 +457,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: null,
|
||||
Metadata: null);
|
||||
|
||||
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var result = await service.GenerateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.NotNull(result.Attestation);
|
||||
@@ -496,7 +496,7 @@ public sealed class PackRunAttestationTests
|
||||
ResolvedDependencies: dependencies,
|
||||
Metadata: null);
|
||||
|
||||
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
|
||||
var result = await service.GenerateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.NotNull(result.Attestation);
|
||||
|
||||
@@ -251,8 +251,8 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
new List<PackRunEvidenceMaterial>());
|
||||
|
||||
// Act
|
||||
await store.StoreAsync(snapshot, TestContext.Current.CancellationToken);
|
||||
var retrieved = await store.GetAsync(snapshot.SnapshotId, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(snapshot, CancellationToken.None);
|
||||
var retrieved = await store.GetAsync(snapshot.SnapshotId, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(retrieved);
|
||||
@@ -268,7 +268,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
var store = new InMemoryPackRunEvidenceStore();
|
||||
|
||||
// Act
|
||||
var result = await store.GetAsync(Guid.NewGuid(), TestContext.Current.CancellationToken);
|
||||
var result = await store.GetAsync(Guid.NewGuid(), CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -293,12 +293,12 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
PackRunEvidenceSnapshotKind.StepExecution,
|
||||
new List<PackRunEvidenceMaterial>());
|
||||
|
||||
await store.StoreAsync(snapshot1, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(snapshot2, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(otherRunSnapshot, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(snapshot1, CancellationToken.None);
|
||||
await store.StoreAsync(snapshot2, CancellationToken.None);
|
||||
await store.StoreAsync(otherRunSnapshot, CancellationToken.None);
|
||||
|
||||
// Act
|
||||
var results = await store.ListByRunAsync(TestTenantId, TestRunId, TestContext.Current.CancellationToken);
|
||||
var results = await store.ListByRunAsync(TestTenantId, TestRunId, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(2, results.Count);
|
||||
@@ -324,15 +324,15 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
PackRunEvidenceSnapshotKind.ApprovalDecision,
|
||||
new List<PackRunEvidenceMaterial>());
|
||||
|
||||
await store.StoreAsync(stepSnapshot1, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(stepSnapshot2, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(approvalSnapshot, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(stepSnapshot1, CancellationToken.None);
|
||||
await store.StoreAsync(stepSnapshot2, CancellationToken.None);
|
||||
await store.StoreAsync(approvalSnapshot, CancellationToken.None);
|
||||
|
||||
// Act
|
||||
var results = await store.ListByKindAsync(
|
||||
TestTenantId, TestRunId,
|
||||
PackRunEvidenceSnapshotKind.StepExecution,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(2, results.Count);
|
||||
@@ -353,10 +353,10 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
TestTenantId, TestRunId, TestPlanHash,
|
||||
PackRunEvidenceSnapshotKind.RunCompletion, materials);
|
||||
|
||||
await store.StoreAsync(snapshot, TestContext.Current.CancellationToken);
|
||||
await store.StoreAsync(snapshot, CancellationToken.None);
|
||||
|
||||
// Act
|
||||
var result = await store.VerifyAsync(snapshot.SnapshotId, TestContext.Current.CancellationToken);
|
||||
var result = await store.VerifyAsync(snapshot.SnapshotId, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Valid);
|
||||
@@ -373,7 +373,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
var store = new InMemoryPackRunEvidenceStore();
|
||||
|
||||
// Act
|
||||
var result = await store.VerifyAsync(Guid.NewGuid(), TestContext.Current.CancellationToken);
|
||||
var result = await store.VerifyAsync(Guid.NewGuid(), CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Valid);
|
||||
@@ -559,7 +559,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
// Act
|
||||
var result = await service.CaptureRunCompletionAsync(
|
||||
TestTenantId, TestRunId, TestPlanHash, state,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -591,7 +591,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
var result = await service.CaptureRunCompletionAsync(
|
||||
TestTenantId, TestRunId, TestPlanHash, state,
|
||||
transcripts: transcripts,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -618,7 +618,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
// Act
|
||||
var result = await service.CaptureStepExecutionAsync(
|
||||
TestTenantId, TestRunId, TestPlanHash, transcript,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -649,7 +649,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
// Act
|
||||
var result = await service.CaptureApprovalDecisionAsync(
|
||||
TestTenantId, TestRunId, TestPlanHash, approval,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -680,7 +680,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
// Act
|
||||
var result = await service.CapturePolicyEvaluationAsync(
|
||||
TestTenantId, TestRunId, TestPlanHash, evaluation,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -708,7 +708,7 @@ public sealed class PackRunEvidenceSnapshotTests
|
||||
// Act
|
||||
await service.CaptureRunCompletionAsync(
|
||||
TestTenantId, TestRunId, TestPlanHash, state,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
var events = sink.GetEvents();
|
||||
|
||||
@@ -26,7 +26,7 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: 60,
|
||||
RequestedBy: "admin@example.com");
|
||||
|
||||
var result = await service.ActivateAsync(request, TestContext.Current.CancellationToken);
|
||||
var result = await service.ActivateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.True(result.Status.Active);
|
||||
@@ -54,7 +54,7 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: null,
|
||||
RequestedBy: null);
|
||||
|
||||
var result = await service.ActivateAsync(request, TestContext.Current.CancellationToken);
|
||||
var result = await service.ActivateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.Null(result.Status.ExpiresAt);
|
||||
@@ -85,7 +85,7 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: 30,
|
||||
RequestedBy: null);
|
||||
|
||||
await service.ActivateAsync(request, TestContext.Current.CancellationToken);
|
||||
await service.ActivateAsync(request, CancellationToken.None);
|
||||
|
||||
Assert.Equal(1, timelineSink.Count);
|
||||
var evt = timelineSink.GetEvents()[0];
|
||||
@@ -111,15 +111,15 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: null,
|
||||
RequestedBy: null);
|
||||
|
||||
await service.ActivateAsync(activateRequest, TestContext.Current.CancellationToken);
|
||||
await service.ActivateAsync(activateRequest, CancellationToken.None);
|
||||
|
||||
// Then deactivate
|
||||
var result = await service.DeactivateAsync("run-004", "Issue resolved", TestContext.Current.CancellationToken);
|
||||
var result = await service.DeactivateAsync("run-004", "Issue resolved", CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.False(result.Status.Active);
|
||||
|
||||
var status = await service.GetStatusAsync("run-004", TestContext.Current.CancellationToken);
|
||||
var status = await service.GetStatusAsync("run-004", CancellationToken.None);
|
||||
Assert.False(status.Active);
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ public sealed class PackRunIncidentModeTests
|
||||
store,
|
||||
NullLogger<PackRunIncidentModeService>.Instance);
|
||||
|
||||
var status = await service.GetStatusAsync("unknown-run", TestContext.Current.CancellationToken);
|
||||
var status = await service.GetStatusAsync("unknown-run", CancellationToken.None);
|
||||
|
||||
Assert.False(status.Active);
|
||||
Assert.Equal(IncidentEscalationLevel.None, status.Level);
|
||||
@@ -158,12 +158,12 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: 30,
|
||||
RequestedBy: null);
|
||||
|
||||
await service.ActivateAsync(request, TestContext.Current.CancellationToken);
|
||||
await service.ActivateAsync(request, CancellationToken.None);
|
||||
|
||||
// Advance time past expiration
|
||||
fakeTime.Advance(TimeSpan.FromMinutes(31));
|
||||
|
||||
var status = await service.GetStatusAsync("run-005", TestContext.Current.CancellationToken);
|
||||
var status = await service.GetStatusAsync("run-005", CancellationToken.None);
|
||||
|
||||
Assert.False(status.Active);
|
||||
}
|
||||
@@ -189,7 +189,7 @@ public sealed class PackRunIncidentModeTests
|
||||
TenantId: "tenant-1",
|
||||
Context: new Dictionary<string, string> { ["step"] = "scan" });
|
||||
|
||||
var result = await service.HandleSloBreachAsync(breach, TestContext.Current.CancellationToken);
|
||||
var result = await service.HandleSloBreachAsync(breach, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.True(result.Status.Active);
|
||||
@@ -230,7 +230,7 @@ public sealed class PackRunIncidentModeTests
|
||||
TenantId: "tenant-1",
|
||||
Context: null);
|
||||
|
||||
var result = await service.HandleSloBreachAsync(breach, TestContext.Current.CancellationToken);
|
||||
var result = await service.HandleSloBreachAsync(breach, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.Equal(expectedLevel, result.Status.Level);
|
||||
@@ -258,7 +258,7 @@ public sealed class PackRunIncidentModeTests
|
||||
TenantId: "tenant-1",
|
||||
Context: null);
|
||||
|
||||
var result = await service.HandleSloBreachAsync(breach, TestContext.Current.CancellationToken);
|
||||
var result = await service.HandleSloBreachAsync(breach, CancellationToken.None);
|
||||
|
||||
Assert.False(result.Success);
|
||||
Assert.Contains("No resource ID", result.Error);
|
||||
@@ -283,14 +283,14 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: null,
|
||||
RequestedBy: null);
|
||||
|
||||
await service.ActivateAsync(activateRequest, TestContext.Current.CancellationToken);
|
||||
await service.ActivateAsync(activateRequest, CancellationToken.None);
|
||||
|
||||
// Escalate to High
|
||||
var result = await service.EscalateAsync(
|
||||
"run-escalate",
|
||||
IncidentEscalationLevel.High,
|
||||
"Issue is more severe than expected",
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.True(result.Success);
|
||||
Assert.Equal(IncidentEscalationLevel.High, result.Status.Level);
|
||||
@@ -310,7 +310,7 @@ public sealed class PackRunIncidentModeTests
|
||||
"unknown-run",
|
||||
IncidentEscalationLevel.High,
|
||||
null,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.False(result.Success);
|
||||
Assert.Contains("not active", result.Error);
|
||||
@@ -334,13 +334,13 @@ public sealed class PackRunIncidentModeTests
|
||||
DurationMinutes: null,
|
||||
RequestedBy: null);
|
||||
|
||||
await service.ActivateAsync(activateRequest, TestContext.Current.CancellationToken);
|
||||
await service.ActivateAsync(activateRequest, CancellationToken.None);
|
||||
|
||||
var result = await service.EscalateAsync(
|
||||
"run-no-deescalate",
|
||||
IncidentEscalationLevel.Medium, // Lower than High
|
||||
null,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.False(result.Success);
|
||||
Assert.Contains("Cannot escalate", result.Error);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Nodes;
|
||||
using StellaOps.TaskRunner.Core.Execution;
|
||||
using StellaOps.TaskRunner.Core.Execution.Simulation;
|
||||
@@ -22,7 +22,7 @@ public sealed class PackRunProvenanceWriterTests
|
||||
var temp = Directory.CreateTempSubdirectory();
|
||||
try
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var writer = new FilesystemPackRunProvenanceWriter(temp.FullName, new FixedTimeProvider(completedAt));
|
||||
await writer.WriteAsync(context, state, ct);
|
||||
|
||||
@@ -30,7 +30,6 @@ public sealed class PackRunProvenanceWriterTests
|
||||
Assert.True(File.Exists(path));
|
||||
|
||||
using var document = JsonDocument.Parse(await File.ReadAllTextAsync(path, ct));
|
||||
using StellaOps.TestKit;
|
||||
var root = document.RootElement;
|
||||
Assert.Equal("run-test", root.GetProperty("runId").GetString());
|
||||
Assert.Equal("tenant-alpha", root.GetProperty("tenantId").GetString());
|
||||
|
||||
@@ -316,7 +316,7 @@ public sealed class PackRunTimelineEventTests
|
||||
planHash: TestPlanHash);
|
||||
|
||||
// Act
|
||||
var result = await sink.WriteAsync(evt, TestContext.Current.CancellationToken);
|
||||
var result = await sink.WriteAsync(evt, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -338,7 +338,7 @@ public sealed class PackRunTimelineEventTests
|
||||
occurredAt: DateTimeOffset.UtcNow,
|
||||
runId: TestRunId,
|
||||
planHash: TestPlanHash);
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
|
||||
// Act
|
||||
await sink.WriteAsync(evt, ct);
|
||||
@@ -356,7 +356,7 @@ public sealed class PackRunTimelineEventTests
|
||||
{
|
||||
// Arrange
|
||||
var sink = new InMemoryPackRunTimelineEventSink();
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
|
||||
// Act
|
||||
var evt1 = PackRunTimelineEvent.Create(
|
||||
@@ -400,7 +400,7 @@ public sealed class PackRunTimelineEventTests
|
||||
stepId: $"step-{i}")).ToList();
|
||||
|
||||
// Act
|
||||
var result = await sink.WriteBatchAsync(events, TestContext.Current.CancellationToken);
|
||||
var result = await sink.WriteBatchAsync(events, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(3, result.Written);
|
||||
@@ -414,7 +414,7 @@ public sealed class PackRunTimelineEventTests
|
||||
{
|
||||
// Arrange
|
||||
var sink = new InMemoryPackRunTimelineEventSink();
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
|
||||
await sink.WriteAsync(PackRunTimelineEvent.Create(
|
||||
tenantId: TestTenantId,
|
||||
@@ -455,7 +455,7 @@ public sealed class PackRunTimelineEventTests
|
||||
source: "test",
|
||||
occurredAt: DateTimeOffset.UtcNow,
|
||||
runId: TestRunId,
|
||||
planHash: TestPlanHash), TestContext.Current.CancellationToken);
|
||||
planHash: TestPlanHash), CancellationToken.None);
|
||||
|
||||
// Act
|
||||
sink.Clear();
|
||||
@@ -486,7 +486,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestRunId,
|
||||
TestPlanHash,
|
||||
projectId: TestProjectId,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -513,7 +513,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestTenantId,
|
||||
TestRunId,
|
||||
TestPlanHash,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -538,7 +538,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestRunId,
|
||||
TestPlanHash,
|
||||
failureReason: "Step step-001 failed",
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -566,7 +566,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestPlanHash,
|
||||
TestStepId,
|
||||
attempt: 2,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -595,7 +595,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestStepId,
|
||||
attempt: 1,
|
||||
durationMs: 123.45,
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -623,7 +623,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestStepId,
|
||||
attempt: 3,
|
||||
error: "Connection timeout",
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
@@ -653,7 +653,7 @@ public sealed class PackRunTimelineEventTests
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = await emitter.EmitBatchAsync(events, TestContext.Current.CancellationToken);
|
||||
var result = await emitter.EmitBatchAsync(events, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(3, result.Emitted);
|
||||
@@ -676,7 +676,7 @@ public sealed class PackRunTimelineEventTests
|
||||
sink,
|
||||
timeProvider,
|
||||
NullLogger<PackRunTimelineEventEmitter>.Instance);
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
|
||||
var evt = PackRunTimelineEvent.Create(
|
||||
TestTenantId,
|
||||
@@ -717,7 +717,7 @@ public sealed class PackRunTimelineEventTests
|
||||
TestPlanHash);
|
||||
|
||||
// Act
|
||||
var result = await sink.WriteAsync(evt, TestContext.Current.CancellationToken);
|
||||
var result = await sink.WriteAsync(evt, CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
|
||||
@@ -40,7 +40,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: false);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.True(result.Allowed);
|
||||
Assert.Equal("Pack does not require sealed install", result.Message);
|
||||
@@ -59,7 +59,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.True(result.Allowed);
|
||||
Assert.Equal("Enforcement disabled", result.Message);
|
||||
@@ -78,7 +78,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.False(result.Allowed);
|
||||
Assert.Equal(SealedInstallErrorCodes.SealedInstallViolation, result.ErrorCode);
|
||||
@@ -117,7 +117,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.True(result.Allowed);
|
||||
Assert.Equal("Sealed install requirements satisfied", result.Message);
|
||||
@@ -156,7 +156,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true, requirements);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.False(result.Allowed);
|
||||
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
|
||||
@@ -203,7 +203,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true, requirements);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.False(result.Allowed);
|
||||
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
|
||||
@@ -245,7 +245,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true, requirements);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.False(result.Allowed);
|
||||
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
|
||||
@@ -287,7 +287,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true, requirements);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.False(result.Allowed);
|
||||
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
|
||||
@@ -308,7 +308,7 @@ public sealed class SealedInstallEnforcerTests
|
||||
|
||||
var manifest = CreateManifest(sealedInstall: true);
|
||||
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
|
||||
|
||||
Assert.False(result.Allowed);
|
||||
Assert.Equal(SealedInstallErrorCodes.SealedInstallViolation, result.ErrorCode);
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<OutputType>Exe</OutputType>
|
||||
<NoWarn>xUnit1051</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
|
||||
@@ -39,4 +38,4 @@
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text;
|
||||
using System.Text;
|
||||
using StellaOps.TaskRunner.Client.Models;
|
||||
using StellaOps.TaskRunner.Client.Streaming;
|
||||
using StellaOps.TaskRunner.Client.Pagination;
|
||||
@@ -14,7 +14,7 @@ public sealed class TaskRunnerClientTests
|
||||
[Fact]
|
||||
public async Task StreamingLogReader_ParsesNdjsonLines()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var ndjson = """
|
||||
{"timestamp":"2025-01-01T00:00:00Z","level":"info","stepId":"step-1","message":"Starting","traceId":"abc123"}
|
||||
{"timestamp":"2025-01-01T00:00:01Z","level":"error","stepId":"step-1","message":"Failed","traceId":"abc123"}
|
||||
@@ -34,7 +34,7 @@ public sealed class TaskRunnerClientTests
|
||||
[Fact]
|
||||
public async Task StreamingLogReader_SkipsEmptyLines()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var ndjson = """
|
||||
{"timestamp":"2025-01-01T00:00:00Z","level":"info","stepId":"step-1","message":"Test","traceId":"abc123"}
|
||||
|
||||
@@ -51,7 +51,7 @@ public sealed class TaskRunnerClientTests
|
||||
[Fact]
|
||||
public async Task StreamingLogReader_SkipsMalformedLines()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var ndjson = """
|
||||
{"timestamp":"2025-01-01T00:00:00Z","level":"info","stepId":"step-1","message":"Valid","traceId":"abc123"}
|
||||
not valid json
|
||||
@@ -59,7 +59,6 @@ public sealed class TaskRunnerClientTests
|
||||
""";
|
||||
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(ndjson));
|
||||
|
||||
using StellaOps.TestKit;
|
||||
var entries = await StreamingLogReader.CollectAsync(stream, ct);
|
||||
|
||||
Assert.Equal(2, entries.Count);
|
||||
@@ -71,7 +70,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task StreamingLogReader_FilterByLevel_FiltersCorrectly()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var entries = new List<RunLogEntry>
|
||||
{
|
||||
new(DateTimeOffset.UtcNow, "info", "step-1", "Info message", "trace1"),
|
||||
@@ -95,7 +94,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task StreamingLogReader_GroupByStep_GroupsCorrectly()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var entries = new List<RunLogEntry>
|
||||
{
|
||||
new(DateTimeOffset.UtcNow, "info", "step-1", "Message 1", "trace1"),
|
||||
@@ -116,7 +115,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task Paginator_IteratesAllPages()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var allItems = Enumerable.Range(1, 25).ToList();
|
||||
var pageSize = 10;
|
||||
var fetchCalls = 0;
|
||||
@@ -142,7 +141,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task Paginator_GetPage_ReturnsCorrectPage()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var allItems = Enumerable.Range(1, 25).ToList();
|
||||
var pageSize = 10;
|
||||
|
||||
@@ -165,7 +164,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task PaginatorExtensions_TakeAsync_TakesCorrectNumber()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var items = Enumerable.Range(1, 100).ToAsyncEnumerable();
|
||||
|
||||
var taken = new List<int>();
|
||||
@@ -182,7 +181,7 @@ using StellaOps.TestKit;
|
||||
[Fact]
|
||||
public async Task PaginatorExtensions_SkipAsync_SkipsCorrectNumber()
|
||||
{
|
||||
var ct = TestContext.Current.CancellationToken;
|
||||
var ct = CancellationToken.None;
|
||||
var items = Enumerable.Range(1, 10).ToAsyncEnumerable();
|
||||
|
||||
var skipped = new List<int>();
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0"/>
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0"/>
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0"/>
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
<ProjectReference Include="..\..\..\Telemetry\StellaOps.Telemetry.Core\StellaOps.Telemetry.Core\StellaOps.Telemetry.Core.csproj"/>
|
||||
<ProjectReference Include="..\..\..\AirGap\StellaOps.AirGap.Policy\StellaOps.AirGap.Policy\StellaOps.AirGap.Policy.csproj"/>
|
||||
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj"/>
|
||||
<ProjectReference Include="..\..\..\Router/__Libraries/StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using Microsoft.Extensions.Options;
|
||||
using OpenTelemetry.Metrics;
|
||||
using OpenTelemetry.Trace;
|
||||
using StellaOps.AirGap.Policy;
|
||||
using StellaOps.TaskRunner.Core.Configuration;
|
||||
using StellaOps.TaskRunner.Core.Execution;
|
||||
|
||||
@@ -6,9 +6,10 @@ using System.Diagnostics.Metrics;
|
||||
using System.Text.Json.Nodes;
|
||||
using Microsoft.Extensions.Options;
|
||||
using StellaOps.TaskRunner.Core.Configuration;
|
||||
using StellaOps.TaskRunner.Core.Execution;
|
||||
using StellaOps.TaskRunner.Core.Execution.Simulation;
|
||||
using StellaOps.TaskRunner.Core.Planning;
|
||||
using StellaOps.TaskRunner.Core.Execution;
|
||||
using StellaOps.TaskRunner.Core.Execution.Simulation;
|
||||
using StellaOps.TaskRunner.Core.Planning;
|
||||
using StellaOps.TaskRunner.Infrastructure.Execution;
|
||||
|
||||
namespace StellaOps.TaskRunner.Worker.Services;
|
||||
|
||||
|
||||
@@ -19,11 +19,9 @@
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0"/>
|
||||
|
||||
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Core", "StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj", "{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Infrastructure", "StellaOps.TaskRunner.Infrastructure\StellaOps.TaskRunner.Infrastructure.csproj", "{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.WebService", "StellaOps.TaskRunner.WebService\StellaOps.TaskRunner.WebService.csproj", "{D8A63A97-9C56-448B-A4BB-056130224750}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Worker", "StellaOps.TaskRunner.Worker\StellaOps.TaskRunner.Worker.csproj", "{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Tests", "StellaOps.TaskRunner.Tests\StellaOps.TaskRunner.Tests.csproj", "{552E7C8A-74F6-4E33-B956-46DF96E2BE11}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Client", "StellaOps.TaskRunner.Client\StellaOps.TaskRunner.Client.csproj", "{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x64.Build.0 = Release|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x86.Build.0 = Release|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x64.Build.0 = Release|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Reference in New Issue
Block a user