;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Ricardo Wurmus ;;; Copyright © 2017 Mathieu Othacehe ;;; ;;; 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-cran) #:use-module (gnu packages statistics) #:use-module (guix import cran) #:use-module (guix tests) #:use-module (srfi srfi-1) #:use-module (srfi srfi-64) #:use-module (srfi srfi-26) #:use-module (ice-9 match)) (define description " Package: My-Example Type: Package Title: Example package Version: 1.2.3 Date: 2015-12-10 Author: Ricardo Wurmus Maintainer: Guix Schmeeks URL: http://gnu.org/s/my-example Description: This is a long description spanning multiple lines: and it could confuse the parser that this line is very long or perhaps the fact that there is a colon : on the lines. And: this line continues the description. biocViews: 0 SystemRequirements: Cairo (>= 0) Depends: A C++11 compiler. Version 4.6.* of g++ (as currently in Rtools) is insufficient; versions 4.8.*, 4.9.* or later will be fine. License: GPL (>= 3) Imports: Rcpp (>= 0.11.5), proto, Scales LinkingTo: Rcpp, BH NeedsCompilation: yes Repository: CRAN Date/Publication: 2015-07-14 14:15:16 ") (define description-alist (description->alist description)) (define simple-alist '(("Key" . "Value") ("SimpleList" . "R, Rcpp, something, whatever") ("BadList" . "This is not a real list, you know?") ("List" . "R (>= 2.2), BH (for no reason), GenomicRanges"))) (test-begin "cran") (test-assert "description->alist: contains all valid keys" (let ((keys '("Package" "Type" "Title" "Version" "Date" "Author" "Maintainer" "URL" "Description" "SystemRequirements" "Depends" "License" "Imports" "biocViews" "LinkingTo" "NeedsCompilation" "Repository" "Date/Publication"))) (lset= string=? keys (map car description-alist)))) (test-equal "listifyx: return empty list if key cannot be found" '() ((@@ (guix import cran) listify) simple-alist "Letters")) (test-equal "listify: split comma-separated value into elements" '("R" "Rcpp" "something" "whatever") ((@@ (guix import cran) listify) simple-alist "SimpleList")) (test-equal "listify: strip off parentheses" '("R" "BH" "GenomicRanges") ((@@ (guix import cran) listify) simple-alist "List")) (test-equal "listify: ignore values that are no lists" '() ((@@ (guix import cran) listify) simple-alist "BadList")) (test-equal "r-mininal is not a cran package" #f ((@@ (guix import cran) cran-package?) r-minimal)) (test-assert "description->package" ;; Replace network resources with sample data. (mock ((guix build download) url-fetch (lambda* (url file-name #:key (mirrors '()) verify-certificate?) (with-output-to-file file-name (lambda () (display (match url ("mirror://cran/src/contrib/My-Example_1.2.3.tar.gz" "source") (_ (error "Unexpected URL: " url)))))))) (match (description->package 'cran description-alist) (('package ('name "r-my-example") ('version "1.2.3") ('source ('origin ('method 'url-fetch) ('uri ('cran-uri "My-Example" 'version)) ('sha256 ('base32 (? string? hash))))) ('properties ('quasiquote (('upstream-name . "My-Example")))) ('build-system 'r-build-system) ('inputs ('list 'cairo)) ('propagated-inputs ('list 'r-bh 'r-proto 'r-rcpp 'r-scales)) ('home-page "http://gnu.org/s/my-example") ('synopsis "Example package") ('description "\ This is a long description spanning multiple lines: and it could confuse the parser that this line is very long or perhaps the fact that there is a colon : on the lines. And: this line continues the description.") ('license 'gpl3+)) #t) (x (begin (format #t "~s\n" x) (pk 'fail x #f)))))) (test-end "cran") type)[description]: New field. (gss-service-type)[description]: New field. (idmap-service-type)[description]: New field. * gnu/services/spice.scm (spice-vdagent-service-type)[description]: New field. * gnu/services/sysctl.scm (sysctl-service-type)[description]: New field. * gnu/services/virtualization.scm (libvirt-service-type)[description]: New field. (virtlog-service-type)[description]: New field. * gnu/services/vpn.scm (openvpn-server-service-type)[description]: New field. (openvpn-client-service-type)[description]: New field. (wireguard-service-type)[description]: New field. * gnu/services/web.scm (httpd-service-type)[description]: New field. (fcgiwrap-service-type)[description]: New field. (agate-service-type)[description]: New field. [name]: Fix. Ludovic Courtès 2022-03-17Revert "services: nfs: Define rpcbind-shepherd-service at the top level."...This reverts commit 0a9e82b43080275a2755624f3208287056dc9f95, which didn't end up fixing anything. The problem was elsewhere; namely, using 'operating-system-services' instead of 'operating-system-user-services'. Maxim Cournoyer 2022-03-17services: nfs: Define rpcbind-shepherd-service at the top level....Attempting to use the 'nfs-service-type' as part of a computed operating-system definition, the following exception would be thrown: ice-9/boot-9.scm:1685:16: In procedure raise-exception: ERROR: 1. &ambiguous-target-service-error: service: #<<service> type: #<service-type rpcbind 7f7529853780> value: #<<rpcbind-configuration> rpcbind: #<package rpcbind@1.2.6 gnu/packages/onc-rpc.scm:87 7f75389e78f0> warm-start?: #t>> target-type: #<service-type shepherd-root 7f7529396080> 2. &message: "more than one target service of type 'shepherd-root'" The problem was that the rpcbind shepherd-service object was dynamically instantiated every time the rpcbind-service-type would be called, causing multiple objects in some situations, resulting in the above condition. * gnu/services/nfs.scm (rpcbind-service-type): Refactor and adjust in a way to extract... (rpcbind-shepherd-service): ... this new procedure. Maxim Cournoyer