feat: add HTTP Management API, migrate CLI from Akka ClusterClient to HTTP
Replace the CLI's Akka.NET ClusterClient transport with a simple HTTP client targeting a new POST /management endpoint on the Central Host. The endpoint handles Basic Auth, LDAP authentication, role resolution, and ManagementActor dispatch in a single round-trip — eliminating the CLI's Akka, LDAP, and Security dependencies. Also fixes DCL ReSubscribeAll losing subscriptions on repeated reconnect by deriving the tag list from _subscriptionsByInstance instead of _subscriptionIds.
This commit is contained in:
@@ -5,68 +5,43 @@ namespace ScadaLink.CLI.Tests;
|
||||
public class CliConfigTests
|
||||
{
|
||||
[Fact]
|
||||
public void Load_DefaultValues_WhenNoConfigExists()
|
||||
public void Load_DefaultFormat_IsJson()
|
||||
{
|
||||
// Clear environment variables that might affect the test
|
||||
var origContact = Environment.GetEnvironmentVariable("SCADALINK_CONTACT_POINTS");
|
||||
var origLdap = Environment.GetEnvironmentVariable("SCADALINK_LDAP_SERVER");
|
||||
var origUrl = Environment.GetEnvironmentVariable("SCADALINK_MANAGEMENT_URL");
|
||||
var origFormat = Environment.GetEnvironmentVariable("SCADALINK_FORMAT");
|
||||
|
||||
try
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SCADALINK_CONTACT_POINTS", null);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_LDAP_SERVER", null);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_MANAGEMENT_URL", null);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_FORMAT", null);
|
||||
|
||||
var config = CliConfig.Load();
|
||||
|
||||
Assert.Equal(636, config.LdapPort);
|
||||
Assert.True(config.LdapUseTls);
|
||||
// DefaultFormat is always "json" unless overridden by config file or env var
|
||||
Assert.Equal("json", config.DefaultFormat);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SCADALINK_CONTACT_POINTS", origContact);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_LDAP_SERVER", origLdap);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_MANAGEMENT_URL", origUrl);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_FORMAT", origFormat);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Load_ContactPoints_FromEnvironment()
|
||||
public void Load_ManagementUrl_FromEnvironment()
|
||||
{
|
||||
var orig = Environment.GetEnvironmentVariable("SCADALINK_CONTACT_POINTS");
|
||||
var orig = Environment.GetEnvironmentVariable("SCADALINK_MANAGEMENT_URL");
|
||||
try
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SCADALINK_CONTACT_POINTS", "host1:8080,host2:8080");
|
||||
Environment.SetEnvironmentVariable("SCADALINK_MANAGEMENT_URL", "http://central:5000");
|
||||
|
||||
var config = CliConfig.Load();
|
||||
|
||||
Assert.Equal(2, config.ContactPoints.Count);
|
||||
Assert.Equal("host1:8080", config.ContactPoints[0]);
|
||||
Assert.Equal("host2:8080", config.ContactPoints[1]);
|
||||
Assert.Equal("http://central:5000", config.ManagementUrl);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SCADALINK_CONTACT_POINTS", orig);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Load_LdapServer_FromEnvironment()
|
||||
{
|
||||
var orig = Environment.GetEnvironmentVariable("SCADALINK_LDAP_SERVER");
|
||||
try
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SCADALINK_LDAP_SERVER", "ldap.example.com");
|
||||
|
||||
var config = CliConfig.Load();
|
||||
|
||||
Assert.Equal("ldap.example.com", config.LdapServer);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SCADALINK_LDAP_SERVER", orig);
|
||||
Environment.SetEnvironmentVariable("SCADALINK_MANAGEMENT_URL", orig);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user