lol

virtualbox: Add tests for the VirtualBox Extension Pack.

+34 -5
+34 -5
nixos/tests/virtualbox.nix
··· 293 293 "--hostonlyadapter2 vboxnet0" 294 294 ]; 295 295 296 + # The VirtualBox Oracle Extension Pack lets you use USB 3.0 (xHCI). 297 + enableExtensionPackVMFlags = [ 298 + "--usbxhci on" 299 + ]; 300 + 296 301 dhcpScript = pkgs: '' 297 302 ${pkgs.dhcp}/bin/dhclient \ 298 303 -lf /run/dhcp.leases \ ··· 323 328 headless.services.xserver.enable = false; 324 329 }; 325 330 326 - mkVBoxTest = name: testScript: makeTest { 331 + vboxVMsWithExtpack = mapAttrs createVM { 332 + testExtensionPack.vmFlags = enableExtensionPackVMFlags; 333 + }; 334 + 335 + mkVBoxTest = useExtensionPack: vms: name: testScript: makeTest { 327 336 name = "virtualbox-${name}"; 328 337 329 338 machine = { lib, config, ... }: { 330 339 imports = let 331 340 mkVMConf = name: val: val.machine // { key = "${name}-config"; }; 332 - vmConfigs = mapAttrsToList mkVMConf vboxVMs; 341 + vmConfigs = mapAttrsToList mkVMConf vms; 333 342 in [ ./common/user-account.nix ./common/x11.nix ] ++ vmConfigs; 334 343 virtualisation.memorySize = 2048; 335 344 virtualisation.virtualbox.host.enable = true; ··· 337 346 users.users.alice.extraGroups = let 338 347 inherit (config.virtualisation.virtualbox.host) enableHardening; 339 348 in lib.mkIf enableHardening (lib.singleton "vboxusers"); 349 + virtualisation.virtualbox.host.enableExtensionPack = useExtensionPack; 350 + nixpkgs.config.allowUnfree = useExtensionPack; 340 351 }; 341 352 342 353 testScript = '' ··· 353 364 return join("\n", grep { $_ !~ /^UUID:/ } split(/\n/, $_[0]))."\n"; 354 365 } 355 366 356 - ${concatStrings (mapAttrsToList (_: getAttr "testSubs") vboxVMs)} 367 + ${concatStrings (mapAttrsToList (_: getAttr "testSubs") vms)} 357 368 358 369 $machine->waitForX; 359 370 ··· 363 374 ''; 364 375 365 376 meta = with pkgs.stdenv.lib.maintainers; { 366 - maintainers = [ aszlig wkennington ]; 377 + maintainers = [ aszlig wkennington cdepillabout ]; 367 378 }; 368 379 }; 369 380 370 - in mapAttrs mkVBoxTest { 381 + in mapAttrs (mkVBoxTest false vboxVMs) { 371 382 simple-gui = '' 372 383 createVM_simple; 373 384 $machine->succeed(ru "VirtualBox &"); ··· 472 483 473 484 destroyVM_test1; 474 485 destroyVM_test2; 486 + ''; 487 + } // mapAttrs (mkVBoxTest true vboxVMsWithExtpack) { 488 + enable-extension-pack = '' 489 + createVM_testExtensionPack; 490 + vbm("startvm testExtensionPack"); 491 + waitForStartup_testExtensionPack; 492 + $machine->screenshot("cli_started"); 493 + waitForVMBoot_testExtensionPack; 494 + $machine->screenshot("cli_booted"); 495 + 496 + $machine->nest("Checking for privilege escalation", sub { 497 + $machine->fail("test -e '/root/VirtualBox VMs'"); 498 + $machine->fail("test -e '/root/.config/VirtualBox'"); 499 + $machine->succeed("test -e '/home/alice/VirtualBox VMs'"); 500 + }); 501 + 502 + shutdownVM_testExtensionPack; 503 + destroyVM_testExtensionPack; 475 504 ''; 476 505 }