;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Julien Lepiller ;;; ;;; 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-opam) #:use-module (guix import opam) #:use-module (guix base32) #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module ((guix build utils) #:select (delete-file-recursively mkdir-p which)) #:use-module (srfi srfi-64) #:use-module (web uri) #:use-module (ice-9 match)) (define test-url-file "http: \"https://example.org/foo-1.0.0.tar.gz\" checksum: \"ac8920f39a8100b94820659bc2c20817\"") (define test-source-hash "") (define test-urls "repo ac8920f39a8100b94820659bc2c20817 0o644 packages/foo/foo.1.0.0/url ac8920f39a8100b94820659bc2c20817 0o644 packages/foo/foo.1.0.0/opam ac8920f39a8100b94820659bc2c20817 0o644 packages/foo/foo.1.0.0/descr ac8920f39a8100b94820659bc2c20817 0o644") (define test-opam-file "opam-version: 1.2 maintainer: \"Alice Doe\" authors: \"Alice Doe, John Doe\" homepage: \"https://example.org/\" bug-reports: \"https://example.org/bugs\" license: \"MIT\" dev-repo: \"https://example.org/git\" build: [ \"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" ] build-test: [ \"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" \"--tests\" \"true\" ] depends: [ \"alcotest\" {test & >= \"0.7.2\"} \"ocamlbuild\" {build & >= \"0.9.2\"} ]") (test-begin "opam") (test-assert "opam->guix-package" ;; Replace network resources with sample data. (mock ((guix import utils) url-fetch (lambda (url file-name) (match url ("https://example.org/foo-1.0.0.tar.gz" (begin (mkdir-p "foo-1.0.0") (system* "tar" "czvf" file-name "foo-1.0.0/") (delete-file-recursively "foo-1.0.0") (set! test-source-hash (call-with-input-file file-name port-sha256)))) (_ (error "Unexpected URL: " url))))) (mock ((guix http-client) http-fetch/cached (lambda (url . rest) (match (uri->string url) ("https://opam.ocaml.org/urls.txt" (values (open-input-string test-urls) (string-length test-urls))) (_ (error "Unexpected URL: " url))))) (mock ((guix http-client) http-fetch (lambda (url . rest) (match url ("https://opam.ocaml.org/packages/foo/foo.1.0.0/url" (values (open-input-string test-url-file) (string-length test-url-file))) ("https://opam.ocaml.org/packages/foo/foo.1.0.0/opam" (values (open-input-string test-opam-file) (string-length test-opam-file))) (_ (error "Unexpected URL: " url))))) (match (opam->guix-package "foo") (('package ('name "ocaml-foo") ('version "1.0.0") ('source ('origin ('method 'url-fetch) ('uri "https://example.org/foo-1.0.0.tar.gz") ('sha256 ('base32 (? string? hash))))) ('build-system 'ocaml-build-system) ('inputs ('quasiquote (("ocamlbuild" ('unquote 'ocamlbuild)) ("ocaml-alcotest" ('unquote 'ocaml-alcotest))))) ('home-page "https://example.org/") ('synopsis "") ('description "") ('license 'license:expat)) (string=? (bytevector->nix-base32-string test-source-hash) hash)) (x (pk 'fail x #f))))))) (test-end "opam") 'guix perform-download' directly....Ludovic Courtès 2019-09-08daemon: Run 'guix authenticate' directly....Ludovic Courtès 2019-09-08daemon: Invoke 'guix gc --list-busy' instead of 'list-runtime-roots'....Ludovic Courtès 2019-05-01build: Change default substitute server to "ci.guix.gnu.org"....Ludovic Courtès an title='2022-01-09 11:35:59 +0100'>2022-01-09nls: Update translations....Julien Lepiller 2021-12-04nls: Update translations.Julien Lepiller 2021-11-06nls: Update translations....Julien Lepiller 2021-10-17nls: Update translations.Julien Lepiller 2021-09-02nls: Update translations....Julien Lepiller 2021-08-04nls: Update translations....Julien Lepiller