test(java-oracle): DnsRun records DNS as Java FILIUS runs it

A resolver's lookup on the new dns-lan network (A, MX, a referral by NS,
an unknown name, a missing server): every frame and the call's result.
ScenarioNetwork installs a scenario's DNS servers. The Swift comparison
reads only scenarios with a Swift result.

Measured: Java's text messages (ID=... QR=... header, question and record
lines), no question in the answer, RCODE 0 always, a referral in the answer
section, an iterative resolver waiting 5 RTT per query.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 16:46:07 +00:00
co-authored by Claude Opus 5.5
parent efc7c440f6
commit 24ebcea67f
11 changed files with 914 additions and 3 deletions
@@ -18,6 +18,7 @@ import filius.hardware.knoten.Rechner;
import filius.hardware.knoten.Switch;
import filius.rahmenprogramm.nachrichten.Lauscher;
import filius.software.dhcp.DHCPServer;
import filius.software.dns.DNSServer;
import filius.software.netzzugangsschicht.EthernetFrame;
import filius.software.system.InternetKnotenBetriebssystem;
import filius.software.transportschicht.Segment;
@@ -121,6 +122,21 @@ public class ScenarioNetwork {
server.setAktiv(Boolean.TRUE.equals(config.get("active")));
servers.add(entry.getKey());
}
// A DNS server: installed, its records written to /dns/hosts (TTL 3600), switched on.
for (Map.Entry<String, Object> entry : map(scenario.getOrDefault("dnsServers", new HashMap<>())).entrySet()) {
Map<String, Object> config = map(entry.getValue());
InternetKnotenBetriebssystem os = system(nodes.get(entry.getKey()));
DNSServer dns = new DNSServer();
dns.setSystemSoftware(os);
os.getInstallierteAnwendungen().put("filius.software.dns.DNSServer", dns);
for (Object line : list(config.getOrDefault("records", new ArrayList<>()))) {
String[] parts = ((String) line).split(" ");
dns.hinzuRecord(parts[0], parts[1], parts[2]);
}
dns.setRecursiveResolutionEnabled(Boolean.TRUE.equals(config.get("recursive")));
dns.setAktiv(true);
servers.add(entry.getKey());
}
for (Object each : list(scenario.getOrDefault("dhcpClients", new ArrayList<>()))) {
system(nodes.get((String) each)).setDHCPKonfiguration(true);
}