;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019 Pierre Neidhardt ;;; ;;; 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-lzlib) #:use-module (guix lzlib) #:use-module (guix tests) #:use-module (srfi srfi-64) #:use-module (rnrs bytevectors) #:use-module (rnrs io ports) #:use-module (ice-9 match)) ;; Test the (guix lzlib) module. (define-syntax-rule (test-assert* description exp) (begin (unless (lzlib-available?) (test-skip 1)) (test-assert description exp))) (test-begin "lzlib") (define (compress-and-decompress data) "DATA must be a bytevector." (pk "Uncompressed bytes:" (bytevector-length data)) (match (pipe) ((parent . child) (match (primitive-fork) (0 ;compress (dynamic-wind (const #t) (lambda () (close-port parent) (call-with-lzip-output-port child (lambda (port) (put-bytevector port data)))) (lambda () (primitive-exit 0)))) (pid ;decompress (begin (close-port child) (let ((received (call-with-lzip-input-port parent (lambda (port) (get-bytevector-all port))))) (match (waitpid pid) ((_ . status) (pk "Status" status) (pk "Length data" (bytevector-length data) "received" (bytevector-length received)) ;; The following loop is a debug helper. (let loop ((i 0)) (if (and (< i (bytevector-length received)) (= (bytevector-u8-ref received i) (bytevector-u8-ref data i))) (loop (+ 1 i)) (pk "First diff at index" i))) (and (zero? status) (port-closed? parent) (bytevector=? received data))))))))))) (test-assert* "null bytevector" (compress-and-decompress (make-bytevector (+ (random 100000) (* 20 1024))))) (test-assert* "random bytevector" (compress-and-decompress (random-bytevector (+ (random 100000) (* 20 1024))))) (test-assert* "small bytevector" (compress-and-decompress (random-bytevector 127))) (test-assert* "1 bytevector" (compress-and-decompress (random-bytevector 1))) (test-assert* "Bytevector of size relative to Lzip internal buffers (2 * dictionary)" (compress-and-decompress (random-bytevector (* 2 (dictionary-size+match-length-limit %default-compression-level))))) (test-assert* "Bytevector of size relative to Lzip internal buffers (64KiB)" (compress-and-decompress (random-bytevector (* 64 1024)))) (test-assert* "Bytevector of size relative to Lzip internal buffers (64KiB-1)" (compress-and-decompress (random-bytevector (1- (* 64 1024))))) (test-assert* "Bytevector of size relative to Lzip internal buffers (64KiB+1)" (compress-and-decompress (random-bytevector (1+ (* 64 1024))))) (test-assert* "Bytevector of size relative to Lzip internal buffers (1MiB)" (compress-and-decompress (random-bytevector (* 1024 1024)))) (test-assert* "Bytevector of size relative to Lzip internal buffers (1MiB-1)" (compress-and-decompress (random-bytevector (1- (* 1024 1024))))) (test-assert* "Bytevector of size relative to Lzip internal buffers (1MiB+1)" (compress-and-decompress (random-bytevector (1+ (* 1024 1024))))) (test-assert* "make-lzip-input-port/compressed" (let* ((len (pk 'len (+ 10 (random 4000 %seed)))) (data (random-bytevector len)) (compressed (make-lzip-input-port/compressed (open-bytevector-input-port data))) (result (call-with-lzip-input-port compressed get-bytevector-all))) (pk (bytevector-length result) (bytevector-length data)) (bytevector=? result data))) (test-end) d a test to verify guix-home-service-type is able to activate a home environment Change-Id: Ifbcc0878d934aa4abe34bb2123b5081fb432aa8e Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-09-15services: guix: Add bffe-service-type.Christopher Baines This is intended to replace the functionality of the Guix Build Coordinator queue builds script, and also provide a web interface for build farms. * gnu/services/guix.scm (<bffe-configuration>): New record type. (bffe-configuration, bffe-configuration?, bffe-configuration-package, bffe-configuration-user, bffe-configuration-group, bffe-configuration-arguments bffe-configuration-extra-environment-variables): New procedures. (bffe-service-type): New variable. * gnu/tests/guix.scm (%test-bffe): New variable. * doc/guix.texi (Guix Services): Document the new service.