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:
Richard
2026-10-04 13:18:43 +02:00
co-authored by Claude Opus 5.5
parent 837a634a22
commit 77062facc9
190 changed files with 4813 additions and 4813 deletions
@@ -45,11 +45,11 @@ public sealed class LicenseBackupTests : IDisposable
catch { /* Cleaning up is secondary */ }
}
private string Quelle(byte[] inhalt)
private string Source(byte[] content)
{
var pfad = Datei("quelle.bin");
File.WriteAllBytes(pfad, inhalt);
return pfad;
var path = Datei("quelle.bin");
File.WriteAllBytes(path, content);
return path;
}
// ─── The container ───
@@ -59,20 +59,20 @@ public sealed class LicenseBackupTests : IDisposable
/// without it being noticed.
/// </summary>
[Fact]
public void Ein_Archiv_ueber_mehrere_Stuecke_kommt_unveraendert_zurueck()
public void An_archive_spanning_several_chunks_comes_back_unchanged()
{
var inhalt = RandomNumberGenerator.GetBytes(2_600_000);
var content = RandomNumberGenerator.GetBytes(2_600_000);
LicenseBackupCipher.Encrypt(Quelle(inhalt), "{}", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.Encrypt(Source(content), "{}", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.DecryptTo(Datei("a.clawdbak"), Datei("zurueck.bin"), Lizenz);
File.ReadAllBytes(Datei("zurueck.bin")).ShouldBe(inhalt);
File.ReadAllBytes(Datei("zurueck.bin")).ShouldBe(content);
}
[Fact]
public void Auch_ein_leeres_Archiv_kommt_zurueck()
public void An_empty_archive_comes_back_too()
{
LicenseBackupCipher.Encrypt(Quelle([]), "{}", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.Encrypt(Source([]), "{}", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.DecryptTo(Datei("a.clawdbak"), Datei("zurueck.bin"), Lizenz);
File.ReadAllBytes(Datei("zurueck.bin")).ShouldBeEmpty();
@@ -83,9 +83,9 @@ public sealed class LicenseBackupTests : IDisposable
/// above all before an instance is stopped for it.
/// </summary>
[Fact]
public void Ein_fremder_Schluessel_wird_erkannt_bevor_etwas_geschrieben_wird()
public void A_foreign_key_is_recognised_before_anything_is_written()
{
LicenseBackupCipher.Encrypt(Quelle([1, 2, 3]), "{}", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.Encrypt(Source([1, 2, 3]), "{}", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.MatchesKey(Datei("a.clawdbak"), "ANDERE-LIZENZ").ShouldBeFalse();
LicenseBackupCipher.MatchesKey(Datei("a.clawdbak"), Lizenz).ShouldBeTrue();
@@ -101,18 +101,18 @@ public sealed class LicenseBackupTests : IDisposable
/// space or a lowercase letter must not decide about "lost" there.
/// </summary>
[Fact]
public void Schreibweise_und_Leerzeichen_des_Schluessels_spielen_keine_Rolle()
public void Spelling_and_spaces_of_the_key_do_not_matter()
{
LicenseBackupCipher.Encrypt(Quelle([4, 5, 6]), "{}", Datei("a.clawdbak"), " clawd-abcd-1234 -efgh-5678 ");
LicenseBackupCipher.Encrypt(Source([4, 5, 6]), "{}", Datei("a.clawdbak"), " clawd-abcd-1234 -efgh-5678 ");
LicenseBackupCipher.DecryptTo(Datei("a.clawdbak"), Datei("zurueck.bin"), Lizenz);
File.ReadAllBytes(Datei("zurueck.bin")).ShouldBe([4, 5, 6]);
}
[Fact]
public void Das_Manifest_ist_lesbar_ohne_das_Archiv_zu_entschluesseln()
public void The_manifest_is_readable_without_decrypting_the_archive()
{
LicenseBackupCipher.Encrypt(Quelle(RandomNumberGenerator.GetBytes(3_000_000)),
LicenseBackupCipher.Encrypt(Source(RandomNumberGenerator.GetBytes(3_000_000)),
"""{"instanceName":"Alpha"}""", Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.ReadManifest(Datei("a.clawdbak"), Lizenz).ShouldContain("Alpha");
@@ -123,26 +123,26 @@ public sealed class LicenseBackupTests : IDisposable
/// complete and get a ZIP that aborts somewhere when unpacking.
/// </summary>
[Fact]
public void Ein_fehlendes_letztes_Stueck_faellt_auf()
public void A_missing_last_chunk_is_noticed()
{
var inhalt = RandomNumberGenerator.GetBytes(1024 * 1024 + 500);
var content = RandomNumberGenerator.GetBytes(1024 * 1024 + 500);
const string manifest = "{}";
LicenseBackupCipher.Encrypt(Quelle(inhalt), manifest, Datei("a.clawdbak"), Lizenz);
LicenseBackupCipher.Encrypt(Source(content), manifest, Datei("a.clawdbak"), Lizenz);
// Header 8+1+16, manifest 12+4+16+len, first chunk 12+4+16+1 MiB - cut after that.
var bisErstesStueck = 25 + (32 + Encoding.UTF8.GetByteCount(manifest)) + (32 + 1024 * 1024);
var voll = File.ReadAllBytes(Datei("a.clawdbak"));
File.WriteAllBytes(Datei("a.clawdbak"), voll[..bisErstesStueck]);
var upToFirstChunk = 25 + (32 + Encoding.UTF8.GetByteCount(manifest)) + (32 + 1024 * 1024);
var full = File.ReadAllBytes(Datei("a.clawdbak"));
File.WriteAllBytes(Datei("a.clawdbak"), full[..upToFirstChunk]);
Should.Throw<BackupException>(() =>
LicenseBackupCipher.DecryptTo(Datei("a.clawdbak"), Datei("zurueck.bin"), Lizenz));
}
[Fact]
public void Eine_Veraenderung_mitten_im_Archiv_faellt_auf()
public void A_change_in_the_middle_of_the_archive_is_noticed()
{
LicenseBackupCipher.Encrypt(Quelle(RandomNumberGenerator.GetBytes(200_000)), "{}",
LicenseBackupCipher.Encrypt(Source(RandomNumberGenerator.GetBytes(200_000)), "{}",
Datei("a.clawdbak"), Lizenz);
var bytes = File.ReadAllBytes(Datei("a.clawdbak"));
@@ -155,12 +155,12 @@ public sealed class LicenseBackupTests : IDisposable
// ─── The backup as a whole ───
private string Instanz()
private string Instance()
{
var pfad = Datei("Instance-Alpha");
Directory.CreateDirectory(pfad);
var path = Datei("Instance-Alpha");
Directory.CreateDirectory(path);
AtomicFile.WriteAllText(Path.Combine(pfad, "InstanceSettings.json"), $$"""
AtomicFile.WriteAllText(Path.Combine(path, "InstanceSettings.json"), $$"""
{
"instanceId": "alpha-1",
"instanceName": "Alpha",
@@ -168,14 +168,14 @@ public sealed class LicenseBackupTests : IDisposable
}
""");
return pfad;
return path;
}
private async Task<string> SicherungAsync()
private async Task<string> BackupAsync()
{
var ziel = Datei("backup_Alpha.clawdbak");
await new BackupService().CreateAsync(Instanz(), ziel, new BackupOptions
await new BackupService().CreateAsync(Instance(), ziel, new BackupOptions
{
Secrets = SecretMode.License,
LicenseKey = Lizenz
@@ -190,20 +190,20 @@ public sealed class LicenseBackupTests : IDisposable
/// license key.
/// </summary>
[Fact]
public async Task Eine_Sicherung_ueberlebt_den_Maschinenwechsel()
public async Task A_backup_survives_the_machine_change()
{
var sicherung = await SicherungAsync();
var backup = await BackupAsync();
SecretKeyStore.UseDirectory(Datei("maschine-b"));
var ziel = Datei("Wiederhergestellt");
await new BackupService().RestoreAsync(sicherung, ziel,
await new BackupService().RestoreAsync(backup, ziel,
new RestoreOptions { LicenseKey = Lizenz, Overwrite = true });
using var doc = JsonDocument.Parse(File.ReadAllText(Path.Combine(ziel, "InstanceSettings.json")));
var wert = doc.RootElement.GetProperty("openRouterApiKey").GetString();
var value = doc.RootElement.GetProperty("openRouterApiKey").GetString();
SecretProtector.Unprotect(wert).ShouldBe(ApiKey);
SecretProtector.Unprotect(value).ShouldBe(ApiKey);
}
/// <summary>
@@ -211,44 +211,44 @@ public sealed class LicenseBackupTests : IDisposable
/// one at all.
/// </summary>
[Fact]
public async Task Die_Sicherung_verraet_keinen_Klartext()
public async Task The_backup_reveals_no_plaintext()
{
var sicherung = await SicherungAsync();
var backup = await BackupAsync();
LicenseBackupCipher.IsEncrypted(sicherung).ShouldBeTrue();
LicenseBackupCipher.IsEncrypted(backup).ShouldBeTrue();
var roh = Encoding.Latin1.GetString(File.ReadAllBytes(sicherung));
roh.ShouldNotContain(ApiKey);
roh.ShouldNotContain("openRouterApiKey");
roh.ShouldNotContain("InstanceSettings");
var raw = Encoding.Latin1.GetString(File.ReadAllBytes(backup));
raw.ShouldNotContain(ApiKey);
raw.ShouldNotContain("openRouterApiKey");
raw.ShouldNotContain("InstanceSettings");
}
/// <summary>
/// With a foreign key nothing is written — not half, not partially.
/// </summary>
[Fact]
public async Task Mit_fremdem_Schluessel_bleibt_das_Ziel_unberuehrt()
public async Task With_a_foreign_key_the_target_stays_untouched()
{
var sicherung = await SicherungAsync();
var backup = await BackupAsync();
var ziel = Datei("Ziel");
Directory.CreateDirectory(ziel);
await Should.ThrowAsync<BackupKeyMismatchException>(() =>
new BackupService().RestoreAsync(sicherung, ziel,
new BackupService().RestoreAsync(backup, ziel,
new RestoreOptions { LicenseKey = "ANDERE-LIZENZ", Overwrite = true }));
Directory.EnumerateFileSystemEntries(ziel).ShouldBeEmpty();
}
[Fact]
public async Task Die_Uebersicht_braucht_den_passenden_Schluessel()
public async Task The_overview_needs_the_matching_key()
{
var sicherung = await SicherungAsync();
var backup = await BackupAsync();
(await new BackupService().InspectAsync(sicherung, licenseKey: Lizenz))
(await new BackupService().InspectAsync(backup, licenseKey: Lizenz))
.InstanceName.ShouldBe("Alpha");
await Should.ThrowAsync<BackupKeyMismatchException>(() =>
new BackupService().InspectAsync(sicherung, licenseKey: "ANDERE-LIZENZ"));
new BackupService().InspectAsync(backup, licenseKey: "ANDERE-LIZENZ"));
}
}