test: Add signature test

This commit is contained in:
sinavir 2024-07-17 18:36:20 +02:00
parent ba0ec05e2b
commit 7dac2d81b0
4 changed files with 77 additions and 0 deletions

1
tests/cache-keys/privkey Normal file
View file

@ -0,0 +1 @@
do.not.use-1:+Vtfnroj2hvBFPf5Vf6EXNn1kY9kJmgmrkOG23Qi451PUUA6e0PhhwoUpMybaMjNn2BhED781Jf9+NjPgUs1Lw==

1
tests/cache-keys/pubkey Normal file
View file

@ -0,0 +1 @@
do.not.use-1:T1FAOntD4YcKFKTMm2jIzZ9gYRA+/NSX/fjYz4FLNS8=

View file

@ -5,4 +5,5 @@ let
in in
{ {
basic = pkgs.callPackage ./basic.nix { }; basic = pkgs.callPackage ./basic.nix { };
signature = pkgs.callPackage ./signature.nix { };
} }

74
tests/signature.nix Normal file
View file

@ -0,0 +1,74 @@
{ pkgs }:
let
#hello = pkgs.hello.overrideAttrs { pname = "custom-hello"; };
inherit (pkgs) hello;
in
pkgs.testers.runNixOSTest (_: {
name = "cache signature upload test";
nodes = {
cache =
{ config, ... }:
{
imports = [
./common
../modules
];
system.extraDependencies = [ hello ];
services.tvix-binary-cache = {
enable = true;
caches = {
cache.port = 8000;
};
};
services.nginx = {
enable = true;
recommendedProxySettings = true;
virtualHosts.cache = {
default = true;
locations = {
"/cache".return = "302 /cache/";
"/cache/" = {
proxyPass = "http://localhost:${toString config.services.tvix-binary-cache.caches.cache.port}/";
};
};
extraConfig = "client_max_body_size 1G;";
};
};
networking.firewall.allowedTCPPorts = [ 80 ];
};
client =
{ lib, ... }:
{
imports = [ ./common ];
nix.settings = {
substituters = lib.mkForce [ "http://cache/cache" ];
trusted-public-keys = lib.mkForce [ (builtins.readFile ./cache-keys/pubkey) ];
};
};
};
testScript = ''
import sys
import time
start_all()
cache.wait_for_unit("nginx.service")
cache.wait_for_unit("nar-bridge-cache.service")
time.sleep(1)
with subtest("Nar bridge home"):
out = cache.succeed("curl -L http://127.0.0.1/cache")
if out != "nar-bridge":
sys.exit(1)
with subtest("Path signature and copy"):
# Sign
cache.succeed("nix store sign -k ${./cache-keys/privkey} ${hello}")
cache.succeed("nix copy --to 'http://127.0.0.1/cache/?compression=none' ${hello}")
with subtest("Substitution"):
client.succeed("nix-store --delete ${hello}")
client.fail("stat ${hello}")
client.succeed("nix-store -r ${hello}")
client.succeed("stat ${hello}")
'';
})