all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
blob e6fa965969513d3b9057f271f8e03cd0f35f464d 3850 bytes (raw)
name: tests/cpan.scm 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
 
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
;;;
;;; 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-cpan)
  #:use-module (guix import cpan)
  #:use-module (guix base32)
  #:use-module (gcrypt hash)
  #:use-module (guix tests http)
  #:use-module (guix grafts)
  #:use-module (srfi srfi-64)
  #:use-module (web client)
  #:use-module (ice-9 match))

;; Globally disable grafts because they can trigger early builds.
(%graft? #f)

(define (test-json)
  (string-append
   "{
  \"metadata\" : {
    \"name\" : \"Foo-Bar\",
    \"version\" : \"0.1\"
  }
  \"name\" : \"Foo-Bar-0.1\",
  \"distribution\" : \"Foo-Bar\",
  \"license\" : [
    \"perl_5\"
  ],
  \"dependency\": [
     { \"relationship\": \"requires\",
       \"phase\": \"runtime\",
       \"version\": \"1.05\",
       \"module\": \"Test::Script\"
     }
  ],
  \"abstract\" : \"Fizzle Fuzz\",
  \"download_url\" : \"" (%local-url* "/Foo-Bar-0.1.tar.gz") "\"
  \"author\" : \"Guix\",
  \"version\" : \"0.1\"
}"))

(define test-source
  "foobar")

(test-begin "cpan")

(test-assert "cpan->guix-package"
  ;; Replace network resources with sample data.
  (with-http-server `(("/release/Foo-Bar" 200 ,(test-json))
                      ("/Foo-Bar-0.1.tar.gz" 200 ,test-source)
                      ("/module/Test::Script?fields=distribution"
                       200 "{ \"distribution\" : \"Test-Script\" }"))
    (parameterize ((%metacpan-base-url (%local-url* ""))
                   (current-http-proxy #false))
      (match (cpan->guix-package "Foo::Bar")
        (('package
           ('name "perl-foo-bar")
           ('version "0.1")
           ('source ('origin
                      ('method 'url-fetch)
                      ('uri ('string-append (? string? base-uri)
                                            'version ".tar.gz"))
                      ('sha256
                       ('base32
                        (? string? hash)))))
           ('build-system 'perl-build-system)
           ('propagated-inputs
            ('quasiquote
             (("perl-test-script" ('unquote 'perl-test-script)))))
           ('home-page "https://metacpan.org/release/Foo-Bar")
           ('synopsis "Fizzle Fuzz")
           ('description 'fill-in-yourself!)
           ('license 'perl-license))
         (and (string=? base-uri (%local-url* "/Foo-Bar-"))
              (string=? (bytevector->nix-base32-string
                         (call-with-input-string test-source port-sha256))
                        hash)))
        (x
         (pk 'fail x #f))))))

(test-equal "metacpan-url->mirror-url, http"
  "mirror://cpan/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz"
  (metacpan-url->mirror-url
   "http://cpan.metacpan.org/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz"))

(test-equal "metacpan-url->mirror-url, https"
  "mirror://cpan/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz"
  (metacpan-url->mirror-url
   "https://cpan.metacpan.org/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz"))

(test-end "cpan")

debug log:

solving e6fa965969 ...
found e6fa965969 in https://yhetil.org/guix/20220120130849.292178-8-maximedevos@telenet.be/
found 89e6be0b4f in https://yhetil.org/guix/20220120130849.292178-5-maximedevos@telenet.be/
found b4db9e60e4 in https://git.savannah.gnu.org/cgit/guix.git
preparing index
index prepared:
100644 b4db9e60e46daccd3cd5c387c4cb311bf0de6712	tests/cpan.scm

applying [1/2] https://yhetil.org/guix/20220120130849.292178-5-maximedevos@telenet.be/
diff --git a/tests/cpan.scm b/tests/cpan.scm
index b4db9e60e4..89e6be0b4f 100644


applying [2/2] https://yhetil.org/guix/20220120130849.292178-8-maximedevos@telenet.be/
diff --git a/tests/cpan.scm b/tests/cpan.scm
index 89e6be0b4f..e6fa965969 100644

Checking patch tests/cpan.scm...
Applied patch tests/cpan.scm cleanly.
Checking patch tests/cpan.scm...
Applied patch tests/cpan.scm cleanly.

index at:
100644 e6fa965969513d3b9057f271f8e03cd0f35f464d	tests/cpan.scm

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.