captureRows.ts builds Java's rows per frame (Lauscher.datenVorbereiten): Ethernet; ARP, ICMP or IP; TCP or UDP; the data with Java's protocol recognition; with addresses and ports or ports only. The comment stays structured; captureCommentText says it with given words and numbers. ScenarioNetwork writes Java's finished tables per card (Lauscher.getDaten, German locale); all runtime runs are recorded again, NatRun has ttlOut. expectSameCaptures compares both views for every frame. Fixed where the engine differed: an ARP request's target MAC is the broadcast address, an ICMP error's identifier and sequence number are 0 (RFC 792), and host unreachable from a router carries the packet as forwarded. Not taken: Java's lower-case broadcast address in a reply to 0.0.0.0, and the typo 'Exeeded'. RIP keeps its recordings: Java's staggered router start now gives a different startup on this machine. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
196 lines
11 KiB
Bash
Executable File
196 lines
11 KiB
Bash
Executable File
#!/bin/sh
|
|
# Reads every .fls under corpus/ with Java FILIUS itself and writes
|
|
# corpus/corpus.java.json. Java is the arbiter for the file format (plan §13, M2).
|
|
# Needs a JDK (17+), Maven and xvfb-run: FILIUS opens its main window while
|
|
# loading (Information.reset → JMainFrame), so it needs a display, not headless.
|
|
set -eu
|
|
here="$(cd "$(dirname "$0")" && pwd)"
|
|
root="$(cd "$here/../.." && pwd)"
|
|
commit=6640354
|
|
upstream="$here/.upstream"
|
|
if [ ! -d "$upstream/.git" ]; then
|
|
git clone -q https://gitlab.com/filius1/filius.git "$upstream"
|
|
fi
|
|
if [ "$(git -C "$upstream" rev-parse --short=7 HEAD)" != "$commit" ]; then
|
|
git -C "$upstream" fetch -q origin
|
|
git -C "$upstream" checkout -q "$commit"
|
|
rm -rf "$upstream/target"
|
|
fi
|
|
if [ ! -f "$upstream/target/filius.jar" ]; then
|
|
(cd "$upstream" && mvn -q -DskipTests package dependency:copy-dependencies -DoutputDirectory=target/lib)
|
|
fi
|
|
classpath="$upstream/target/filius.jar:$upstream/target/lib/*"
|
|
mkdir -p "$here/.build"
|
|
javac -encoding UTF-8 -d "$here/.build" -cp "$classpath" "$here/src/FlsOracle.java" "$here/src/GetterDefaults.java" "$here/src/IpCheckCases.java" "$here/src/DnsHostsCases.java" "$here/src/EmailFileCases.java" "$here/src/BeansDump.java" "$here/src/Base64Cases.java" "$here/src/ScenarioNetwork.java" "$here/src/DhcpRun.java" "$here/src/TcpRun.java" "$here/src/DnsRun.java" "$here/src/ArpRun.java" "$here/src/RipRun.java" "$here/src/NatRun.java" "$here/src/WlanRun.java"
|
|
# FILIUS writes its settings below $HOME; keep them out of the real one.
|
|
mkdir -p "$here/.build/home"
|
|
# Removed first: a crashed run must not leave the previous result standing.
|
|
rm -f "$root/corpus/corpus.java.json"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" FlsOracle \
|
|
"$root/corpus" "$root/corpus/corpus.java.json" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$root/corpus/corpus.java.json"
|
|
|
|
# Getter defaults and static constants for the XMLEncoder references (packages/fls/src/javaDefaults.json).
|
|
defaults="$root/packages/fls/src/javaDefaults.json"
|
|
rm -f "$defaults"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" GetterDefaults "$defaults" \
|
|
filius.gui.netzwerksicht.JSidebarButton#iconTextGap \
|
|
filius.gui.netzwerksicht.JSidebarButton#verticalTextPosition \
|
|
filius.gui.netzwerksicht.JSidebarButton#displayedMnemonicIndex \
|
|
filius.gui.netzwerksicht.JSidebarButton#debugGraphicsOptions \
|
|
filius.gui.netzwerksicht.JSidebarButton#enabled \
|
|
java.lang.ThreadGroup#maxPriority \
|
|
filius.hardware.knoten.Rechner#maxLayerOfOperation \
|
|
filius.hardware.knoten.Notebook#maxLayerOfOperation \
|
|
filius.hardware.knoten.Vermittlungsrechner#maxLayerOfOperation \
|
|
filius.hardware.knoten.Gateway#maxLayerOfOperation \
|
|
filius.software.clientserver.ServerBaustein#port \
|
|
filius.software.dhcp.DHCPServer#port \
|
|
filius.software.dns.DNSServer#port \
|
|
filius.software.rip.RIPServer#port \
|
|
filius.software.www.WebServer#port \
|
|
javax.swing.SwingConstants::CENTER \
|
|
filius.software.clientserver.ServerBaustein#aktiv \
|
|
filius.software.clientserver.ClientBaustein#zielPort \
|
|
filius.software.clientserver.ClientBaustein#zielIPAdresse \
|
|
filius.software.dns.DNSServer#aktiv \
|
|
filius.software.www.WebServer#aktiv \
|
|
filius.software.www.WebServer#useVHost \
|
|
filius.software.dateiaustausch.PeerToPeerAnwendung#maxTeilnehmerZahl \
|
|
2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$defaults"
|
|
|
|
# IP.ipCheck on hand-picked cases (packages/fls/src/javaIp.ts).
|
|
cases="$root/packages/fls/test/ip-check.cases.txt"
|
|
ipcheck="$root/packages/fls/test/ip-check.java.json"
|
|
rm -f "$ipcheck"
|
|
HOME="$here/.build/home" java -cp "$classpath:$here/.build" IpCheckCases "$cases" "$ipcheck" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$ipcheck"
|
|
|
|
# Base64.encodeBytes around its line length (packages/fls/src/exportProject.ts, javaBase64).
|
|
base64="$root/packages/fls/test/base64.java.json"
|
|
rm -f "$base64"
|
|
HOME="$here/.build/home" java -cp "$classpath:$here/.build" Base64Cases "$base64" 0 1 2 3 55 56 57 58 59 113 114 115 116 171 172 2000 2001 2002 2052 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$base64"
|
|
|
|
# DNSServer's own reading of /dns/hosts on hand-picked files (packages/fls/src/dnsHosts.ts).
|
|
cases="$root/packages/fls/test/dns-hosts.cases.txt"
|
|
dnshosts="$root/packages/fls/test/dns-hosts.java.json"
|
|
rm -f "$dnshosts"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" DnsHostsCases "$cases" "$dnshosts" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$dnshosts"
|
|
|
|
# EmailServer.kontenLaden and EmailAnwendung.laden on hand-picked account files (packages/fls/src/javaEmail.ts).
|
|
for kind in server client; do
|
|
cases="$root/packages/fls/test/email-$kind.cases.txt"
|
|
output="$root/packages/fls/test/email-$kind.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" EmailFileCases "$kind" "$cases" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# What XMLDecoder makes of the files packages/fls/src/javaBeansWriter.ts writes.
|
|
beans="$root/packages/fls/test/beans"
|
|
rm -f "$beans/beans.java.json"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" BeansDump "$beans" "$beans/beans.java.json" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$beans/beans.java.json"
|
|
|
|
# What Java loads from the files packages/fls writes: Java's view written
|
|
# again (topologyWriter.test.ts, UPDATE_WRITTEN=1) and the editor model
|
|
# exported (exportProject.test.ts, UPDATE_EXPORTED=1). The files are not
|
|
# checked in, their SHA-256 is.
|
|
for written in "$root/packages/fls/test/written" "$root/packages/fls/test/exported"; do
|
|
if [ -d "$written" ]; then
|
|
rm -f "$written.java.json"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" FlsOracle "$written" "$written.java.json" --sha256 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$written.java.json"
|
|
fi
|
|
done
|
|
|
|
# DHCP as Java FILIUS runs it: a core scenario's network, started as the
|
|
# action mode starts it, for the given real-time milliseconds; every frame
|
|
# each card saw and the addresses at the end (packages/core/test/dhcpJava.test.ts).
|
|
# One run after another: a busy machine stretches the times.
|
|
for run in dhcp-lan:8000 dhcp-two-servers:8000 dhcp-conflict:25000 dhcp-no-server:25000; do
|
|
name="${run%%:*}"
|
|
output="$root/packages/core/test/scenarios/$name.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" DhcpRun \
|
|
"$root/packages/core/test/scenarios/$name.scenario.json" "${run##*:}" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# TCP as Java FILIUS runs it: stories of socket calls on tcp-lan's network
|
|
# (TcpRun); frames, calls and socket states, for the core's TCP comparison.
|
|
for run in exchange:30000 closedPort:30000 lostData:45000 lostSynAck:70000 lostFin:60000 lostLastFin:60000; do
|
|
story="${run%%:*}"
|
|
output="$root/packages/core/test/scenarios/tcp-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" TcpRun \
|
|
"$root/packages/core/test/scenarios/tcp-lan.scenario.json" "$story" "${run##*:}" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# DNS as Java FILIUS runs it: a resolver's lookup on dns-lan's network
|
|
# (DnsRun); frames and the call's result, for the core's DNS comparison.
|
|
for run in address:5000 mail:5000 referral:5000 unknown:5000 noServer:22000; do
|
|
story="${run%%:*}"
|
|
output="$root/packages/core/test/scenarios/dns-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" DnsRun \
|
|
"$root/packages/core/test/scenarios/dns-lan.scenario.json" "$story" "${run##*:}" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
# The same with a recursive server (dns-recursive). unknownInOwnZone asks
|
|
# itself without end: a short run, and a bounded heap.
|
|
for run in address:5000 referral:5000 unknown:5000 unknownInZone:5000 unknownInOwnZone:15500; do
|
|
story="${run%%:*}"
|
|
output="$root/packages/core/test/scenarios/dns-recursive-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -Xmx1g -cp "$classpath:$here/.build" DnsRun \
|
|
"$root/packages/core/test/scenarios/dns-recursive.scenario.json" "$story" "${run##*:}" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# NAT as Java FILIUS runs it: nat-home's home router between a LAN PC and two
|
|
# WAN hosts (NatRun); frames, calls and the router's NAT table at the end.
|
|
for run in pingOut:10000 udpOut:10000 udpTwoRemotes:25000 tcpOut:20000 forward:20000 pingWan:15000 ttlOut:10000; do
|
|
story="${run%%:*}"
|
|
output="$root/packages/core/test/scenarios/nat-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" NatRun \
|
|
"$root/packages/core/test/scenarios/nat-home.scenario.json" "$story" "${run##*:}" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# RIP as Java FILIUS runs it: rip-chain's routers, each with the core's seed
|
|
# for its pauses (RipRun); frames, table changes and the ping. Real time.
|
|
for run in converge:60000 expire:135000; do
|
|
story="${run%%:*}"
|
|
output="$root/packages/core/test/scenarios/rip-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" RipRun \
|
|
"$root/packages/core/test/scenarios/rip-chain.scenario.json" "$story" "${run##*:}" "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# ARP as Java FILIUS runs it: sends to addresses no card has on arp-routed's
|
|
# network (ArpRun); frames and the calls, for the core's ARP comparison.
|
|
for story in pingLan pingRouted udpTwice udpBehind routedUdpBehind routedPingBesideUdp routedPingBehindPing; do
|
|
output="$root/packages/core/test/scenarios/arp-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" ArpRun \
|
|
"$root/packages/core/test/scenarios/arp-routed.scenario.json" "$story" 16000 "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|
|
|
|
# WLAN as Java FILIUS runs it: pings over wireless cables, a plain cable and
|
|
# to a host on the switch's SSID without a cable (WlanRun); frames and calls.
|
|
for story in pingWired pingWireless pingWithoutCable pingFromWithoutCable; do
|
|
output="$root/packages/core/test/scenarios/wlan-java-$story.java.json"
|
|
rm -f "$output"
|
|
HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" WlanRun \
|
|
"$root/packages/core/test/scenarios/wlan-lan.scenario.json" "$story" 12000 "$output" 2>&1 | grep -v 'logback\|^$' || true
|
|
test -s "$output"
|
|
done
|