6813598c17
I want to use this utility in a deploy script where the .drv is nix-copy-closure-d to a remote host and realized there. Consequently it doesn't make sense that the local deploy script depends on the derivation's outputs which drvPath does by default. This also came up when working on //nix/buildkite, although we didn't end up using it there. Change-Id: I952bbfd4d7e9de212569d5ee12182eb50d360f53 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5767 Tested-by: BuildkiteCI Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su>
110 lines
3.1 KiB
Nix
110 lines
3.1 KiB
Nix
{ depot, lib, ... }:
|
|
|
|
let
|
|
inherit (depot.nix.runTestsuite)
|
|
runTestsuite
|
|
it
|
|
assertEq
|
|
assertThrows
|
|
assertDoesNotThrow
|
|
;
|
|
|
|
inherit (depot.nix.utils)
|
|
isDirectory
|
|
isRegularFile
|
|
isSymlink
|
|
pathType
|
|
storePathName
|
|
onlyDrvPath
|
|
;
|
|
|
|
assertUtilsPred = msg: act: exp: [
|
|
(assertDoesNotThrow "${msg} does not throw" act)
|
|
(assertEq msg (builtins.tryEval act).value exp)
|
|
];
|
|
|
|
pathPredicates = it "judges paths correctly" (lib.flatten [
|
|
# isDirectory
|
|
(assertUtilsPred "directory isDirectory"
|
|
(isDirectory ./directory)
|
|
true)
|
|
(assertUtilsPred "symlink not isDirectory"
|
|
(isDirectory ./symlink-directory)
|
|
false)
|
|
(assertUtilsPred "file not isDirectory"
|
|
(isDirectory ./directory/file)
|
|
false)
|
|
# isRegularFile
|
|
(assertUtilsPred "file isRegularFile"
|
|
(isRegularFile ./directory/file)
|
|
true)
|
|
(assertUtilsPred "symlink not isRegularFile"
|
|
(isRegularFile ./symlink-file)
|
|
false)
|
|
(assertUtilsPred "directory not isRegularFile"
|
|
(isRegularFile ./directory)
|
|
false)
|
|
# isSymlink
|
|
(assertUtilsPred "symlink to file isSymlink"
|
|
(isSymlink ./symlink-file)
|
|
true)
|
|
(assertUtilsPred "symlink to directory isSymlink"
|
|
(isSymlink ./symlink-directory)
|
|
true)
|
|
(assertUtilsPred "symlink to symlink isSymlink"
|
|
(isSymlink ./symlink-symlink-file)
|
|
true)
|
|
(assertUtilsPred "symlink to missing file isSymlink"
|
|
(isSymlink ./missing)
|
|
true)
|
|
(assertUtilsPred "directory not isSymlink"
|
|
(isSymlink ./directory)
|
|
false)
|
|
(assertUtilsPred "file not isSymlink"
|
|
(isSymlink ./directory/file)
|
|
false)
|
|
# missing files throw
|
|
(assertThrows "isDirectory throws on missing file"
|
|
(isDirectory ./does-not-exist))
|
|
(assertThrows "isRegularFile throws on missing file"
|
|
(isRegularFile ./does-not-exist))
|
|
(assertThrows "isSymlink throws on missing file"
|
|
(isSymlink ./does-not-exist))
|
|
]);
|
|
|
|
cheddarStorePath =
|
|
builtins.unsafeDiscardStringContext depot.tools.cheddar.outPath;
|
|
|
|
cleanedSource = lib.cleanSource ./.;
|
|
|
|
storePathNameTests = it "correctly gets the basename of a store path" [
|
|
(assertEq "base name of a derivation"
|
|
(storePathName depot.tools.cheddar)
|
|
depot.tools.cheddar.name)
|
|
(assertEq "base name of a store path string"
|
|
(storePathName cheddarStorePath)
|
|
depot.tools.cheddar.name)
|
|
(assertEq "base name of a path within a store path"
|
|
(storePathName "${cheddarStorePath}/bin/cheddar") "cheddar")
|
|
(assertEq "base name of a path"
|
|
(storePathName ../default.nix) "default.nix")
|
|
(assertEq "base name of a cleanSourced path"
|
|
(storePathName cleanedSource)
|
|
cleanedSource.name)
|
|
];
|
|
|
|
onlyDrvPathTests = it "correctly updates the string context of drvPath" [
|
|
(assertEq "onlyDrvPath only produces path dependencies"
|
|
(builtins.all
|
|
(dep: dep.path or false)
|
|
(builtins.attrValues
|
|
(builtins.getContext (onlyDrvPath depot.tools.cheddar))))
|
|
true)
|
|
];
|
|
in
|
|
|
|
runTestsuite "nix.utils" [
|
|
pathPredicates
|
|
storePathNameTests
|
|
onlyDrvPathTests
|
|
]
|