Stufe 4c (#764): Bezeichner auf Englisch - Typen, Methoden, Felder, Parameter, Locals, Testnamen
Mit Roslyn umbenannt (Verweise folgen, Zeichenketten bleiben unberuehrt). Nicht umbenannt, weil gespeichert oder ueber die API gebunden (Stufe 4e): Properties, Record-Parameter, Enum-Member sowie die Parameter der Endpunkt-Handler (Routen-/Query-Bindung ueber den Namen). Die JSON-Felder anonymer Objekte bleiben ausdruecklich benannt (JsonFilter: pfad). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
837a634a22
commit
77062facc9
@@ -33,9 +33,9 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
Path.GetTempPath(), "clawd-tests", "core-" + Guid.NewGuid().ToString("N")[..8]);
|
||||
|
||||
private readonly FakeLauncher _launcher = new();
|
||||
private readonly FakeChannel _kanal = new();
|
||||
private readonly FakeChannel _channel = new();
|
||||
private readonly FakeTokenSource _tokens = new();
|
||||
private readonly InstanceDirectoryManager _verzeichnisse;
|
||||
private readonly InstanceDirectoryManager _directories;
|
||||
|
||||
private static readonly SupervisionOptions Options = new(
|
||||
ProbeInterval: TimeSpan.FromMilliseconds(50),
|
||||
@@ -48,16 +48,16 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
public ManagerCoreTests()
|
||||
{
|
||||
Directory.CreateDirectory(_root);
|
||||
_verzeichnisse = new InstanceDirectoryManager(Path.Combine(_root, "Instances"));
|
||||
_directories = new InstanceDirectoryManager(Path.Combine(_root, "Instances"));
|
||||
// The socket only answers if a process is really running - exactly as in
|
||||
// operation (see FakeChannel.Launcher).
|
||||
_kanal.Launcher = _launcher;
|
||||
_channel.Launcher = _launcher;
|
||||
}
|
||||
|
||||
private ManagerCore Manager()
|
||||
{
|
||||
var register = new InstanceRegistry(
|
||||
_verzeichnisse, _launcher, _kanal, NullLoggerFactory.Instance, Options);
|
||||
_directories, _launcher, _channel, NullLoggerFactory.Instance, Options);
|
||||
|
||||
return new ManagerCore(
|
||||
new ManagerSettingsStore(_root), register, _tokens, NullLoggerFactory.Instance);
|
||||
@@ -79,22 +79,22 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
/// manager then takes it over (E-M6), the launcher is never touched, and the test
|
||||
/// checks something other than it claims. Exactly that happened to me here twice.</para>
|
||||
/// </summary>
|
||||
private async Task<StartRefusal> StarteUndPruefe(ManagerCore manager, string pfad, string name)
|
||||
private async Task<StartRefusal> StartAndCheck(ManagerCore manager, string path, string name)
|
||||
{
|
||||
var vorher = _launcher.Starts;
|
||||
var before = _launcher.Starts;
|
||||
|
||||
_kanal.AnswerFor[Path.GetFullPath(pfad)] = new InstanceIdentity("i-1", name, "0.1.2");
|
||||
_channel.AnswerFor[Path.GetFullPath(path)] = new InstanceIdentity("i-1", name, "0.1.2");
|
||||
|
||||
var ergebnis = await manager.StartInstanceAsync(pfad);
|
||||
var result = await manager.StartInstanceAsync(path);
|
||||
|
||||
_launcher.Starts.ShouldBe(vorher + 1, "Gestartet, nicht uebernommen.");
|
||||
return ergebnis;
|
||||
_launcher.Starts.ShouldBe(before + 1, "Gestartet, nicht uebernommen.");
|
||||
return result;
|
||||
}
|
||||
|
||||
// ─── Starting up ───
|
||||
|
||||
[Fact]
|
||||
public async Task Ohne_Lizenzpruefung_arbeitet_der_Manager()
|
||||
public async Task Without_license_check_the_manager_works()
|
||||
{
|
||||
// No gatekeeper means no lock - otherwise there would be a chicken-and-egg lock
|
||||
// before anyone can even enter a key.
|
||||
@@ -105,9 +105,9 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Beim_Hochfahren_wird_nichts_gestartet()
|
||||
public async Task Nothing_is_started_on_startup()
|
||||
{
|
||||
_verzeichnisse.CreateInstance("Alpha");
|
||||
_directories.CreateInstance("Alpha");
|
||||
|
||||
await using var manager = Manager();
|
||||
await manager.StartAsync();
|
||||
@@ -119,45 +119,45 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
// ─── Token ───
|
||||
|
||||
[Fact]
|
||||
public async Task Eine_neue_Instanz_bekommt_gleich_ihr_eigenes_Token()
|
||||
public async Task A_new_instance_gets_its_own_token_right_away()
|
||||
{
|
||||
// At creation and not at the first start: then the instance file belongs
|
||||
// to nobody without doubt.
|
||||
await using var manager = Manager();
|
||||
|
||||
var pfad = await manager.CreateInstanceAsync("Frisch");
|
||||
var path = await manager.CreateInstanceAsync("Frisch");
|
||||
|
||||
_tokens.Fuer.ShouldBe([Path.GetFullPath(pfad)]);
|
||||
_tokens.Fuer.ShouldBe([Path.GetFullPath(path)]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Vor_dem_Start_wird_das_Token_nachgeholt()
|
||||
public async Task Before_the_start_the_token_is_fetched()
|
||||
{
|
||||
// The case of an instance that existed before the manager - or for which the
|
||||
// Deploymentcenter was not reachable at creation.
|
||||
var pfad = _verzeichnisse.CreateInstance("Alt");
|
||||
var path = _directories.CreateInstance("Alt");
|
||||
|
||||
await using var manager = Manager();
|
||||
await manager.StartAsync();
|
||||
|
||||
(await StarteUndPruefe(manager, pfad, "Alt")).ShouldBe(StartRefusal.None);
|
||||
(await StartAndCheck(manager, path, "Alt")).ShouldBe(StartRefusal.None);
|
||||
|
||||
_tokens.Fuer.ShouldContain(Path.GetFullPath(pfad));
|
||||
_tokens.Fuer.ShouldContain(Path.GetFullPath(path));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Ein_fehlgeschlagener_Tokenbezug_verhindert_den_Start_nicht()
|
||||
public async Task A_failed_token_fetch_does_not_prevent_the_start()
|
||||
{
|
||||
// Monitoring that only runs with perfect permissions is silent exactly
|
||||
// when you need it.
|
||||
_tokens.Erfolg = false;
|
||||
|
||||
var pfad = _verzeichnisse.CreateInstance("Alt");
|
||||
var path = _directories.CreateInstance("Alt");
|
||||
|
||||
await using var manager = Manager();
|
||||
await manager.StartAsync();
|
||||
|
||||
(await StarteUndPruefe(manager, pfad, "Alt")).ShouldBe(StartRefusal.None);
|
||||
(await StartAndCheck(manager, path, "Alt")).ShouldBe(StartRefusal.None);
|
||||
}
|
||||
|
||||
// ─── The verdict ───
|
||||
@@ -170,38 +170,38 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
/// network problem would take all installations down at the same time.</para>
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Ein_Lizenzwiderruf_haelt_alle_laufenden_Instanzen_an()
|
||||
public async Task A_license_revocation_pauses_all_running_instances()
|
||||
{
|
||||
var pfad = _verzeichnisse.CreateInstance("Alpha");
|
||||
var path = _directories.CreateInstance("Alpha");
|
||||
|
||||
await using var manager = Manager();
|
||||
await manager.StartAsync();
|
||||
await StarteUndPruefe(manager, pfad, "Alpha");
|
||||
await StartAndCheck(manager, path, "Alpha");
|
||||
|
||||
manager.Instances.Instances.Single().Condition.ShouldBe(InstanceCondition.Running);
|
||||
|
||||
// The instance ends upon the request.
|
||||
var prozess = _launcher.Last!;
|
||||
_kanal.OnStopRequest = _ => { _kanal.AnswerFor[Path.GetFullPath(pfad)] = null; prozess.Exit(0); };
|
||||
var process = _launcher.Last!;
|
||||
_channel.OnStopRequest = _ => { _channel.AnswerFor[Path.GetFullPath(path)] = null; process.Exit(0); };
|
||||
|
||||
await manager.HandleLicenseRevokedAsync("Widerrufen durch den Hersteller");
|
||||
|
||||
manager.LicenseHolds.ShouldBeFalse();
|
||||
manager.Instances.Instances.Single().Condition.ShouldBe(InstanceCondition.Stopped);
|
||||
_kanal.StopRequests.ShouldBe(1, "Erst bitten, nicht schiessen.");
|
||||
_channel.StopRequests.ShouldBe(1, "Erst bitten, nicht schiessen.");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Nach_einem_Widerruf_startet_keine_Instanz_mehr()
|
||||
public async Task After_a_revocation_no_instance_starts()
|
||||
{
|
||||
var pfad = _verzeichnisse.CreateInstance("Alpha");
|
||||
var path = _directories.CreateInstance("Alpha");
|
||||
|
||||
await using var manager = Manager();
|
||||
await manager.StartAsync();
|
||||
|
||||
await manager.HandleLicenseRevokedAsync("Widerrufen");
|
||||
|
||||
(await manager.StartInstanceAsync(pfad)).ShouldBe(StartRefusal.NoLicense);
|
||||
(await manager.StartInstanceAsync(path)).ShouldBe(StartRefusal.NoLicense);
|
||||
|
||||
_launcher.Starts.ShouldBe(0);
|
||||
_tokens.Fuer.ShouldBeEmpty("Ohne Lizenz wird auch kein Token verbraucht.");
|
||||
@@ -210,14 +210,14 @@ public sealed class ManagerCoreTests : IAsyncDisposable
|
||||
// ─── When the start fails ───
|
||||
|
||||
[Fact]
|
||||
public async Task Eine_Instanz_die_sich_nicht_meldet_gilt_als_nicht_gestartet()
|
||||
public async Task An_instance_that_does_not_report_counts_as_not_started()
|
||||
{
|
||||
var pfad = _verzeichnisse.CreateInstance("Stumm");
|
||||
var path = _directories.CreateInstance("Stumm");
|
||||
|
||||
await using var manager = Manager();
|
||||
await manager.StartAsync();
|
||||
|
||||
// The process runs, the instance never reports in.
|
||||
(await manager.StartInstanceAsync(pfad)).ShouldBe(StartRefusal.DidNotStart);
|
||||
(await manager.StartInstanceAsync(path)).ShouldBe(StartRefusal.DidNotStart);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user