feat(fls): system software settings as Java loads them

readSystemSoftware adds to each node what the topology needs from its
system software: a switch's SSID and learning time, a host's wireless
SSID, a router's RIP switch, the manual routes and the firewall of a
router or home router. All 23 corpus files match Java.

- A router's firewall is one object its constructor hangs in two places;
  the corpus writes it under the web server's "konfig" plug-in. The
  places are merged.
- The decoder keeps entries a constructor made in a map, reached by
  get(key) (installed applications), like the elements of a list.
- The Java oracle loads every file twice and writes values that differ
  as null: what FILIUS rolls (MACs, a switch's SSID) without text search.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-29 20:56:10 +00:00
co-authored by Claude Opus 5.5
parent da2ec1dae2
commit 9a389810f9
10 changed files with 1851 additions and 228 deletions
+27
View File
@@ -186,6 +186,33 @@ describe('XMLDecoder rules', () => {
expect(listItems(list)).toHaveLength(3);
});
it("keeps the entries a constructor made in a map, reached by get(key), and shares them", () => {
// A router's operating system installs its web server in the constructor;
// the file reaches it through the map and changes it.
const [system] = decodeJavaBeans(
doc(`<object class="filius.software.system.VermittlungsrechnerBetriebssystem">
<void id="HashMap0" property="installierteAnwendungen">
<void id="WebServer0" method="get"><string>filius.software.www.WebServer</string>
<void property="aktiv"><boolean>true</boolean></void>
</void>
<void method="get"><string>filius.software.www.WebServer</string>
<void property="port"><int>8080</int></void>
</void>
<void method="put"><string>extra</string><int>1</int></void>
</void>
</object>`),
);
const entries = mapEntries(object(system).properties.get('installierteAnwendungen'));
expect(entries.map(([key]) => key)).toEqual(['filius.software.www.WebServer', 'extra']);
const server = object(entries[0]![1]);
expect(server).toMatchObject({ className: 'WebServer', id: 'WebServer0', fromGetter: true });
expect([...server.properties]).toEqual([
['aktiv', true],
['port', 8080],
]);
});
it('replays add at an index and set by index in order', () => {
const [list] = decodeJavaBeans(
doc(`<object class="java.util.ArrayList">