diff options
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/checks/apk.sh | 41 | ||||
| -rwxr-xr-x | tests/checks/deb.sh | 25 | ||||
| -rwxr-xr-x | tests/checks/homebrew.sh | 26 | ||||
| -rw-r--r-- | tests/internet/etc/dkimproxyout.conf.in | 9 | ||||
| -rw-r--r-- | tests/internet/etc/dovecot/dovecot.conf.in | 54 | ||||
| -rw-r--r-- | tests/internet/etc/postfix/main.cf.in | 40 | ||||
| -rw-r--r-- | tests/internet/etc/postfix/master.cf | 51 | ||||
| -rw-r--r-- | tests/internet/etc/sasl2/smtpd.conf | 3 | ||||
| -rw-r--r-- | tests/internet/key.txt | 1 | ||||
| -rw-r--r-- | tests/internet/system.scm | 54 | ||||
| -rw-r--r-- | tests/internet/tests.scm | 72 | ||||
| -rw-r--r-- | tests/local/etc/postfix/main.cf | 25 | ||||
| -rw-r--r-- | tests/local/etc/postfix/master.cf | 30 | ||||
| -rw-r--r-- | tests/local/system.scm | 27 | ||||
| -rw-r--r-- | tests/tests.scm | 71 | ||||
| -rw-r--r-- | tests/unit.scm | 18 | ||||
| -rwxr-xr-x | tests/vm-check.sh | 127 |
17 files changed, 98 insertions, 576 deletions
diff --git a/tests/checks/apk.sh b/tests/checks/apk.sh deleted file mode 100755 index 5acb479..0000000 --- a/tests/checks/apk.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -set -eu - - -while getopts 'k:' flag; do - case "$flag" in - k) - KEY="$OPTARG" - ;; - *) - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -if [ -z "${KEY:-}" ]; then - echo 'Missing "-k KEY" argument.' >&2 - exit 2 -fi - -set -x - -REPO="$1/alpine" - -if command -v remembering; then - echo 'remembering(1) is already installed.' >&2 - exit 1 -fi - -if apk info remembering; then - echo 'remembering(1) is already in apk(8) list.' >&2 - exit 1 -fi - -wget -qO- "$REPO"/"$KEY".rsa.pub | doas tee /etc/apk/keys/"$KEY".rsa.pub -printf '%s\n' "$REPO" | doas tee -a /etc/apk/repositories -doas apk add remembering - -remembering --help -remembering -V diff --git a/tests/checks/deb.sh b/tests/checks/deb.sh deleted file mode 100755 index 9a0ba7d..0000000 --- a/tests/checks/deb.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -set -eu -set -x - - -REPO="$1/debian" -KEY="$(printf '%s' "${REPO#https://}" | sed 's|/|-|g').asc" - -if command -v remembering; then - echo 'remembering(1) is already installed.' >&2 - exit 1 -fi - -if apt info remembering; then - echo 'remembering(1) is already in apt(8) list.' >&2 - exit 1 -fi - -wget -qO- "$REPO"/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/"$KEY" -echo "deb $REPO ./" | sudo tee -a /etc/apt/sources.list -sudo apt update -sudo apt install remembering - -remembering --help -remembering -V diff --git a/tests/checks/homebrew.sh b/tests/checks/homebrew.sh deleted file mode 100755 index ba33be8..0000000 --- a/tests/checks/homebrew.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -# Load brew(1) -# shellcheck source=/dev/null -. ~/.profile -set -eu -set -x - - -REPO="$1" - -if command -v remembering; then - echo 'remembering(1) is already installed.' >&2 - exit 1 -fi - -if brew info remembering; then - echo 'remembering(1) is already in the list of taps.' >&2 - exit 1 -fi - -brew tap org/euandre "$REPO" -brew install remembering-0-1-2 - -remembering --help -remembering -V diff --git a/tests/internet/etc/dkimproxyout.conf.in b/tests/internet/etc/dkimproxyout.conf.in deleted file mode 100644 index 3ee2466..0000000 --- a/tests/internet/etc/dkimproxyout.conf.in +++ /dev/null @@ -1,9 +0,0 @@ -listen 127.0.0.1:10027 -relay 127.0.0.1:10028 - -domain @HOSTNAME@ -selector dkimproxyout - -signature dkim(c=relaxed/relaxed,a=rsa-sha256) - -keyfile /var/lib/dkimproxyout/private.key diff --git a/tests/internet/etc/dovecot/dovecot.conf.in b/tests/internet/etc/dovecot/dovecot.conf.in deleted file mode 100644 index 6ac013d..0000000 --- a/tests/internet/etc/dovecot/dovecot.conf.in +++ /dev/null @@ -1,54 +0,0 @@ -protocols = imap - -default_internal_user = dovecot -default_internal_group = dovecot -default_login_user = dovenull -auth_mechanisms = plain login -auth_username_format = %n - -passdb { - driver = shadow -} -userdb { - driver = passwd -} -service auth-worker { - group = etc-shadow -} - -ssl = required -ssl_cert = </etc/letsencrypt/live/@HOSTNAME@/fullchain.pem -ssl_key = </etc/letsencrypt/live/@HOSTNAME@/privkey.pem -ssl_dh = </var/lib/dovecot/dhparam.pem - -base_dir = /var/run/dovecot -state_dir = /var/lib/dovecot - -verbose_proctitle = yes - -mail_location = maildir:/var/mail/%u:INBOX=/var/mail/%u:LAYOUT=fs - -namespace inbox { - inbox = yes - mailbox Drafts { - special_use = \Drafts - auto = subscribe - } - mailbox Sent { - special_use = \Sent - auto = subscribe - } - mailbox Archive { - special_use = \Archive - auto = subscribe - } - mailbox Junk { - special_use = \Junk - auto = subscribe - autoexpunge = 30d - } - mailbox Trash { - special_use = \Trash - auto = subscribe - } -} diff --git a/tests/internet/etc/postfix/main.cf.in b/tests/internet/etc/postfix/main.cf.in deleted file mode 100644 index 9cc2f4d..0000000 --- a/tests/internet/etc/postfix/main.cf.in +++ /dev/null @@ -1,40 +0,0 @@ -compatibility_level = 3.6 - -queue_directory = /var/spool/postfix -data_directory = /var/lib/postfix -mail_owner = postfix -setgid_group = postdrop - -header_checks = regexp:{ { /^Received:.*/ IGNORE }, { /^X-Originating-IP:.*/ IGNORE } } - -mail_spool_directory = /var/mail/ - -message_size_limit = 102400000 -mailbox_size_limit = 5120000000 - - -myhostname = @HOSTNAME@ - -smtpd_use_tls = yes -smtpd_tls_cert_file = /etc/letsencrypt/live/@HOSTNAME@/fullchain.pem -smtpd_tls_key_file = /etc/letsencrypt/live/@HOSTNAME@/privkey.pem -smtp_use_tls = $smtpd_use_tls -smtp_tls_cert_file = $smtpd_tls_cert_file -smtp_tls_key_file = $smtpd_tls_key_file - -smtp_tls_security_level = may - -recipient_delimiter = + - -smtpd_sasl_tls_security_options = noanonymous -smtpd_tls_security_level = may -smtpd_tls_auth_only = yes - -smtpd_relay_restrictions = $smtpd_recipient_restrictions -smtpd_recipient_restrictions = permit_mynetworks, - permit_sasl_authenticated, reject_unauth_destination -smtpd_sasl_auth_enable = yes -cyrus_sasl_config_path = /etc/sasl2 -debug_peer_list = 127.0.0.1 - -milter_default_action = accept diff --git a/tests/internet/etc/postfix/master.cf b/tests/internet/etc/postfix/master.cf deleted file mode 100644 index 5c25fd9..0000000 --- a/tests/internet/etc/postfix/master.cf +++ /dev/null @@ -1,51 +0,0 @@ -# ============================================================================================================ -# service type private unpriv chroot wakeup maxproc command + args -# (yes) (yes) (no) (never) (100) -# ============================================================================================================= - -anvil unix - - n - 1 anvil -bounce unix - - n - 0 bounce -cleanup unix n - n - 0 cleanup -defer unix - - n - 0 bounce -discard unix - - n - - discard -error unix - - n - - error -flush unix n - n 1000? 0 flush -lmtp unix - - n - - lmtp -local unix - n n - - local -pickup unix n - n 60 1 pickup - -o content_filter=dksign:[127.0.0.1]:10027 -proxymap unix - - n - - proxymap -proxywrite unix - - n - 1 proxymap -qmgr unix n - n 300 1 qmgr -relay unix - - n - - smtp -retry unix - - n - - error -rewrite unix - - n - - trivial-rewrite -scache unix - - n - 1 scache -showq unix n - n - - showq -smtp inet n - n - - smtpd -o syslog_name=postfix/smtp -smtp unix - - n - - smtp -tlsmgr unix - - n 1000? 1 tlsmgr -trace unix - - n - 0 bounce -verify unix - - n - 1 verify -virtual unix - n n - - virtual -postlog unix-dgram n - n - 1 postlogd - -submission inet n - n - - smtpd -o syslog_name=postfix/submission - -o smtpd_tls_security_level=encrypt - -o content_filter=dksign:[127.0.0.1]:10027 - -dksign unix - - n - - smtp - -o syslog_name=postfix/dkimproxyout-listen - -o smtp_send_xforward_command=yes - -o smtp_discard_ehlo_keywords=8bitmime,starttls - -127.0.0.1:10028 inet n - n - - smtpd - -o syslog_name=postfix/dkimproxyout-relay - -o content_filter= - -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks - -o smtpd_helo_restrictions= - -o smtpd_client_restrictions= - -o smtpd_sender_restrictions= - -o smtpd_recipient_restrictions=permit_mynetworks,reject - -o mynetworks=127.0.0.0/8 - -o smtpd_authorized_xforward_hosts=127.0.0.0/8 diff --git a/tests/internet/etc/sasl2/smtpd.conf b/tests/internet/etc/sasl2/smtpd.conf deleted file mode 100644 index af2ac43..0000000 --- a/tests/internet/etc/sasl2/smtpd.conf +++ /dev/null @@ -1,3 +0,0 @@ -pwcheck_method: saslauthd -saslauthd_path: /var/run/saslauthd/mux -log_level: 7 diff --git a/tests/internet/key.txt b/tests/internet/key.txt deleted file mode 100644 index a39f765..0000000 --- a/tests/internet/key.txt +++ /dev/null @@ -1 +0,0 @@ -key-contents diff --git a/tests/internet/system.scm b/tests/internet/system.scm index a7d090c..b6f5b1c 100644 --- a/tests/internet/system.scm +++ b/tests/internet/system.scm @@ -1,63 +1,17 @@ (use-modules - ((org euandre queue) #:prefix q:) - ((org euandre packages) #:prefix pkg:) + ((org euandre packages) #:prefix packages:) (gnu)) (use-package-modules) -(use-service-modules - certbot - cgit - dns - mail - networking - security - ssh) - -(define (path s) - (string-append (dirname (dirname (dirname (current-filename)))) "/" s)) - -(define +users+ - `(("user1" "I'm a user" ()) - ("another" "Description" ("wheel") ,(path "tests/internet/key.txt")))) - -(define-public papod-service-type - (pkg:service-type-for 'papod - pkg:<papod-configuration> - (pkg:papod-configuration) - '())) +(use-service-modules) (operating-system (host-name "a-internet-test-host") - (skeletons pkg:skeletons) - (users (append (pkg:user-accounts +users+) %base-user-accounts)) (services (append - (list - (service ntp-service-type) - (service dhcpcd-service-type) - ;; (service fail2ban-service-type) - (service pkg:binder-service-type) - (service pkg:glaze-service-type) - (service pkg:hsts-service-type) - (service pkg:untls-service-type) - (service pkg:wscat-service-type) - (service papod-service-type) - (service knot-service-type - (q:knot-zones-configuration "euandre.org" "1.2.3.4" "1:2:3:4:5:6:7:8")) - (service openssh-service-type - (q:openssh-default-configuration (pkg:users->keys +users+))) - (service certbot-service-type (q:tld-certbot-configuration "tld.local")) - (service cgit-service-type q:cgit-pre-configuration) - (service pkg:syskeep-service-type) - (service pkg:cicd-service-type) - (service q:shadow-group-service-type) - (service q:dkimproxyout-service-type) - (service q:cyrus-sasl-service-type) - (service q:dovecot-service-type) - (service q:internet-postfix-service-type) - (service mail-aliases-service-type '())) - pkg:base-services)) + (list) + %base-services)) (bootloader (bootloader-configuration (bootloader grub-bootloader))) diff --git a/tests/internet/tests.scm b/tests/internet/tests.scm deleted file mode 100644 index c4ffe85..0000000 --- a/tests/internet/tests.scm +++ /dev/null @@ -1,72 +0,0 @@ -(use-modules - ((org euandre packages) #:prefix pkg:) - (gnu) - (gnu tests) - (gnu system vm) - (guix profiles)) -(use-service-modules - networking) - - - -(define test-git-os - (simple-operating-system - (service dhcpcd-service-type) - (service pkg:git-service-type - (pkg:git-configuration - (run-server? #t))) - (simple-service 'mkdir-srv-dir activation-service-type - #~(mkdir-p "/srv/git")))) - -(define (test-git-fn) - (let* ((os (marionette-operating-system - test-git-os - #:imported-modules - '((gnu services herd)))) - (vm (virtual-machine - (operating-system os) - (port-forwardings - '())))) - (define test - (with-imported-modules '((gnu build marionette)) - #~(begin - (use-modules - ((srfi srfi-64) #:prefix t:) - ((gnu build marionette) #:prefix mrntt:)) - (define manette - (mrntt:make-marionette (list #$vm))) - (t:test-runner-current (mrntt:system-test-runner #$output)) - (t:test-begin "git-daemon-server") - (t:test-assert "Git daemon service running" - (mrntt:marionette-eval - '(begin - (use-modules - ((gnu services herd) #:prefix herd:)) - (herd:start-service 'git)) - manette)) - (t:test-assert "Git daemon TCP port ready" - (mrntt:wait-for-tcp-port 9418 manette)) - (t:test-end)))) - (gexp->derivation "git-service-type-test" test))) - -(define test-git - (system-test - (name "git") - (description "Test custom Git service") - (value (test-git-fn)))) - -(define tests - (list - test-git)) - -(define (system-test->manifest-entry test) - (manifest-entry - (name - (pkg:str "test." - (system-test-name test))) - (version "0") - (item test))) - -(manifest - (map system-test->manifest-entry - tests)) diff --git a/tests/local/etc/postfix/main.cf b/tests/local/etc/postfix/main.cf deleted file mode 100644 index 143ba5a..0000000 --- a/tests/local/etc/postfix/main.cf +++ /dev/null @@ -1,25 +0,0 @@ -compatibility_level = 3.6 - -queue_directory = /var/spool/postfix -data_directory = /var/lib/postfix -mail_owner = postfix -setgid_group = postdrop - -header_checks = regexp:{ { /^Received:.*/ IGNORE }, { /^X-Originating-IP:.*/ IGNORE } } - -mail_spool_directory = /var/mail/ - -message_size_limit = 102400000 -mailbox_size_limit = 5120000000 - -smtp_sender_dependent_authentication = yes -sender_dependent_relayhost_maps = hash:/var/lib/private/postfix/relayhosts-maps -smtp_sasl_password_maps = hash:/var/lib/private/postfix/sasl-password -smtp_sasl_auth_enable = yes -smtp_sasl_security_options = noanonymous -smtp_sasl_mechanism_filter = login, plain -smtp_use_tls = yes -smtp_tls_security_level = encrypt -smtp_tls_note_starttls_offer = yes - -mynetworks = 127.0.0.0/8 diff --git a/tests/local/etc/postfix/master.cf b/tests/local/etc/postfix/master.cf deleted file mode 100644 index 2cc4b02..0000000 --- a/tests/local/etc/postfix/master.cf +++ /dev/null @@ -1,30 +0,0 @@ -# ============================================================================================================ -# service type private unpriv chroot wakeup maxproc command + args -# (yes) (yes) (no) (never) (100) -# ============================================================================================================= - -anvil unix - - n - 1 anvil -bounce unix - - n - 0 bounce -cleanup unix n - n - 0 cleanup -defer unix - - n - 0 bounce -discard unix - - n - - discard -error unix - - n - - error -flush unix n - n 1000? 0 flush -lmtp unix - - n - - lmtp -local unix - n n - - local -pickup unix n - n 60 1 pickup -proxymap unix - - n - - proxymap -proxywrite unix - - n - 1 proxymap -qmgr unix n - n 300 1 qmgr -relay unix - - n - - smtp -retry unix - - n - - error -rewrite unix - - n - - trivial-rewrite -scache unix - - n - 1 scache -showq unix n - n - - showq -smtp inet n - n - - smtpd -o syslog_name=postfix/smtp -smtp unix - - n - - smtp -tlsmgr unix - - n 1000? 1 tlsmgr -trace unix - - n - 0 bounce -verify unix - - n - 1 verify -virtual unix - n n - - virtual -postlog unix-dgram n - n - 1 postlogd diff --git a/tests/local/system.scm b/tests/local/system.scm index 67c9292..4cb7550 100644 --- a/tests/local/system.scm +++ b/tests/local/system.scm @@ -1,33 +1,16 @@ (use-modules - ((org euandre packages) #:prefix pkg:) - ((org euandre queue) #:prefix q:) - ((xyz euandreh heredoc) #:prefix heredoc:) + ((org euandre packages) #:prefix packages:) (gnu)) (use-package-modules) -(use-service-modules - networking) -(heredoc:enable-syntax) +(use-service-modules) + + (operating-system (host-name "a-local-test-host") (services (append - (list - (service dhcpcd-service-type) - (service pkg:git-service-type) - (service q:local-postfix-service-type - (q:postfix-configuration - (main.cf-extra #"- - smtp_sender_dependent_authentication = yes - sender_dependent_relayhost_maps = hash:/var/lib/private/postfix/relayhosts-maps - smtp_sasl_password_maps = hash:/var/lib/private/postfix/sasl-password - smtp_sasl_auth_enable = yes - smtp_sasl_security_options = noanonymous - smtp_sasl_mechanism_filter = login, plain - smtp_use_tls = yes - smtp_tls_security_level = encrypt - smtp_tls_note_starttls_offer = yes - "#)))) + (list) %base-services)) (bootloader (bootloader-configuration diff --git a/tests/tests.scm b/tests/tests.scm new file mode 100644 index 0000000..852a186 --- /dev/null +++ b/tests/tests.scm @@ -0,0 +1,71 @@ +(use-modules + ((im papo packages) #:prefix pkgs:) + ((org euandre packages) #:prefix packages:) + (gnu) + (gnu tests) + (gnu system vm) + (guix gexp) + (guix profiles)) +(use-package-modules + tls) +(use-service-modules + certbot + mail + mcron + networking) + + + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Helpers functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (test-for name description test-name os test-fn) + (system-test + (name name) + (description description) + (value + (gexp->derivation + (string-append test-name ".test") + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules + ((gnu build marionette) #:prefix mrntt:) + ((srfi srfi-64) #:prefix t:)) + (let ((manette (mrntt:make-marionette + (list + #$(virtual-machine + (operating-system + (marionette-operating-system + os + #:imported-modules + '((gnu services herd))))))))) + (t:test-runner-current (mrntt:system-test-runner #$output)) + (t:test-begin #$name) + (#$test-fn manette) + (t:test-end)))))))) + + + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Service tests ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + + +(define tests + (list)) + +(define (system-test->manifest-entry test) + (manifest-entry + (name + (pkgs:str "test." + (system-test-name test))) + (version "0") + (item test))) + +(manifest + (map system-test->manifest-entry + tests)) diff --git a/tests/unit.scm b/tests/unit.scm new file mode 100644 index 0000000..b363d36 --- /dev/null +++ b/tests/unit.scm @@ -0,0 +1,18 @@ +(use-modules + ((org euandre packages) #:prefix packages:) + ((srfi srfi-64) #:prefix t:)) + + + +(define test-fns + (list)) + +(define (main) + (t:test-begin "unit") + (for-each (lambda (fn) (fn)) test-fns) + (let ((n-fail (t:test-runner-fail-count (t:test-runner-get)))) + (t:test-end) + (when (not (= 0 n-fail)) + (exit 1)))) + +(main) diff --git a/tests/vm-check.sh b/tests/vm-check.sh deleted file mode 100755 index 695e4d7..0000000 --- a/tests/vm-check.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - vm-check.sh [-x] -t TYPE -H HOST -r REMOTE [-- ARGS] - vm-check.sh -h - EOF -} - -help() { - cat <<-'EOF' - - - Options: - -x shutdown the VM before running checks - -t TYPE the type of VM being tested - -H HOST the name of the host to SSH into - -r REMOTE the base address of the remote package-repository - -h, --help show this message - - - - Run end-to-end tests of the package repository. - EOF -} - - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -SHUTDOWN=false -while getopts 'xt:H:r:h' flag; do - case "$flag" in - x) - SHUTDOWN=true - ;; - t) - TYPE="$OPTARG" - ;; - H) - HOST="$OPTARG" - ;; - r) - REMOTE="$OPTARG" - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -eval "$(assert-arg -- "${TYPE:-}" '-t TYPE')" -eval "$(assert-arg -- "${HOST:-}" '-H HOST')" -eval "$(assert-arg -- "${REMOTE:-}" '-r REMOTE')" - - -SEP="$(color -c blacki ':')" - -pre() { - # Same as: - # sed -u "s|^|[$CMD]: |" - # but the "-u" option is not POSIX - IFS='' - while read -r line; do - printf '%s%s\n' "$1" "$line" - done -} - -pre_guest() { - pre "$(color -c green "$HOST")$SEP$(color -c yellow "$TYPE")$SEP " -} - -pre_host() { - pre "$(color -c blueb "$0")$SEP " -} - -STATUS_F="$(mkstemp)" -shutdown() { - STATUS="$(cat "$STATUS_F" || echo 1)" - rm -f "$STATUS_F" - if [ "$SHUTDOWN" = true ]; then - vm down "$HOST" 2>&1 | pre_host - fi - exit "$STATUS" -} -trap shutdown EXIT - -{ - - { - if [ "$SHUTDOWN" = true ]; then - vm down "$HOST" - fi - vm up "$HOST" - untill -m5 -n5 ssh "$HOST" uptime - scp tests/checks/"$TYPE".sh "$HOST":check.sh - } 2>&1 | pre_host - - { - STATUS=0 - # shellcheck disable=2029 - ssh "$HOST" sh check.sh "$@" "$REMOTE" || STATUS=$? - printf '%s' "$STATUS" > "$STATUS_F" - } 2>&1 | pre_guest - -} | ts -s '%.s' |
