lol

nixos/rkvm: add nixos test

authored by

h7x4 and committed by
ckie
2295751a f3ad4def

+156
+1
nixos/tests/all-tests.nix
··· 673 673 restartByActivationScript = handleTest ./restart-by-activation-script.nix {}; 674 674 restic = handleTest ./restic.nix {}; 675 675 retroarch = handleTest ./retroarch.nix {}; 676 + rkvm = handleTest ./rkvm {}; 676 677 robustirc-bridge = handleTest ./robustirc-bridge.nix {}; 677 678 roundcube = handleTest ./roundcube.nix {}; 678 679 rshim = handleTest ./rshim.nix {};
+18
nixos/tests/rkvm/cert.pem
··· 1 + -----BEGIN CERTIFICATE----- 2 + MIIC3jCCAcagAwIBAgIUWW1hb9xdRtxAhA42jkS89goW9LUwDQYJKoZIhvcNAQEL 3 + BQAwDzENMAsGA1UEAwwEcmt2bTAeFw0yMzA4MjIxOTI1NDlaFw0zMzA4MTkxOTI1 4 + NDlaMA8xDTALBgNVBAMMBHJrdm0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK 5 + AoIBAQCuBsh0+LDXN4b2o/PJjzuiZ9Yv9Pz1Oho9WRiXtNIuHTRdBCcht/iu3PGF 6 + ICIX+H3dqQOziGSCTAQGJD2p+1ik8d+boJbpa0oxXuHuomsMAT3mib3GpipQoBLP 7 + KaEbWEsvQbr3RMx8WOtG4dmRQFzSVVtmAXyM0pNyisd4eUCplyIl9gsRJIvsO/0M 8 + OkgOZW9XLfKiAWlZoyXEkBmPAshg3EkwQtmwxPA/NgWbAOW3zJKSChxnnGYiuIIu 9 + R/wJ8OQXHP6boQLQGUhCWBKa1uK1gEBmV3Pj6uK8RzTkQq6/47F5sPa6VfqQYdyl 10 + TCs9bSqHXZjqMBoiSp22uH6+Lh9RAgMBAAGjMjAwMA8GA1UdEQQIMAaHBAoAAAEw 11 + HQYDVR0OBBYEFEh9HEsnY3dfNKVyPWDbwfR0qHopMA0GCSqGSIb3DQEBCwUAA4IB 12 + AQB/r+K20JqegUZ/kepPxIU95YY81aUUoxvLbu4EAgh8o46Fgm75qrTZPg4TaIZa 13 + wtVejekrF+p3QVf0ErUblh/iCjTZPSzCmKHZt8cc9OwTH7bt3bx7heknzLDyIa5z 14 + szAL+6241UggQ5n5NUGn5+xZHA7TMe47xAZPaRMlCQ/tp5pWFjH6WSSQSP5t4Ag9 15 + ObhY+uudFjmWi3QIBTr3iIscbWx7tD8cjus7PzM7+kszSDRV04xb6Ox8JzW9MKIN 16 + GwgwVgs3zCuyqBmTGnR1og3aMk6VtlyZUYE78uuc+fMBxqoBZ0mykeOp0Tbzgtf7 17 + gPkYcQ6vonoQhuTXYj/NrY+b 18 + -----END CERTIFICATE-----
+104
nixos/tests/rkvm/default.nix
··· 1 + import ../make-test-python.nix ({ pkgs, ... }: 2 + let 3 + # Generated with 4 + # 5 + # nix shell .#rkvm --command "rkvm-certificate-gen --ip-addresses 10.0.0.1 cert.pem key.pem" 6 + # 7 + snakeoil-cert = ./cert.pem; 8 + snakeoil-key = ./key.pem; 9 + in 10 + { 11 + name = "rkvm"; 12 + 13 + nodes = { 14 + server = { pkgs, ... }: { 15 + imports = [ ../common/user-account.nix ]; 16 + 17 + virtualisation.vlans = [ 1 ]; 18 + 19 + networking = { 20 + useNetworkd = true; 21 + useDHCP = false; 22 + firewall.enable = false; 23 + }; 24 + 25 + systemd.network.networks."01-eth1" = { 26 + name = "eth1"; 27 + networkConfig.Address = "10.0.0.1/24"; 28 + }; 29 + 30 + services.getty.autologinUser = "alice"; 31 + 32 + services.rkvm.server = { 33 + enable = true; 34 + settings = { 35 + certificate = snakeoil-cert; 36 + key = snakeoil-key; 37 + password = "snakeoil"; 38 + switch-keys = [ "left-alt" "right-alt" ]; 39 + }; 40 + }; 41 + }; 42 + 43 + client = { pkgs, ... }: { 44 + imports = [ ../common/user-account.nix ]; 45 + 46 + virtualisation.vlans = [ 1 ]; 47 + 48 + networking = { 49 + useNetworkd = true; 50 + useDHCP = false; 51 + firewall.enable = false; 52 + }; 53 + 54 + systemd.network.networks."01-eth1" = { 55 + name = "eth1"; 56 + networkConfig.Address = "10.0.0.2/24"; 57 + }; 58 + 59 + services.getty.autologinUser = "alice"; 60 + 61 + services.rkvm.client = { 62 + enable = true; 63 + settings = { 64 + server = "10.0.0.1:5258"; 65 + certificate = snakeoil-cert; 66 + key = snakeoil-key; 67 + password = "snakeoil"; 68 + }; 69 + }; 70 + }; 71 + }; 72 + 73 + testScript = '' 74 + server.wait_for_unit("getty@tty1.service") 75 + server.wait_until_succeeds("pgrep -f 'agetty.*tty1'") 76 + server.wait_for_unit("rkvm-server") 77 + server.wait_for_open_port(5258) 78 + 79 + client.wait_for_unit("getty@tty1.service") 80 + client.wait_until_succeeds("pgrep -f 'agetty.*tty1'") 81 + client.wait_for_unit("rkvm-client") 82 + 83 + server.sleep(1) 84 + 85 + # Switch to client 86 + server.send_key("alt-alt_r", delay=0.2) 87 + server.send_chars("echo 'hello client' > /tmp/test.txt\n") 88 + 89 + # Switch to server 90 + server.send_key("alt-alt_r", delay=0.2) 91 + server.send_chars("echo 'hello server' > /tmp/test.txt\n") 92 + 93 + server.sleep(1) 94 + 95 + client.systemctl("stop rkvm-client.service") 96 + server.systemctl("stop rkvm-server.service") 97 + 98 + server_file = server.succeed("cat /tmp/test.txt") 99 + assert server_file.strip() == "hello server" 100 + 101 + client_file = client.succeed("cat /tmp/test.txt") 102 + assert client_file.strip() == "hello client" 103 + ''; 104 + })
+28
nixos/tests/rkvm/key.pem
··· 1 + -----BEGIN PRIVATE KEY----- 2 + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCuBsh0+LDXN4b2 3 + o/PJjzuiZ9Yv9Pz1Oho9WRiXtNIuHTRdBCcht/iu3PGFICIX+H3dqQOziGSCTAQG 4 + JD2p+1ik8d+boJbpa0oxXuHuomsMAT3mib3GpipQoBLPKaEbWEsvQbr3RMx8WOtG 5 + 4dmRQFzSVVtmAXyM0pNyisd4eUCplyIl9gsRJIvsO/0MOkgOZW9XLfKiAWlZoyXE 6 + kBmPAshg3EkwQtmwxPA/NgWbAOW3zJKSChxnnGYiuIIuR/wJ8OQXHP6boQLQGUhC 7 + WBKa1uK1gEBmV3Pj6uK8RzTkQq6/47F5sPa6VfqQYdylTCs9bSqHXZjqMBoiSp22 8 + uH6+Lh9RAgMBAAECggEABo2V1dBu5E51zsAiFCMdypdLZEyUNphvWC5h3oXowONz 9 + pH8ICYfXyEnkma/kk2+ALy0dSRDn6/94dVIUX7Fpx0hJCcoJyhSysK+TJWfIonqX 10 + ffYOMeFG8vicIgs+GFKs/hoPtB5LREbFkUqRj/EoWE6Y3aX3roaCwTZC8vaUk0OK 11 + 54gExcNXRwQtFmfM9BiPT76F2J641NVsddgKumrryMi605CgZ57OFfSYEena6T3t 12 + JbQ1TKB3SH1LvSQIspyp56E3bjh8bcwSh72g88YxWZI9yarOesmyU+fXnmVqcBc+ 13 + CiJDX3Te1C2GIkBiH3HZJo4P88aXrkJ7J8nub/812QKBgQDfCHjBy5uWzzbDnqZc 14 + cllIyUqMHq1iY2/btdZQbz83maZhQhH2UL4Zvoa7qgMX7Ou5jn1xpDaMeXNaajGK 15 + Fz66nmqQEUFX1i+2md2J8TeKD37yUJRdlrMiAc+RNp5wiOH9EI18g2m6h/nj3s/P 16 + MdNyxsz+wqOiJT0sZatarKiFhQKBgQDHv+lPy4OPH1MeSv5vmv3Pa41O/CeiPy+T 17 + gi6nEZayVRVog3zF9T6gNIHrZ1fdIppWPiPXv9fmC3s/IVEftLG6YC+MAfigYhiz 18 + Iceoal0iJJ8DglzOhlKgHEnxEwENCz8aJxjpvbxHHcpvgXdBSEVfHvVqDkAFTsvF 19 + JA5YTmqGXQKBgQCL6uqm2S7gq1o12p+PO4VbrjwAL3aiVLNl6Gtsxn2oSdIhDavr 20 + FLhNukMYFA4gwlcXb5au5k/6TG7bd+dgNDj8Jkm/27NcgVgpe9mJojQvfo0rQvXw 21 + yIvUd8JZ3SQEgTsU4X+Bb4eyp39TPwKrfxyh0qnj4QN6w1XfNmELX2nRaQKBgEq6 22 + a0ik9JTovSnKGKIcM/QTYow4HYO/a8cdnuJ13BDfb+DnwBg3BbTdr/UndmGOfnrh 23 + SHuAk/7GMNePWVApQ4xcS61vV1p5GJB7hLxm/my1kp+3d4z0B5lKvAbqeywsFvFr 24 + yxA3IWbhqEhLARh1Ny684EdLCXxy3Bzmvk8fFw8pAoGAGkt9pJC2wkk9fnJIHq+f 25 + h/WnEO0YrGzYnVA+RyCNKrimRd+GylGHJ/Ev6PRZvMwyGE7RCB+fHVrrEcEJAcxL 26 + SaOg5NA8cwrG+UpTQqi4gt6tCW87afVCyL6dC/E8giJlzI0LY9DnFGoVqYL0qJvm 27 + Sj4SU0fyLsW/csOLd5T+Bf8= 28 + -----END PRIVATE KEY-----
+5
pkgs/tools/misc/rkvm/default.nix
··· 5 5 , libevdev 6 6 , openssl 7 7 , makeWrapper 8 + , nixosTests 8 9 }: 9 10 10 11 rustPlatform.buildRustPackage rec { ··· 30 31 31 32 wrapProgram $out/bin/rkvm-certificate-gen --prefix PATH : ${lib.makeBinPath [ openssl ]} 32 33 ''; 34 + 35 + passthru.tests = { 36 + inherit (nixosTests) rkvm; 37 + }; 33 38 34 39 meta = with lib; { 35 40 description = "Virtual KVM switch for Linux machines";