From 715a2dd04c48498e7e963859c51cc22ebbf6f330 Mon Sep 17 00:00:00 2001 From: mwojcik Date: Mon, 25 Apr 2022 10:28:00 +0800 Subject: [PATCH] flake: move hitl tests from nix-scripts to flake --- flake.nix | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index d669e07..f3acb71 100644 --- a/flake.nix +++ b/flake.nix @@ -247,6 +247,86 @@ } else {} ); + + gateware-sim = pkgs.stdenv.mkDerivation { + name = "gateware-sim"; + + nativeBuildInputs = [ + (pkgs.python3.withPackages(ps: (with artiqpkgs; [ migen migen-axi artiq ]))) + artiqpkgs.artiq + ]; + + phases = [ "buildPhase" ]; + + buildPhase = + '' + python -m unittest discover ${self}/src/gateware -v + touch $out + ''; + }; + + # for hitl-tests + zc706-nist_qc2 = (build { target = "zc706"; variant = "nist_qc2"; }); + zc706-hitl-tests = pkgs.stdenv.mkDerivation { + name = "zc706-hitl-tests"; + + # requires patched Nix + __networked = true; + + buildInputs = [ + pkgs.netcat pkgs.openssh pkgs.rsync artiq artiq-netboot zynqpkgs.zc706-szl + ]; + phases = [ "buildPhase" ]; + + buildPhase = + '' + export NIX_SSHOPTS="-F /dev/null -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR -i /opt/hydra_id_ed25519" + LOCKCTL=$(mktemp -d) + mkfifo $LOCKCTL/lockctl + + cat $LOCKCTL/lockctl | ${pkgs.openssh}/bin/ssh \ + $NIX_SSHOPTS \ + rpi-4 \ + 'mkdir -p /tmp/board_lock && flock /tmp/board_lock/zc706-1 -c "echo Ok; cat"' \ + | ( + # End remote flock via FIFO + atexit_unlock() { + echo > $LOCKCTL/lockctl + } + trap atexit_unlock EXIT + + # Read "Ok" line when remote successfully locked + read LOCK_OK + + echo Power cycling board... + (echo b; sleep 5; echo B; sleep 5) | nc -N -w6 192.168.1.31 3131 + echo Power cycle done. + + export USER=hydra + export OPENOCD_ZYNQ=${zynq-rs}/openocd + export SZL=${zynqpkgs.zc706-szl}/szl.elf + bash ${self}/remote_run.sh -h rpi-4 -o "$NIX_SSHOPTS" -d ${zc706-nist_qc2.zc706-nist_qc2-jtag} + + echo Waiting for the firmware to boot... + sleep 15 + + echo Running test kernel... + artiq_run --device-db ${self}/examples/device_db.py ${self}/examples/mandelbrot.py + + echo Running ARTIQ unit tests... + export ARTIQ_ROOT=${self}/examples + export ARTIQ_LOW_LATENCY=1 + python -m unittest discover artiq.test.coredevice -v + + touch $out + + echo Completed + + (echo b; sleep 5) | nc -N -w6 192.168.1.31 3131 + echo Board powered off + ) + ''; + }; in rec { packages.x86_64-linux = (build { target = "zc706"; variant = "nist_clock"; }) // (build { target = "zc706"; variant = "nist_clock_master"; }) // @@ -268,7 +348,7 @@ (build { target = "kasli_soc"; variant = "master"; json = ./kasli-soc-master.json; }) // (build { target = "kasli_soc"; variant = "satellite"; json = ./kasli-soc-satellite.json; }); - hydraJobs = packages.x86_64-linux; + hydraJobs = packages.x86_64-linux // { inherit zc706-hitl-tests; inherit gateware-sim; }; devShell.x86_64-linux = pkgs.mkShell { name = "artiq-zynq-dev-shell";