(use-modules (ice-9 match) (srfi srfi-64) (srfi srfi-1) (srfi srfi-13) (fruix packages freebsd) (fruix system freebsd) (fruix system freebsd model) (fruix system freebsd render)) (define os (operating-system)) (define generated-files (operating-system-generated-files os #:guile-store "/tmp/test-guile" #:guile-extra-store "/tmp/test-guile-extra" #:shepherd-store "/tmp/test-shepherd" #:guile-newt-store "/tmp/test-guile-newt")) (define loader-conf (assoc-ref generated-files "boot/loader.conf")) (define ttys (assoc-ref generated-files "etc/ttys")) (define (install-targets package) (map (lambda (entry) (match entry ((_ _ target) target))) (freebsd-package-install-plan package))) (define userland-targets (install-targets freebsd-userland)) (define runtime-targets (install-targets freebsd-runtime)) (define rc-script-targets (install-targets freebsd-rc-scripts)) (test-begin "console-defaults") (test-equal "default loader entries" '(("boot_serial" . "YES") ("boot_multicons" . "YES") ("console" . "comconsole,vidconsole") ("autoboot_delay" . "1")) (effective-loader-entries os)) (test-assert "loader.conf enables serial boot" (string-contains loader-conf "boot_serial=\"YES\"")) (test-assert "loader.conf enables multicons" (string-contains loader-conf "boot_multicons=\"YES\"")) (test-assert "loader.conf enables vid+serial console" (string-contains loader-conf "console=\"comconsole,vidconsole\"")) (test-assert "ttys enables ttyv0" (string-contains ttys "ttyv0\t\"/usr/libexec/getty Pc\"\txterm\tonifexists secure")) (test-assert "ttys enables ttyv7" (string-contains ttys "ttyv7\t\"/usr/libexec/getty Pc\"\txterm\tonifexists secure")) (test-assert "ttys enables ttyu0" (string-contains ttys "ttyu0\t\"/usr/libexec/getty 3wire\"\tvt100\tonifconsole secure")) (test-assert "ttys enables xc0" (string-contains ttys "xc0\t\"/usr/libexec/getty Pc\"\txterm\tonifconsole secure")) (test-assert "console entry stays disabled" (string-contains ttys "console\tnone\tunknown\toff secure")) (test-assert "userland stages login tools" (every (lambda (target) (member target userland-targets)) '("usr/bin/login" "usr/bin/passwd" "usr/bin/su" "usr/bin/who" "usr/bin/last" "usr/libexec/getty"))) (test-assert "runtime stages gettytab" (member "etc/gettytab" runtime-targets)) (test-assert "rc scripts stage readable defaults files explicitly" (every (lambda (target) (member target rc-script-targets)) '("etc/defaults/bluetooth.device.conf" "etc/defaults/periodic.conf" "etc/defaults/rc.conf"))) (test-assert "rc scripts do not stage entire defaults directory" (not (member "etc/defaults" rc-script-targets))) (test-end "console-defaults")