me
/
guix
Archived
1
0
Fork 0

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
Ludovic Courtès 2020-01-16 22:49:41 +01:00
parent cfd1ed8401
commit 9d6c6cb20e
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 37 additions and 69 deletions

View File

@ -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)))))

View File

@ -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: