From 2af8f2382a54a6966599e2b5d51abdfbc3822b83 Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Sun, 7 May 2023 22:02:10 +0100 Subject: [PATCH] test min-copy-closure --- tests/ci.nix | 1 + tests/min-copy-closure/configuration.nix | 47 ++++++++++++++++++ tests/min-copy-closure/id | 38 +++++++++++++++ tests/min-copy-closure/id.pub | 1 + tests/min-copy-closure/test.nix | 48 +++++++++++++++++++ .../min-copy-closure/wait-until-ready.expect | 5 ++ 6 files changed, 140 insertions(+) create mode 100644 tests/min-copy-closure/configuration.nix create mode 100644 tests/min-copy-closure/id create mode 100644 tests/min-copy-closure/id.pub create mode 100644 tests/min-copy-closure/test.nix create mode 100644 tests/min-copy-closure/wait-until-ready.expect diff --git a/tests/ci.nix b/tests/ci.nix index f170945..2f785d2 100644 --- a/tests/ci.nix +++ b/tests/ci.nix @@ -4,4 +4,5 @@ wlan = import ./wlan/test.nix; pppoe = import ./pppoe/test.nix; jffs2 = import ./jffs2/test.nix; + min-copy-closure = import ./min-copy-closure/test.nix; } diff --git a/tests/min-copy-closure/configuration.nix b/tests/min-copy-closure/configuration.nix new file mode 100644 index 0000000..b637e74 --- /dev/null +++ b/tests/min-copy-closure/configuration.nix @@ -0,0 +1,47 @@ +{ config, pkgs, lib, ... } : +let + inherit (pkgs) dropbear; + inherit (pkgs.pseudofile) dir symlink; + inherit (pkgs.liminix.services) oneshot longrun bundle target; + inherit + (pkgs.liminix.networking) + address + udhcpc + interface + route + ; +in { + imports = [ + ../../vanilla-configuration.nix + ../../modules/squashfs.nix + ../../modules/jffs2.nix + ]; + config = { + services.sshd = longrun { + name = "sshd"; + run = '' + mkdir -p /run/dropbear + ${dropbear}/bin/dropbear -E -P /run/dropbear.pid -R -F + ''; + }; + + users.root = { + passwd = lib.mkForce "$6$GYDbeLSyoIdgDdZW$EXlz4oI7Jz1igSYd4cxwcWR4lqEc5AWdGWuPuBarQeUskFQsBCpPc0GgIPPDl1k7SgrnC82JzSWxvx5o0bvmx/"; + openssh.authorizedKeys.keys = [ + (builtins.readFile ./id.pub) + ]; + }; + + # services.dhcpc = + # let iface = config.hardware.networkInterfaces.lan; + # in (udhcpc iface { + # dependencies = [ config.services.hostname ]; + # }) // { inherit (iface) device; }; + + rootfsType = "jffs2"; + services.default = lib.mkForce (target { + name = "default"; + contents = with config.services; [ loopback ntp defaultroute4 sshd dhcpv4 ]; + }); + }; +} diff --git a/tests/min-copy-closure/id b/tests/min-copy-closure/id new file mode 100644 index 0000000..0d71b4b --- /dev/null +++ b/tests/min-copy-closure/id @@ -0,0 +1,38 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +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 +-----END OPENSSH PRIVATE KEY----- diff --git a/tests/min-copy-closure/id.pub b/tests/min-copy-closure/id.pub new file mode 100644 index 0000000..54bc3ce --- /dev/null +++ b/tests/min-copy-closure/id.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDMKs3OTFxmWbvd/W7WjxdsSVSME13774eKSTa3aSwN+bMnS1EGXGGFxzCjusbL/O9i9ISC9YBGlvC8oD6Y49HGTa8nlJmwWuDKDaotamMRNidPo3hYHaqXJ5cG6FoQohlGtc4D+thvLXO4C6How+3WDhthpx9fmxgVSCrVhHKu1KZ9IyE0ewgdgR6ZU+uPXehEFghIhj0LTfXDJCMazNhj4HqCLc/LirPDeS5+32QY4eq6aXQ4yY29aI+fJ9bVmsh697kVS28CsJWOxSo3qyXcb4mLJ4M2RPbsrY5/SDWzEK8l94cyYHpc+DQkSrnuaAGer0Jceyidn6r2V/KDCDi/zuufgRfDNbYa8RopVl98YaTrLpkXlwbxbwQvVk6D11/i+2NzF08KYe55Tfkvfhhl/nyJso0rrDbcnYxgPWRe2Pcyt4yeQ6xYG3bruoh7/h+9sgPG0N9d2IBBIYNLX+j5u0CMbDvTwK1YwootubAYwqrWT0EVyvufOZkIcy4guic= dan@loaclhost diff --git a/tests/min-copy-closure/test.nix b/tests/min-copy-closure/test.nix new file mode 100644 index 0000000..48bb726 --- /dev/null +++ b/tests/min-copy-closure/test.nix @@ -0,0 +1,48 @@ +{ + liminix +, nixpkgs +}: +let lmx = (import liminix { + device = import "${liminix}/devices/qemu/"; + liminix-config = ./configuration.nix; + }); + rogue = lmx.pkgs.rogue; + img = lmx.outputs.vmroot; + pkgs = import { overlays = [(import ../../overlay.nix)]; }; + inherit (pkgs.pkgsBuildBuild) mips-vm; +in pkgs.runCommand "check" { + nativeBuildInputs = with pkgs; [ + expect + mips-vm + socat + min-copy-closure + rogue + ] ; +} '' +killpid(){ + if test -e $1 && test -d /proc/`cat $1` ; then + pid=$(cat $1) + kill $pid + fi +} + +cleanup(){ + killpid ./vm/pid +} + +trap cleanup EXIT +fatal(){ + err=$? + echo "FAIL: command $(eval echo $BASH_COMMAND) exited with code $err" + exit $err +} +trap fatal ERR + +mkdir vm +LAN=user,hostfwd=tcp::2022-:22 mips-vm --background ./vm ${img}/vmlinux ${img}/rootfs +expect ${./wait-until-ready.expect} +export SSH_COMMAND="ssh -o StrictHostKeyChecking=no -p 2022 -i ${./id}" +$SSH_COMMAND root@localhost echo ready +IN_NIX_BUILD=true min-copy-closure root@localhost ${rogue} +$SSH_COMMAND root@localhost ls -l ${rogue} >$out +'' diff --git a/tests/min-copy-closure/wait-until-ready.expect b/tests/min-copy-closure/wait-until-ready.expect new file mode 100644 index 0000000..185574d --- /dev/null +++ b/tests/min-copy-closure/wait-until-ready.expect @@ -0,0 +1,5 @@ +set timeout 60 + +spawn socat unix-connect:vm/console - +send "\r\n" +expect "login:" \ No newline at end of file