import: elpa: Rewrite test to use an HTTP server instead of mocking.
* guix/import/elpa.scm (elpa-url): Add 'gnu/http'. (elpa->guix-package): Handle it. * tests/elpa.scm (elpa-package-info-mock, auctex-readme-mock) (elpa-version->string, package-source-url, ensure-list) (package-home-page, make-elpa-package): Remove. <top level>: Call '%http-server-port'. (eval-test-with-elpa): Remove uses of 'mock'. Use 'with-http-server' and parameterize 'current-http-proxy' instead.master
parent
cfd1ed8401
commit
9d6c6cb20e
|
@ -1,6 +1,6 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
|
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
|
||||||
;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
|
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
|
@ -72,6 +72,7 @@ NAMES (strings)."
|
||||||
"Retrieve the URL of REPO."
|
"Retrieve the URL of REPO."
|
||||||
(let ((elpa-archives
|
(let ((elpa-archives
|
||||||
'((gnu . "https://elpa.gnu.org/packages")
|
'((gnu . "https://elpa.gnu.org/packages")
|
||||||
|
(gnu/http . "http://elpa.gnu.org/packages") ;for testing
|
||||||
(melpa-stable . "https://stable.melpa.org/packages")
|
(melpa-stable . "https://stable.melpa.org/packages")
|
||||||
(melpa . "https://melpa.org/packages"))))
|
(melpa . "https://melpa.org/packages"))))
|
||||||
(assq-ref elpa-archives repo)))
|
(assq-ref elpa-archives repo)))
|
||||||
|
@ -251,7 +252,7 @@ type '<elpa-package>'."
|
||||||
(package
|
(package
|
||||||
;; ELPA is known to contain only GPLv3+ code. Other repos may contain
|
;; ELPA is known to contain only GPLv3+ code. Other repos may contain
|
||||||
;; code under other license but there's no license metadata.
|
;; code under other license but there's no license metadata.
|
||||||
(let ((license (and (eq? 'gnu repo) 'license:gpl3+)))
|
(let ((license (and (memq repo '(gnu gnu/http)) 'license:gpl3+)))
|
||||||
(elpa-package->sexp package license)))))
|
(elpa-package->sexp package license)))))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
|
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
|
||||||
|
;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -18,10 +19,11 @@
|
||||||
|
|
||||||
(define-module (test-elpa)
|
(define-module (test-elpa)
|
||||||
#:use-module (guix import elpa)
|
#:use-module (guix import elpa)
|
||||||
#:use-module (guix tests)
|
#:use-module (guix tests http)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-64)
|
#:use-module (srfi srfi-64)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match)
|
||||||
|
#:use-module (web client))
|
||||||
|
|
||||||
(define elpa-mock-archive
|
(define elpa-mock-archive
|
||||||
'(1
|
'(1
|
||||||
|
@ -37,58 +39,19 @@
|
||||||
nil "Integrated environment for *TeX*" tar
|
nil "Integrated environment for *TeX*" tar
|
||||||
((:url . "http://www.gnu.org/software/auctex/"))])))
|
((:url . "http://www.gnu.org/software/auctex/"))])))
|
||||||
|
|
||||||
(define auctex-readme-mock "This is the AUCTeX description.")
|
;; Avoid collisions with other tests.
|
||||||
|
(%http-server-port 10300)
|
||||||
(define* (elpa-package-info-mock name #:optional (repo "gnu"))
|
|
||||||
"Simulate retrieval of 'archive-contents' file from REPO and extraction of
|
|
||||||
information about package NAME. (Function 'elpa-package-info'.)"
|
|
||||||
(let* ((archive elpa-mock-archive)
|
|
||||||
(info (filter (lambda (p) (eq? (first p) (string->symbol name)))
|
|
||||||
(cdr archive))))
|
|
||||||
(if (pair? info) (first info) #f)))
|
|
||||||
|
|
||||||
(define elpa-version->string
|
|
||||||
(@@ (guix import elpa) elpa-version->string))
|
|
||||||
|
|
||||||
(define package-source-url
|
|
||||||
(@@ (guix import elpa) package-source-url))
|
|
||||||
|
|
||||||
(define ensure-list
|
|
||||||
(@@ (guix import elpa) ensure-list))
|
|
||||||
|
|
||||||
(define package-home-page
|
|
||||||
(@@ (guix import elpa) package-home-page))
|
|
||||||
|
|
||||||
(define make-elpa-package
|
|
||||||
(@@ (guix import elpa) make-elpa-package))
|
|
||||||
|
|
||||||
(test-begin "elpa")
|
(test-begin "elpa")
|
||||||
|
|
||||||
(define (eval-test-with-elpa pkg)
|
(define (eval-test-with-elpa pkg)
|
||||||
(mock
|
;; Set up an HTTP server and use it as a pseudo-proxy so that
|
||||||
;; replace the two fetching functions
|
;; 'elpa->guix-package' talks to it.
|
||||||
((guix import elpa) fetch-elpa-package
|
(with-http-server `((200 ,(object->string elpa-mock-archive))
|
||||||
(lambda* (name #:optional (repo "gnu"))
|
(200 "This is the description.")
|
||||||
(let ((pkg (elpa-package-info-mock name repo)))
|
(200 "fake tarball contents"))
|
||||||
(match pkg
|
(parameterize ((current-http-proxy (%local-url)))
|
||||||
((name version reqs synopsis kind . rest)
|
(match (elpa->guix-package pkg 'gnu/http)
|
||||||
(let* ((name (symbol->string name))
|
|
||||||
(ver (elpa-version->string version))
|
|
||||||
(url (package-source-url kind name ver repo)))
|
|
||||||
(make-elpa-package name ver
|
|
||||||
(ensure-list reqs) synopsis kind
|
|
||||||
(package-home-page (first rest))
|
|
||||||
auctex-readme-mock
|
|
||||||
url)))
|
|
||||||
(_ #f)))))
|
|
||||||
(mock
|
|
||||||
((guix build download) url-fetch
|
|
||||||
(lambda (url file . _)
|
|
||||||
(call-with-output-file file
|
|
||||||
(lambda (port)
|
|
||||||
(display "fake tarball" port)))))
|
|
||||||
|
|
||||||
(match (elpa->guix-package pkg)
|
|
||||||
(('package
|
(('package
|
||||||
('name "emacs-auctex")
|
('name "emacs-auctex")
|
||||||
('version "11.88.6")
|
('version "11.88.6")
|
||||||
|
@ -96,12 +59,12 @@ information about package NAME. (Function 'elpa-package-info'.)"
|
||||||
('origin
|
('origin
|
||||||
('method 'url-fetch)
|
('method 'url-fetch)
|
||||||
('uri ('string-append
|
('uri ('string-append
|
||||||
"https://elpa.gnu.org/packages/auctex-" 'version ".tar"))
|
"http://elpa.gnu.org/packages/auctex-" 'version ".tar"))
|
||||||
('sha256 ('base32 (? string? hash)))))
|
('sha256 ('base32 (? string? hash)))))
|
||||||
('build-system 'emacs-build-system)
|
('build-system 'emacs-build-system)
|
||||||
('home-page "http://www.gnu.org/software/auctex/")
|
('home-page "http://www.gnu.org/software/auctex/")
|
||||||
('synopsis "Integrated environment for *TeX*")
|
('synopsis "Integrated environment for *TeX*")
|
||||||
('description (? string?))
|
('description "This is the description.")
|
||||||
('license 'license:gpl3+))
|
('license 'license:gpl3+))
|
||||||
#t)
|
#t)
|
||||||
(x
|
(x
|
||||||
|
@ -111,3 +74,7 @@ information about package NAME. (Function 'elpa-package-info'.)"
|
||||||
(eval-test-with-elpa "auctex"))
|
(eval-test-with-elpa "auctex"))
|
||||||
|
|
||||||
(test-end "elpa")
|
(test-end "elpa")
|
||||||
|
|
||||||
|
;; Local Variables:
|
||||||
|
;; eval: (put 'with-http-server 'scheme-indent-function 1)
|
||||||
|
;; End:
|
||||||
|
|
Reference in New Issue