diff options
author | Silvan Mosberger <silvan.mosberger@tweag.io> | 2023-04-05 16:44:58 +0200 |
---|---|---|
committer | github-actions[bot] <github-actions[bot]@users.noreply.github.com> | 2023-05-23 07:32:39 +0000 |
commit | 157663393d35298dfdd7605a5b637233b9ddd03d (patch) | |
tree | a5d967c6d11953a4c11af51dae18162b3248e330 /lib | |
parent | 0518ad2c6ba25fd4ae362ea3f31ac6433ac90d90 (diff) |
lib.filesystem.pathType and co.: Add tests
Co-Authored-By: Robert Hensing <robert@roberthensing.nl> (cherry picked from commit a1dedc908d1d9f7e2b9490dc7b3b3020e8fe7d0b)
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/tests/filesystem.sh | 88 | ||||
-rw-r--r-- | lib/tests/release.nix | 3 |
2 files changed, 91 insertions, 0 deletions
diff --git a/lib/tests/filesystem.sh b/lib/tests/filesystem.sh new file mode 100755 index 0000000000000..ab1504abb4907 --- /dev/null +++ b/lib/tests/filesystem.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash + +# Tests lib/filesystem.nix +# Run: +# [nixpkgs]$ lib/tests/filesystem.sh +# or: +# [nixpkgs]$ nix-build lib/tests/release.nix + +set -euo pipefail +shopt -s inherit_errexit + +# Use +# || die +die() { + echo >&2 "test case failed: " "$@" + exit 1 +} + +if test -n "${TEST_LIB:-}"; then + NIX_PATH=nixpkgs="$(dirname "$TEST_LIB")" +else + NIX_PATH=nixpkgs="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.."; pwd)" +fi +export NIX_PATH + +work="$(mktemp -d)" +clean_up() { + rm -rf "$work" +} +trap clean_up EXIT +cd "$work" + +mkdir directory +touch regular +ln -s target symlink +mkfifo fifo + +checkPathType() { + local path=$1 + local expectedPathType=$2 + local actualPathType=$(nix-instantiate --eval --strict --json 2>&1 \ + -E '{ path }: let lib = import <nixpkgs/lib>; in lib.filesystem.pathType path' \ + --argstr path "$path") + if [[ "$actualPathType" != "$expectedPathType" ]]; then + die "lib.filesystem.pathType \"$path\" == $actualPathType, but $expectedPathType was expected" + fi +} + +checkPathType "$PWD/directory" '"directory"' +checkPathType "$PWD/regular" '"regular"' +checkPathType "$PWD/symlink" '"symlink"' +checkPathType "$PWD/fifo" '"unknown"' + +checkPathIsDirectory() { + local path=$1 + local expectedIsDirectory=$2 + local actualIsDirectory=$(nix-instantiate --eval --strict --json 2>&1 \ + -E '{ path }: let lib = import <nixpkgs/lib>; in lib.filesystem.pathIsDirectory path' \ + --argstr path "$path") + if [[ "$actualIsDirectory" != "$expectedIsDirectory" ]]; then + die "lib.filesystem.pathIsDirectory \"$path\" == $actualIsDirectory, but $expectedIsDirectory was expected" + fi +} + +checkPathIsDirectory "$PWD/directory" "true" +checkPathIsDirectory "$PWD/regular" "false" +checkPathIsDirectory "$PWD/symlink" "false" +checkPathIsDirectory "$PWD/fifo" "false" +checkPathIsDirectory "$PWD/non-existent" "false" + +checkPathIsRegularFile() { + local path=$1 + local expectedIsRegularFile=$2 + local actualIsRegularFile=$(nix-instantiate --eval --strict --json 2>&1 \ + -E '{ path }: let lib = import <nixpkgs/lib>; in lib.filesystem.pathIsRegularFile path' \ + --argstr path "$path") + if [[ "$actualIsRegularFile" != "$expectedIsRegularFile" ]]; then + die "lib.filesystem.pathIsRegularFile \"$path\" == $actualIsRegularFile, but $expectedIsRegularFile was expected" + fi +} + +checkPathIsRegularFile "$PWD/directory" "false" +checkPathIsRegularFile "$PWD/regular" "true" +checkPathIsRegularFile "$PWD/symlink" "false" +checkPathIsRegularFile "$PWD/fifo" "false" +checkPathIsRegularFile "$PWD/non-existent" "false" + +echo >&2 tests ok diff --git a/lib/tests/release.nix b/lib/tests/release.nix index dbf6683d49a85..f5c6e81030caf 100644 --- a/lib/tests/release.nix +++ b/lib/tests/release.nix @@ -44,6 +44,9 @@ pkgs.runCommand "nixpkgs-lib-tests" { echo "Running lib/tests/modules.sh" bash lib/tests/modules.sh + echo "Running lib/tests/filesystem.sh" + TEST_LIB=$PWD/lib bash lib/tests/filesystem.sh + echo "Running lib/tests/sources.sh" TEST_LIB=$PWD/lib bash lib/tests/sources.sh |