Fix build and code structure improvements. New but essential UI functionality. CI improvements. Documentation improvements. AI module improvements.
This commit is contained in:
@@ -17,9 +17,8 @@ public sealed class HealthWebAppFactory : WebApplicationFactory<Program>
|
||||
public HealthWebAppFactory()
|
||||
{
|
||||
// Ensure options binder sees required storage values before Program.Main executes.
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__DSN", "Host=localhost;Port=5432;Database=test-health");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__DRIVER", "postgres");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__POSTGRESSTORAGE__CONNECTIONSTRING", "Host=localhost;Port=5432;Database=test-health");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__POSTGRESSTORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__TELEMETRY__ENABLED", "false");
|
||||
Environment.SetEnvironmentVariable("CONCELIER_SKIP_OPTIONS_VALIDATION", "1");
|
||||
Environment.SetEnvironmentVariable("CONCELIER_TEST_STORAGE_DSN", "Host=localhost;Port=5432;Database=test-health");
|
||||
@@ -33,18 +32,16 @@ public sealed class HealthWebAppFactory : WebApplicationFactory<Program>
|
||||
{
|
||||
var overrides = new Dictionary<string, string?>
|
||||
{
|
||||
{"Storage:Dsn", "Host=localhost;Port=5432;Database=test-health"},
|
||||
{"Storage:Driver", "postgres"},
|
||||
{"Storage:CommandTimeoutSeconds", "30"},
|
||||
{"PostgresStorage:ConnectionString", "Host=localhost;Port=5432;Database=test-health"},
|
||||
{"PostgresStorage:CommandTimeoutSeconds", "30"},
|
||||
{"Telemetry:Enabled", "false"}
|
||||
};
|
||||
|
||||
config.AddInMemoryCollection(overrides);
|
||||
});
|
||||
|
||||
builder.UseSetting("CONCELIER__STORAGE__DSN", "Host=localhost;Port=5432;Database=test-health");
|
||||
builder.UseSetting("CONCELIER__STORAGE__DRIVER", "postgres");
|
||||
builder.UseSetting("CONCELIER__STORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
builder.UseSetting("CONCELIER__POSTGRESSTORAGE__CONNECTIONSTRING", "Host=localhost;Port=5432;Database=test-health");
|
||||
builder.UseSetting("CONCELIER__POSTGRESSTORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
builder.UseSetting("CONCELIER__TELEMETRY__ENABLED", "false");
|
||||
|
||||
builder.UseEnvironment("Testing");
|
||||
@@ -53,10 +50,9 @@ public sealed class HealthWebAppFactory : WebApplicationFactory<Program>
|
||||
{
|
||||
services.AddSingleton<ConcelierOptions>(new ConcelierOptions
|
||||
{
|
||||
Storage = new ConcelierOptions.StorageOptions
|
||||
PostgresStorage = new ConcelierOptions.PostgresStorageOptions
|
||||
{
|
||||
Dsn = "Host=localhost;Port=5432;Database=test-health",
|
||||
Driver = "postgres",
|
||||
ConnectionString = "Host=localhost;Port=5432;Database=test-health",
|
||||
CommandTimeoutSeconds = 30
|
||||
},
|
||||
Telemetry = new ConcelierOptions.TelemetryOptions
|
||||
@@ -67,20 +63,18 @@ public sealed class HealthWebAppFactory : WebApplicationFactory<Program>
|
||||
|
||||
services.AddSingleton<IConfigureOptions<ConcelierOptions>>(sp => new ConfigureOptions<ConcelierOptions>(opts =>
|
||||
{
|
||||
opts.Storage ??= new ConcelierOptions.StorageOptions();
|
||||
opts.Storage.Driver = "postgres";
|
||||
opts.Storage.Dsn = "Host=localhost;Port=5432;Database=test-health";
|
||||
opts.Storage.CommandTimeoutSeconds = 30;
|
||||
opts.PostgresStorage ??= new ConcelierOptions.PostgresStorageOptions();
|
||||
opts.PostgresStorage.ConnectionString = "Host=localhost;Port=5432;Database=test-health";
|
||||
opts.PostgresStorage.CommandTimeoutSeconds = 30;
|
||||
|
||||
opts.Telemetry ??= new ConcelierOptions.TelemetryOptions();
|
||||
opts.Telemetry.Enabled = false;
|
||||
}));
|
||||
services.PostConfigure<ConcelierOptions>(opts =>
|
||||
{
|
||||
opts.Storage ??= new ConcelierOptions.StorageOptions();
|
||||
opts.Storage.Driver = "postgres";
|
||||
opts.Storage.Dsn = "Host=localhost;Port=5432;Database=test-health";
|
||||
opts.Storage.CommandTimeoutSeconds = 30;
|
||||
opts.PostgresStorage ??= new ConcelierOptions.PostgresStorageOptions();
|
||||
opts.PostgresStorage.ConnectionString = "Host=localhost;Port=5432;Database=test-health";
|
||||
opts.PostgresStorage.CommandTimeoutSeconds = 30;
|
||||
|
||||
opts.Telemetry ??= new ConcelierOptions.TelemetryOptions();
|
||||
opts.Telemetry.Enabled = false;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Net;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Mvc.Testing;
|
||||
@@ -25,7 +25,6 @@ public class ConcelierTimelineCursorTests : IClassFixture<WebApplicationFactory<
|
||||
client.DefaultRequestHeaders.Add("X-Stella-Tenant", "tenant-a");
|
||||
|
||||
using var request = new HttpRequestMessage(HttpMethod.Get, "/obs/concelier/timeline?cursor=5&limit=2");
|
||||
using StellaOps.TestKit;
|
||||
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
|
||||
|
||||
var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Net;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Mvc.Testing;
|
||||
@@ -43,7 +43,6 @@ public class ConcelierTimelineEndpointTests : IClassFixture<WebApplicationFactor
|
||||
|
||||
var stream = await response.Content.ReadAsStreamAsync();
|
||||
using var reader = new StreamReader(stream);
|
||||
using StellaOps.TestKit;
|
||||
var firstLine = await reader.ReadLineAsync();
|
||||
firstLine.Should().NotBeNull();
|
||||
firstLine!.Should().StartWith("event: ingest.update");
|
||||
|
||||
@@ -31,9 +31,8 @@ public class ConcelierApplicationFactory : WebApplicationFactory<Program>
|
||||
_enableOtel = enableOtel;
|
||||
|
||||
// Ensure options binder sees required storage values before Program.Main executes.
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__DSN", "Host=localhost;Port=5432;Database=test-contract");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__DRIVER", "postgres");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__POSTGRESSTORAGE__CONNECTIONSTRING", "Host=localhost;Port=5432;Database=test-contract");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__POSTGRESSTORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__TELEMETRY__ENABLED", _enableOtel.ToString().ToLower());
|
||||
Environment.SetEnvironmentVariable("CONCELIER_SKIP_OPTIONS_VALIDATION", "1");
|
||||
Environment.SetEnvironmentVariable("CONCELIER_TEST_STORAGE_DSN", "Host=localhost;Port=5432;Database=test-contract");
|
||||
@@ -47,9 +46,8 @@ public class ConcelierApplicationFactory : WebApplicationFactory<Program>
|
||||
{
|
||||
var overrides = new Dictionary<string, string?>
|
||||
{
|
||||
{"Storage:Dsn", "Host=localhost;Port=5432;Database=test-contract"},
|
||||
{"Storage:Driver", "postgres"},
|
||||
{"Storage:CommandTimeoutSeconds", "30"},
|
||||
{"PostgresStorage:ConnectionString", "Host=localhost;Port=5432;Database=test-contract"},
|
||||
{"PostgresStorage:CommandTimeoutSeconds", "30"},
|
||||
{"Telemetry:Enabled", _enableOtel.ToString().ToLower()},
|
||||
{"Swagger:Enabled", _enableSwagger.ToString().ToLower()}
|
||||
};
|
||||
@@ -57,9 +55,8 @@ public class ConcelierApplicationFactory : WebApplicationFactory<Program>
|
||||
config.AddInMemoryCollection(overrides);
|
||||
});
|
||||
|
||||
builder.UseSetting("CONCELIER__STORAGE__DSN", "Host=localhost;Port=5432;Database=test-contract");
|
||||
builder.UseSetting("CONCELIER__STORAGE__DRIVER", "postgres");
|
||||
builder.UseSetting("CONCELIER__STORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
builder.UseSetting("CONCELIER__POSTGRESSTORAGE__CONNECTIONSTRING", "Host=localhost;Port=5432;Database=test-contract");
|
||||
builder.UseSetting("CONCELIER__POSTGRESSTORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
builder.UseSetting("CONCELIER__TELEMETRY__ENABLED", _enableOtel.ToString().ToLower());
|
||||
|
||||
builder.UseEnvironment("Testing");
|
||||
@@ -68,10 +65,9 @@ public class ConcelierApplicationFactory : WebApplicationFactory<Program>
|
||||
{
|
||||
services.AddSingleton<ConcelierOptions>(new ConcelierOptions
|
||||
{
|
||||
Storage = new ConcelierOptions.StorageOptions
|
||||
PostgresStorage = new ConcelierOptions.PostgresStorageOptions
|
||||
{
|
||||
Dsn = "Host=localhost;Port=5432;Database=test-contract",
|
||||
Driver = "postgres",
|
||||
ConnectionString = "Host=localhost;Port=5432;Database=test-contract",
|
||||
CommandTimeoutSeconds = 30
|
||||
},
|
||||
Telemetry = new ConcelierOptions.TelemetryOptions
|
||||
@@ -82,10 +78,9 @@ public class ConcelierApplicationFactory : WebApplicationFactory<Program>
|
||||
|
||||
services.AddSingleton<IConfigureOptions<ConcelierOptions>>(sp => new ConfigureOptions<ConcelierOptions>(opts =>
|
||||
{
|
||||
opts.Storage ??= new ConcelierOptions.StorageOptions();
|
||||
opts.Storage.Driver = "postgres";
|
||||
opts.Storage.Dsn = "Host=localhost;Port=5432;Database=test-contract";
|
||||
opts.Storage.CommandTimeoutSeconds = 30;
|
||||
opts.PostgresStorage ??= new ConcelierOptions.PostgresStorageOptions();
|
||||
opts.PostgresStorage.ConnectionString = "Host=localhost;Port=5432;Database=test-contract";
|
||||
opts.PostgresStorage.CommandTimeoutSeconds = 30;
|
||||
|
||||
opts.Telemetry ??= new ConcelierOptions.TelemetryOptions();
|
||||
opts.Telemetry.Enabled = _enableOtel;
|
||||
@@ -93,10 +88,9 @@ public class ConcelierApplicationFactory : WebApplicationFactory<Program>
|
||||
|
||||
services.PostConfigure<ConcelierOptions>(opts =>
|
||||
{
|
||||
opts.Storage ??= new ConcelierOptions.StorageOptions();
|
||||
opts.Storage.Driver = "postgres";
|
||||
opts.Storage.Dsn = "Host=localhost;Port=5432;Database=test-contract";
|
||||
opts.Storage.CommandTimeoutSeconds = 30;
|
||||
opts.PostgresStorage ??= new ConcelierOptions.PostgresStorageOptions();
|
||||
opts.PostgresStorage.ConnectionString = "Host=localhost;Port=5432;Database=test-contract";
|
||||
opts.PostgresStorage.CommandTimeoutSeconds = 30;
|
||||
|
||||
opts.Telemetry ??= new ConcelierOptions.TelemetryOptions();
|
||||
opts.Telemetry.Enabled = _enableOtel;
|
||||
|
||||
@@ -403,10 +403,10 @@ public sealed class InterestScoreEndpointTests : IClassFixture<InterestScoreEndp
|
||||
services.AddSingleton(mockRepository.Object);
|
||||
|
||||
// Add scoring service with mock repository
|
||||
var options = Options.Create(new InterestScoreOptions
|
||||
var options = Microsoft.Extensions.Options.Options.Create(new InterestScoreOptions
|
||||
{
|
||||
EnableCache = false,
|
||||
DegradationPolicy = new DegradationPolicyOptions
|
||||
DegradationPolicy = new StubDegradationPolicy
|
||||
{
|
||||
Enabled = true,
|
||||
DegradationThreshold = 0.2,
|
||||
@@ -414,7 +414,7 @@ public sealed class InterestScoreEndpointTests : IClassFixture<InterestScoreEndp
|
||||
MinAgeDays = 30,
|
||||
BatchSize = 100
|
||||
},
|
||||
Job = new InterestScoreJobOptions
|
||||
Job = new ScoringJobOptions
|
||||
{
|
||||
Enabled = false
|
||||
}
|
||||
|
||||
@@ -23,9 +23,8 @@ public sealed class OrchestratorTestWebAppFactory : WebApplicationFactory<Progra
|
||||
{
|
||||
public OrchestratorTestWebAppFactory()
|
||||
{
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__DSN", "Host=localhost;Port=5432;Database=orch-tests");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__DRIVER", "postgres");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__STORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__POSTGRESSTORAGE__CONNECTIONSTRING", "Host=localhost;Port=5432;Database=orch-tests");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__POSTGRESSTORAGE__COMMANDTIMEOUTSECONDS", "30");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__TELEMETRY__ENABLED", "false");
|
||||
Environment.SetEnvironmentVariable("CONCELIER__AUTHORITY__ENABLED", "false"); // disable auth so tests can hit endpoints without tokens
|
||||
Environment.SetEnvironmentVariable("CONCELIER_SKIP_OPTIONS_VALIDATION", "1");
|
||||
@@ -43,9 +42,8 @@ public sealed class OrchestratorTestWebAppFactory : WebApplicationFactory<Progra
|
||||
{
|
||||
cfg.AddInMemoryCollection(new Dictionary<string, string?>
|
||||
{
|
||||
["Concelier:Storage:Dsn"] = "Host=localhost;Port=5432;Database=orch-tests",
|
||||
["Concelier:Storage:Driver"] = "postgres",
|
||||
["Concelier:Storage:CommandTimeoutSeconds"] = "30",
|
||||
["Concelier:PostgresStorage:ConnectionString"] = "Host=localhost;Port=5432;Database=orch-tests",
|
||||
["Concelier:PostgresStorage:CommandTimeoutSeconds"] = "30",
|
||||
["Concelier:Telemetry:Enabled"] = "false",
|
||||
["Concelier:Authority:Enabled"] = "false"
|
||||
});
|
||||
@@ -61,10 +59,9 @@ public sealed class OrchestratorTestWebAppFactory : WebApplicationFactory<Progra
|
||||
services.RemoveAll<IOptions<ConcelierOptions>>();
|
||||
var forcedOptions = new ConcelierOptions
|
||||
{
|
||||
Storage = new ConcelierOptions.StorageOptions
|
||||
PostgresStorage = new ConcelierOptions.PostgresStorageOptions
|
||||
{
|
||||
Dsn = "Host=localhost;Port=5432;Database=orch-tests",
|
||||
Driver = "postgres",
|
||||
ConnectionString = "Host=localhost;Port=5432;Database=orch-tests",
|
||||
CommandTimeoutSeconds = 30
|
||||
},
|
||||
Telemetry = new ConcelierOptions.TelemetryOptions
|
||||
|
||||
@@ -15,7 +15,8 @@ public class PluginLoaderTests
|
||||
public void ScansConnectorPluginsDirectory()
|
||||
{
|
||||
var services = new NullServices();
|
||||
var catalog = new PluginCatalog().AddFromDirectory(Path.Combine(AppContext.BaseDirectory, "StellaOps.Concelier.PluginBinaries"));
|
||||
var pluginsDir = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..", "..", "..", "plugins", "concelier"));
|
||||
var catalog = new PluginCatalog().AddFromDirectory(pluginsDir);
|
||||
var plugins = catalog.GetAvailableConnectorPlugins(services);
|
||||
Assert.NotNull(plugins);
|
||||
}
|
||||
@@ -25,7 +26,8 @@ public class PluginLoaderTests
|
||||
public void ScansExporterPluginsDirectory()
|
||||
{
|
||||
var services = new NullServices();
|
||||
var catalog = new PluginCatalog().AddFromDirectory(Path.Combine(AppContext.BaseDirectory, "StellaOps.Concelier.PluginBinaries"));
|
||||
var pluginsDir = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..", "..", "..", "plugins", "concelier"));
|
||||
var catalog = new PluginCatalog().AddFromDirectory(pluginsDir);
|
||||
var plugins = catalog.GetAvailableExporterPlugins(services);
|
||||
Assert.NotNull(plugins);
|
||||
}
|
||||
|
||||
@@ -48,9 +48,7 @@ public sealed class ConcelierAuthorizationTests : IClassFixture<ConcelierApplica
|
||||
|
||||
// Protected endpoints should return 401 Unauthorized or 400 BadRequest (missing tenant header)
|
||||
response.StatusCode.Should().BeOneOf(
|
||||
HttpStatusCode.Unauthorized,
|
||||
HttpStatusCode.BadRequest,
|
||||
HttpStatusCode.Forbidden,
|
||||
new[] { HttpStatusCode.Unauthorized, HttpStatusCode.BadRequest, HttpStatusCode.Forbidden },
|
||||
"Protected endpoints should deny unauthenticated requests");
|
||||
}
|
||||
|
||||
@@ -144,8 +142,7 @@ public sealed class ConcelierAuthorizationTests : IClassFixture<ConcelierApplica
|
||||
|
||||
// Should reject malformed tokens
|
||||
response.StatusCode.Should().BeOneOf(
|
||||
HttpStatusCode.Unauthorized,
|
||||
HttpStatusCode.BadRequest,
|
||||
new[] { HttpStatusCode.Unauthorized, HttpStatusCode.BadRequest },
|
||||
"Malformed tokens should be rejected");
|
||||
}
|
||||
|
||||
@@ -169,9 +166,7 @@ public sealed class ConcelierAuthorizationTests : IClassFixture<ConcelierApplica
|
||||
|
||||
// Write operations should require authorization
|
||||
response.StatusCode.Should().BeOneOf(
|
||||
HttpStatusCode.Unauthorized,
|
||||
HttpStatusCode.BadRequest,
|
||||
HttpStatusCode.Forbidden,
|
||||
new[] { HttpStatusCode.Unauthorized, HttpStatusCode.BadRequest, HttpStatusCode.Forbidden },
|
||||
"Write operations should require authorization");
|
||||
}
|
||||
|
||||
@@ -189,10 +184,7 @@ public sealed class ConcelierAuthorizationTests : IClassFixture<ConcelierApplica
|
||||
|
||||
// Delete operations should require authorization
|
||||
response.StatusCode.Should().BeOneOf(
|
||||
HttpStatusCode.Unauthorized,
|
||||
HttpStatusCode.BadRequest,
|
||||
HttpStatusCode.Forbidden,
|
||||
HttpStatusCode.NotFound, // Acceptable if resource doesn't exist
|
||||
new[] { HttpStatusCode.Unauthorized, HttpStatusCode.BadRequest, HttpStatusCode.Forbidden, HttpStatusCode.NotFound },
|
||||
"Delete operations should require authorization");
|
||||
}
|
||||
|
||||
@@ -211,10 +203,14 @@ public sealed class ConcelierAuthorizationTests : IClassFixture<ConcelierApplica
|
||||
var response = await client.GetAsync("/health");
|
||||
|
||||
// Check for common security headers
|
||||
response.Headers.Should().Satisfy(h =>
|
||||
h.Any(header => header.Key.Equals("X-Content-Type-Options", StringComparison.OrdinalIgnoreCase)) ||
|
||||
h.Any(header => header.Key.Equals("X-Frame-Options", StringComparison.OrdinalIgnoreCase)) ||
|
||||
true, // Allow if headers are configured elsewhere
|
||||
var headerNames = response.Headers.Select(h => h.Key).ToList();
|
||||
var hasSecurityHeaders = headerNames.Any(name =>
|
||||
name.Equals("X-Content-Type-Options", StringComparison.OrdinalIgnoreCase) ||
|
||||
name.Equals("X-Frame-Options", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
// Note: Security headers may be configured at reverse proxy level in production
|
||||
// This test documents expected behavior
|
||||
(hasSecurityHeaders || true).Should().BeTrue(
|
||||
"Responses should include security headers (X-Content-Type-Options, X-Frame-Options, etc.)");
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
<CopyOutputSymbolsToOutputDirectory>true</CopyOutputSymbolsToOutputDirectory>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="6.12.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Moq" />
|
||||
<PackageReference Update="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.0" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Concelier.Core/StellaOps.Concelier.Core.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Concelier.Interest/StellaOps.Concelier.Interest.csproj" />
|
||||
@@ -25,6 +25,4 @@
|
||||
OutputItemType="Analyzer"
|
||||
ReferenceOutputAssembly="false" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Metrics;
|
||||
using System.Text.Json;
|
||||
@@ -69,7 +69,6 @@ public sealed class VulnExplorerTelemetryTests : IDisposable
|
||||
public void IsWithdrawn_DetectsWithdrawnFlagsAndTimestamps()
|
||||
{
|
||||
using var json = JsonDocument.Parse("{\"withdrawn\":true,\"withdrawn_at\":\"2024-10-10T00:00:00Z\"}");
|
||||
using StellaOps.TestKit;
|
||||
Assert.True(VulnExplorerTelemetry.IsWithdrawn(json.RootElement));
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ using Xunit.Sdk;
|
||||
using StellaOps.Auth.Abstractions;
|
||||
using StellaOps.Auth.Client;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
using Microsoft.IdentityModel.Protocols;
|
||||
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
|
||||
using StellaOps.Concelier.WebService.Diagnostics;
|
||||
@@ -2079,7 +2078,7 @@ public sealed class WebServiceEndpointsTests : IAsyncLifetime
|
||||
{
|
||||
var settings = new Dictionary<string, string?>
|
||||
{
|
||||
["Plugins:Directory"] = Path.Combine(context.HostingEnvironment.ContentRootPath, "StellaOps.Concelier.PluginBinaries"),
|
||||
["Plugins:Directory"] = Path.GetFullPath(Path.Combine(context.HostingEnvironment.ContentRootPath, "..", "..", "..", "plugins", "concelier")),
|
||||
};
|
||||
|
||||
configurationBuilder.AddInMemoryCollection(settings!);
|
||||
@@ -2096,10 +2095,10 @@ public sealed class WebServiceEndpointsTests : IAsyncLifetime
|
||||
services.AddSingleton<IJobCoordinator>(sp => sp.GetRequiredService<StubJobCoordinator>());
|
||||
services.PostConfigure<ConcelierOptions>(options =>
|
||||
{
|
||||
options.Storage.Driver = "postgres";
|
||||
options.Storage.Dsn = _connectionString;
|
||||
options.Storage.CommandTimeoutSeconds = 30;
|
||||
options.Plugins.Directory ??= Path.Combine(AppContext.BaseDirectory, "StellaOps.Concelier.PluginBinaries");
|
||||
options.PostgresStorage ??= new ConcelierOptions.PostgresStorageOptions();
|
||||
options.PostgresStorage.ConnectionString = _connectionString;
|
||||
options.PostgresStorage.CommandTimeoutSeconds = 30;
|
||||
options.Plugins.Directory ??= Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..", "..", "..", "plugins", "concelier"));
|
||||
options.Telemetry.Enabled = false;
|
||||
options.Telemetry.EnableLogging = false;
|
||||
options.Telemetry.EnableTracing = false;
|
||||
|
||||
Reference in New Issue
Block a user