From fca3926a62a7f6dda1b4f98acd036c61fe8211a5 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Sun, 17 Mar 2024 22:00:44 +0200 Subject: feat(tvix/boot/tests): make urls and paths configurable Fork off a long-living tvix-store daemon in the background, and have both the import, as well as the virtiofs invocation connect to that one, rather than use the underlying storage directly. This also opens up the potential to have other things seed the store (like nar-bridge). Change-Id: Ie13aedaf7ab31e5ebe78a7be42f144af3920fa9c Reviewed-on: https://cl.tvl.fyi/c/depot/+/11186 Tested-by: BuildkiteCI Autosubmit: flokli Reviewed-by: Connor Brewster --- tvix/boot/tests/default.nix | 55 ++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 16 deletions(-) (limited to 'tvix') diff --git a/tvix/boot/tests/default.nix b/tvix/boot/tests/default.nix index 4a38b3f65083..378efaccc982 100644 --- a/tvix/boot/tests/default.nix +++ b/tvix/boot/tests/default.nix @@ -1,10 +1,17 @@ -{ depot, pkgs, ... }: +{ depot, pkgs, lib, ... }: let # Seed a tvix-store with the tvix docs, then start a VM, ask it to list all # files in /nix/store, and ensure the store path is present, which acts as a # nice smoketest. - mkBootTest = blobServiceAddr: + mkBootTest = + { blobServiceAddr ? "memory://" + , directoryServiceAddr ? "memory://" + , pathInfoServiceAddr ? "memory://" + # The path to import (via tvix-store import). + , importPath ? ../../docs + , importPathName ? "docs" + }: pkgs.stdenv.mkDerivation { name = "run-vm"; nativeBuildInputs = [ @@ -14,27 +21,43 @@ let buildCommand = '' touch $out - # Configure tvix to put data in the local working directory - export BLOB_SERVICE_ADDR=${blobServiceAddr} - export DIRECTORY_SERVICE_ADDR=sled://$PWD/directories.sled - export PATH_INFO_SERVICE_ADDR=sled://$PWD/pathinfo.sled + # Start the tvix daemon, listening on a unix socket. + BLOB_SERVICE_ADDR=${blobServiceAddr} \ + DIRECTORY_SERVICE_ADDR=${directoryServiceAddr} \ + PATH_INFO_SERVICE_ADDR=${pathInfoServiceAddr} \ + tvix-store daemon -l $PWD/tvix-store.socket & - # Seed the tvix store with some data - # Create a `docs` directory with the contents from ../docs - # Make sure it still is called "docs" when calling import, so we can - # predict the store path. - cp -R ${../../docs} docs - outpath=$(tvix-store import docs) + # Wait for the socket to be created. + while [ ! -e $PWD/tvix-store.socket ]; do sleep 1; done - echo "Store contents imported to $outpath" + # Export env vars so that subsequent tvix-store commands will talk to + # our tvix-store daemon over the unix socket. + export BLOB_SERVICE_ADDR=grpc+unix://$PWD/tvix-store.socket + export DIRECTORY_SERVICE_ADDR=grpc+unix://$PWD/tvix-store.socket + export PATH_INFO_SERVICE_ADDR=grpc+unix://$PWD/tvix-store.socket + '' + lib.optionalString (importPath != null) '' + echo "Importing ${importPath} into tvix-store with name ${importPathName}…" + cp -R ${importPath} ${importPathName} + outpath=$(tvix-store import ${importPathName}) + + echo "imported to $outpath" + + # Invoke a VM using tvix as the backing store, ensure the outpath appears in its listing. CH_CMDLINE="tvix.find" run-tvix-vm 2>&1 | tee output.txt - grep ${../../docs} output.txt + grep $outpath output.txt ''; requiredSystemFeatures = [ "kvm" ]; }; in depot.nix.readTree.drvTargets { - docs-sled = (mkBootTest "sled://$PWD/blobs.sled"); - docs-objectstore-local = (mkBootTest "objectstore+file://$PWD/blobs"); + docs-memory = (mkBootTest { }); + docs-sled = (mkBootTest { + blobServiceAddr = "sled://$PWD/blobs.sled"; + directoryServiceAddr = "sled://$PWD/directories.sled"; + pathInfoServiceAddr = "sled://$PWD/pathinfo.sled"; + }); + docs-objectstore-local = (mkBootTest { + blobServiceAddr = "objectstore+file://$PWD/blobs"; + }); } -- cgit 1.4.1