aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2022, 2024 Ludovic Courtès <ludo@gnu.org>
;;;
;;; 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 <http://www.gnu.org/licenses/>.

(define-module (test-cpio)
  #:use-module (guix cpio)
  #:use-module (guix tests)
  #:use-module ((guix build utils)
                #:select (which 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")
/td>Christopher Baines 2021-01-09tests: Run 'tests/offload.scm' only when BUILD_DAEMON_OFFLOAD is true....Ludovic Courtès 2021-01-04graph: Install JavaScript files....Ludovic Courtès 2020-12-27maint: Remove unused '--with-nix-prefix' configure option....Ludovic Courtès 2020-12-20gnu: vim: Automatically find vim plugins....Efraim Flashner 2020-12-19gnu: linux-libre: Update to 5.10.1....Leo Famulari 2020-12-11build: 'script/guix' uses our own 'guile' executable....Ludovic Courtès 2020-12-03build-system: Add chicken-build-system....raingloom 2020-11-29Make "guile-avahi" dependency optional....Mathieu Othacehe 2020-11-29Use substitute servers on the local network....Mathieu Othacehe 2020-11-29Add Avahi support....Mathieu Othacehe 2020-11-16maint: Install 'guix-daemon.cil' SELinux file....Ludovic Courtès 2020-11-13maint: Rebuild '.version' when 'config.status' changes....Ludovic Courtès 2020-11-13maint: Add '.guix-authorizations' to the distribution....Ludovic Courtès 2020-11-13maint: Use 'guix' instead of 'guile3.0-guix' for the binary tarball....Ludovic Courtès 2020-11-12maint: update-guix-package: Optionally add sources to store....Maxim Cournoyer 2020-10-31guix build: Move transformation options to (guix transformations)....Ludovic Courtès 2020-10-27maint: Include 'guix-daemon.cil.in' in the distribution....Ludovic Courtès 2020-10-24gnu: linux-libre: Update to 5.9.1....Leo Famulari 2020-10-24build: Add GUIX_GIT_KEYRING variable for make authenticate....Miguel Ángel Arruga Vivas 2020-10-18system: Add locale to boot-parameters....Miguel Ángel Arruga Vivas 2020-10-05build: Use a 'guile' executable that doesn't warn about locales....Ludovic Courtès 2020-10-05self: Use a 'guile' that doesn't complain about locales....Ludovic Courtès 2020-10-04cuirass: Distribute hurd-manifest.scm....Jan (janneke) Nieuwenhuizen 2020-09-30scripts: system: Add support for image-type....Mathieu Othacehe 2020-09-08Remove (guix json) and require Guile-JSON 4.3.0+....Ludovic Courtès 2020-09-02Add (guix android-repo-download)....Danny Milosavljevic 2020-08-31Makefile.am: Set iso label....Julien Lepiller 2020-08-30gnu: Remove linux-libre 5.7....Leo Famulari 2020-08-25offload: Modify the build-machine record to accept multiple systems....Maxim Cournoyer 2020-08-24Use "guile-zlib" and "guile-lzlib" instead of (guix config)....Mathieu Othacehe 2020-08-21gnu: linux-libre: Update to 5.8.2....Leo Famulari 2020-08-05gnu: linux-libre: Update to 5.7.12....Leo Famulari 2020-07-27maint: 'authenticate' runs the user's 'guix git authenticate'....Ludovic Courtès 2020-07-17guix: Add maven-build-system....Julien Lepiller 2020-07-17guix: java-utils: Add Maven-related phases....Julien Lepiller 2020-07-11maint: Remove 'build-aux/git-authenticate.scm'....Ludovic Courtès 2020-07-11Add 'guix git authenticate'....Ludovic Courtès