mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-10-15 17:19:55 -07:00
The cases that tested a mock, a timer, a wording or a table, or that
replayed a judgment a host test already holds, leave forgetest/tests.
What catches a false PASS, keeps the bench safe, or guards the gate
stays.
- test_baseline: the fake sysfs tree is a mixin with no test_ methods,
so ExtensionFreeTests and BaselineModeTests no longer re-run
BaselineTests' 25 cases (133 runs, now 45). CoolPublishTests, the
lamp-fade cases and TransientNotLeftoverTests go; PositionDeadbandTests
keeps a reading past the band and an unreadable reading, both never
excused. Both latch-relock cases stay.
- test_fixture: MdnsTests, the three timing cases, the probe's log
wording, and nine prompt-routing variants go. A live test never runs
unattended, the arm-press opt-in, the short-press edge, the presence
press handing over the arm press, and the arm notice dropping at the
press stay (35 cases, now 21).
- test_cloud_suite: three false-PASS guards stay: the latch open at a
dark print's button, a lid stop that is not edge-driven, the kernel
refusing the resume. The guards for the latch unlocking in the hold
and a paused print resuming left with their catalog tests in 6a434bb.
The rest go, with the harness pieces and the hunt-lid fixture only
they read (41 cases, now 3).
- test_cooling_suite: GateOffTests, CriticalTierTests, FanGateTests and
FansQuietTests go with their harness; the flow verdict's log reads
stay: only the text after the offset, never an older verdict before it
(the flow-under-load false-PASS guard), a rotated log read whole.
- test_queue: RunClockTests and three ordering cases go, and refusals
are judged by a reason given, not its words; both live
acknowledgment cases stay.
- test_takeover_position: the six cases that judge the head and move
nothing stay.
- test_camera_home_return: the five cases where the head must not move
stay, and so do the three that check the hand-back jog's direction and
distance (homed, unhomed with the counters not counted twice, after
cloud mode): a wrong sign or a double count drives the head into the
gantry stops (15 cases, now 8).
- test_server: the keep-alive and ETag cases, the takeover and scope
half of the bench case, and the page's self-contained asserts
(test_page.py's) go.
- test_operator: the wording cases, the fixture case (test_fixture.py's)
and JournalTests go.
- test_mode: the supervisor timeout table goes.
- test_takeover_client: the listener, the offline service back, the
online client without the hunt, and GRBL under no marker stay.
- test_responsiveness: PageTests and ImplementationCostTests go; the
log cache keeps appends, a partial line, a replaced file and a fresh
list, and the fingerprint cache a changed manifest and one with no
content hash.
- test_bench_registry: GfbenchTests and two description and argument
pins go.
- test_installer: the log-format and TLS-wording cases and
InstallerShapeTests go; the die case checks the reason is in the log,
not its format.
- test_image: KernelIdentTests and the registration pin go.
Each file's __main__ guard now ends the file, and the docstrings say what
each still proves.
Proof: each of the fifteen files passes under Linux as forgetest-ci
discovers it, and pyflakes reports nothing new in them.
Acceptance: none; test-only.
64 lines
2.9 KiB
Python
64 lines
2.9 KiB
Python
# Copyright 2026 514 LLC d/b/a OpenGlow
|
|
# Written by Scott Wiederhold
|
|
# https://community.openglow.org
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import unittest
|
|
|
|
from forgetest.suite import image
|
|
|
|
|
|
class NetworkBootTests(unittest.TestCase):
|
|
STANZA = ("auto wlan0\n"
|
|
"iface wlan0 inet dhcp\n"
|
|
"\twpa-driver nl80211\n"
|
|
"\tudhcpc_opts -x hostname:$(hostname)\n")
|
|
|
|
def test_ifstate_names_the_interfaces_ifup_finished(self):
|
|
self.assertEqual(image.ifstate_names("lo=lo\nwlan0=wlan0\n"), {"lo", "wlan0"})
|
|
self.assertEqual(image.ifstate_names("lo=lo\n"), {"lo"})
|
|
self.assertEqual(image.ifstate_names(""), set())
|
|
self.assertEqual(image.ifstate_names(None), set())
|
|
|
|
def test_an_interfaces_file_without_a_dhcpv6_client_is_clean(self):
|
|
self.assertEqual(image.dhcp6_in_interfaces(self.STANZA), [])
|
|
self.assertEqual(image.dhcp6_in_interfaces(None), [])
|
|
|
|
def test_a_command_that_starts_a_dhcpv6_client_is_named(self):
|
|
text = self.STANZA + ("iface wlan0 inet6 manual\n"
|
|
"\tup udhcpc6 -i wlan0 -b -S -p /run/udhcpc6.wlan0.pid\n")
|
|
self.assertEqual(image.dhcp6_in_interfaces(text),
|
|
["up udhcpc6 -i wlan0 -b -S -p /run/udhcpc6.wlan0.pid"])
|
|
detached = "\tup start-stop-daemon -S -b -x /usr/bin/udhcpc6 -- -f -i wlan0\n"
|
|
self.assertEqual(len(image.dhcp6_in_interfaces(self.STANZA + detached)), 1)
|
|
|
|
def test_an_inet6_method_that_runs_a_client_is_named(self):
|
|
self.assertEqual(image.dhcp6_in_interfaces("iface wlan0 inet6 dhcp\n"),
|
|
["iface wlan0 inet6 dhcp"])
|
|
self.assertEqual(image.dhcp6_in_interfaces("iface wlan0 inet6 static\n"), [])
|
|
self.assertEqual(image.dhcp6_in_interfaces("iface wlan0 inet dhcp\n"), [])
|
|
|
|
def test_a_comment_starts_nothing(self):
|
|
text = self.STANZA + "# No DHCPv6 client runs; udhcpc6 is not on the image.\n"
|
|
self.assertEqual(image.dhcp6_in_interfaces(text), [])
|
|
|
|
def test_parse_stat_reads_the_parent_past_an_awkward_comm(self):
|
|
self.assertEqual(image.parse_stat("371 (udhcpc) S 1 371 371 0 -1 4194624"),
|
|
(371, "udhcpc", 1))
|
|
self.assertEqual(image.parse_stat("9 (a (b) c) S 7 9 9 0"), (9, "a (b) c", 7))
|
|
self.assertIsNone(image.parse_stat(""))
|
|
self.assertIsNone(image.parse_stat("12 (x) S"))
|
|
|
|
def test_link_addrs_sorts_one_interface_by_scope(self):
|
|
text = ("fe800000000000002e6b7dfffe0db00a 02 40 20 80 wlan0\n"
|
|
"26001700000000000000000000001234 02 80 00 00 wlan0\n"
|
|
"00000000000000000000000000000001 01 80 10 80 lo\n")
|
|
local, world = image.link_addrs(text, "wlan0")
|
|
self.assertEqual(local, ["fe800000000000002e6b7dfffe0db00a"])
|
|
self.assertEqual(world, ["26001700000000000000000000001234"])
|
|
self.assertEqual(image.link_addrs(text, "eth0"), ([], []))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|