;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2022 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (test-cpio) #:use-module (guix cpio) #:use-module (guix tests) #:use-module ((guix build utils) #:select (which)) #:use-module ((guix utils) #:select (call-with-temporary-output-file)) #:use-module (ice-9 match) #:use-module (ice-9 popen) #:use-module (rnrs io ports) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-64)) (define %cpio-program (which "cpio")) (define %test-file (search-path %load-path "guix.scm")) (test-begin "cpio") ;; The cpio format expects 'ino' to fit in 32 bits. If we have a bigger inode ;; number, skip this test. (test-skip (if (>= (stat:ino (lstat %test-file)) (expt 2 32)) 1 0)) (test-assert "file->cpio-header + write-cpio-header + read-cpio-header" (let* ((header (file->cpio-header %test-file))) (call-with-values (lambda () (open-bytevector-output-port)) (lambda (port get-bv) (write-cpio-header header port) (let ((port (open-bytevector-input-port (get-bv)))) (equal? header (read-cpio-header port))))))) (unless %cpio-program (test-skip 1)) (test-assert "bit-identical to GNU cpio's output" (call-with-temporary-output-file (lambda (link _) (delete-file link) (symlink "chbouib" link) (let ((files (cons* "/" (canonicalize-path (dirname (search-path %load-path "guix.scm"))) link (map (compose canonicalize-path (cut search-path %load-path <>)) '("guix.scm" "guix/build/syscalls.scm" "guix/packages.scm"))))) (call-with-temporary-output-file (lambda (ref-file _) (let ((pipe (open-pipe* OPEN_WRITE %cpio-program "-o" "-O" ref-file "-H" "newc" "--null"))) (for-each (lambda (file) (format pipe "~a\0" file)) files) (and (zero? (close-pipe pipe)) (call-with-temporary-output-file (lambda (file port) (write-cpio-archive files port) (close-port port) (or (file=? ref-file file) (throw 'cpio-archives-differ files ref-file file (stat:size (stat ref-file)) (stat:size (stat file)))))))))))))) (test-end "cpio") Add it. * nix/nix-daemon/nix-daemon.cc (performOp): In 'wopSetOptions', add condition to handle "user-name" property and honor it. (processConnection): Add 'userId' parameter. Call 'store->createUser' when userId is not -1. * guix/profiles.scm (ensure-profile-directory): Note that this is now handled by the daemon. * guix/store.scm (current-user-name): New procedure. (set-build-options): Add #:user-name parameter and pass it to the daemon. * tests/guix-daemon.sh: Test the creation of 'profiles/per-user' when listening on a TCP socket. * tests/store.scm ("profiles/per-user exists and is not writable") ("profiles/per-user/$USER exists"): New tests. Ludovic Courtès 2019-06-27Merge branch 'master' into core-updatesLudovic Courtès 2019-06-27tests: Avoid TCP port collision between lint.scm and guix-daemon.sh....This could lead to random deadlocks in one of these two tests when running "make check -j5". * tests/guix-daemon.sh (tcp_socket): Change port to 9998 to avoid collision with tests/lint.scm. Ludovic Courtès 2019-06-14packages: Remove 'search-bootstrap-binary'....* gnu/packages.scm (%bootstrap-binaries-path, search-bootstrap-binary): Remove. * gnu/packages/bootstrap.scm (bootstrap-executable): Export. * guix/tests.scm (bootstrap-binary-file, search-bootstrap-binary): Export. * tests/derivations.scm: Remove (gnu packages) import. * tests/grafts.scm: Likewise. * tests/guix-daemon.sh: Likewise. Ludovic Courtès 2019-02-04daemon: Rename 'NIX_STATE_DIR' and 'NIX_DB_DIR' environment variables....Fixes <https://bugs.gnu.org/22459>. Reported by Jeff Mickey <j@codemac.net>. * guix/config.scm.in (%state-directory): Change NIX_STATE_DIR to GUIX_STATE_DIRECTORY. (%store-database-directory): Change NIX_DB_DIR to GUIX_DATABASE_DIRECTORY. * nix/libstore/globals.cc (Settings::processEnvironment): Likewise. * guix/self.scm (make-config.scm): Likewise. * build-aux/build-self.scm (make-config.scm): Likewise. * build-aux/test-env.in: Likewise. * tests/derivations.scm ("derivation #:leaked-env-vars"): Likewise. * tests/guix-build.sh (GUIX_DAEMON_SOCKET): Likewise. * tests/guix-daemon.sh (socket): Likewise. Ludovic Courtès 2019-01-21store: Rename '&nix-error' to '&store-error'....* guix/store.scm (&nix-error): Rename to... (&store-error): ... this, and adjust users. (&nix-connection-error): Rename to... (&store-connection-error): ... this, and adjust users. (&nix-protocol-error): Rename to... (&store-protocol-error): ... this, adjust users. (&nix-error, &nix-connection-error, &nix-protocol-error): Define these condition types and their getters as deprecrated aliases. * build-aux/run-system-tests.scm, guix/derivations.scm, guix/grafts.scm, guix/scripts/challenge.scm, guix/scripts/graph.scm, guix/scripts/lint.scm, guix/scripts/offload.scm, guix/serialization.scm, guix/ssh.scm, guix/tests.scm, guix/ui.scm, tests/derivations.scm, tests/gexp.scm, tests/guix-daemon.sh, tests/packages.scm, tests/store.scm, doc/guix.texi: Adjust to use the new names. Ludovic Courtès