diff --git a/gnu/local.mk b/gnu/local.mk index c76653b823..cb84fc0e81 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1004,6 +1004,7 @@ dist_patch_DATA = \ %D%/packages/patches/lierolibre-newer-libconfig.patch \ %D%/packages/patches/lierolibre-remove-arch-warning.patch \ %D%/packages/patches/lierolibre-try-building-other-arch.patch \ + %D%/packages/patches/linkchecker-mark-more-tests-that-require-the-network.patch \ %D%/packages/patches/linux-pam-no-setfsuid.patch \ %D%/packages/patches/lirc-localstatedir.patch \ %D%/packages/patches/lirc-reproducible-build.patch \ diff --git a/gnu/packages/patches/linkchecker-mark-more-tests-that-require-the-network.patch b/gnu/packages/patches/linkchecker-mark-more-tests-that-require-the-network.patch new file mode 100644 index 0000000000..f3e488cec2 --- /dev/null +++ b/gnu/packages/patches/linkchecker-mark-more-tests-that-require-the-network.patch @@ -0,0 +1,182 @@ +From f24c88a0732024028fffe0372039a847e91722ea Mon Sep 17 00:00:00 2001 +From: Christopher Baines +Date: Tue, 1 Jan 2019 22:36:29 +0000 +Subject: [PATCH] Mark more tests that require the network + +I believe all these tests require the network, at least they seem to +fail if it's I run them without connecting my computer to the web. + +I'm looking at this as part of packaging linkchecker for GNU Guix, +where the package is build and the tests are run in a isolated +environment, intentionally without network access, to avoid issues +with non-reproducible package builds. +--- + tests/checker/test_http.py | 2 ++ + tests/checker/test_http_misc.py | 2 ++ + tests/checker/test_http_redirect.py | 2 ++ + tests/checker/test_httpbin.py | 5 +++++ + tests/checker/test_misc.py | 4 ++++ + tests/checker/test_whitespace.py | 3 +++ + 6 files changed, 18 insertions(+) + +diff --git a/tests/checker/test_http.py b/tests/checker/test_http.py +index e4c1e097..8a8af567 100644 +--- a/tests/checker/test_http.py ++++ b/tests/checker/test_http.py +@@ -20,6 +20,7 @@ + + import pytest + ++from tests import need_network + from .httpserver import HttpServerTest, CookieRedirectHttpRequestHandler + + class TestHttp (HttpServerTest): +@@ -29,6 +30,7 @@ def __init__(self, methodName='runTest'): + super(TestHttp, self).__init__(methodName=methodName) + self.handler = CookieRedirectHttpRequestHandler + ++ @need_network + def test_html (self): + confargs = dict(recursionlevel=1) + self.file_test("http.html", confargs=confargs) +diff --git a/tests/checker/test_http_misc.py b/tests/checker/test_http_misc.py +index 9922d85f..c6b6afdb 100644 +--- a/tests/checker/test_http_misc.py ++++ b/tests/checker/test_http_misc.py +@@ -20,11 +20,13 @@ + import os + import sys + from .httpserver import HttpServerTest ++from tests import need_network + from linkcheck.network import iputil + + class TestHttpMisc (HttpServerTest): + """Test http:// misc link checking.""" + ++ @need_network + def test_html (self): + self.swf_test() + self.obfuscate_test() +diff --git a/tests/checker/test_http_redirect.py b/tests/checker/test_http_redirect.py +index f212d98e..2253a70d 100644 +--- a/tests/checker/test_http_redirect.py ++++ b/tests/checker/test_http_redirect.py +@@ -17,6 +17,7 @@ + """ + Test http checking. + """ ++from tests import need_network + from .httpserver import HttpServerTest, CookieRedirectHttpRequestHandler + + class TestHttpRedirect (HttpServerTest): +@@ -26,6 +27,7 @@ def __init__(self, methodName='runTest'): + super(TestHttpRedirect, self).__init__(methodName=methodName) + self.handler = CookieRedirectHttpRequestHandler + ++ @need_network + def test_redirect (self): + self.redirect1() + self.redirect2() +diff --git a/tests/checker/test_httpbin.py b/tests/checker/test_httpbin.py +index 0319c2f6..4c8fa846 100644 +--- a/tests/checker/test_httpbin.py ++++ b/tests/checker/test_httpbin.py +@@ -18,6 +18,7 @@ + Test http stuff with httpbin.org. + """ + import re ++from tests import need_network + from . import LinkCheckTest + + +@@ -30,6 +31,7 @@ def get_httpbin_url(path): + class TestHttpbin(LinkCheckTest): + """Test http:// link redirection checking.""" + ++ @need_network + def test_http_link(self): + linkurl = u"http://www.example.com" + nlinkurl = self.norm(linkurl) +@@ -48,6 +50,7 @@ def test_http_link(self): + ] + self.direct(url, resultlines, recursionlevel=1) + ++ @need_network + def test_basic_auth(self): + user = u"testuser" + password = u"testpassword" +@@ -67,6 +70,7 @@ def test_basic_auth(self): + ] + self.direct(url, resultlines, confargs=confargs) + ++ @need_network + def test_http_refresh_header(self): + linkurl = u"http://www.example.com" + nlinkurl = self.norm(linkurl) +@@ -85,6 +89,7 @@ def test_http_refresh_header(self): + ] + self.direct(url, resultlines, recursionlevel=1) + ++ @need_network + def test_http_content_location_header(self): + linkurl = u"http://www.example.com" + nlinkurl = self.norm(linkurl) +diff --git a/tests/checker/test_misc.py b/tests/checker/test_misc.py +index 2e4cfd07..f9591f9d 100644 +--- a/tests/checker/test_misc.py ++++ b/tests/checker/test_misc.py +@@ -17,6 +17,7 @@ + """ + Test miscellaneous html tag parsing and URL types + """ ++from tests import need_network + from . import LinkCheckTest + + +@@ -25,15 +26,18 @@ class TestMisc (LinkCheckTest): + Test misc link types. + """ + ++ @need_network + def test_misc (self): + self.file_test("misc.html") + + def test_html5 (self): + self.file_test("html5.html") + ++ @need_network + def test_archive (self): + self.file_test("archive.html") + ++ @need_network + def test_itms_services(self): + url = u"itms-services:?action=download-manifest&url=http://www.example.com/" + resultlines = [ +diff --git a/tests/checker/test_whitespace.py b/tests/checker/test_whitespace.py +index 609c108a..fc2727d6 100644 +--- a/tests/checker/test_whitespace.py ++++ b/tests/checker/test_whitespace.py +@@ -17,6 +17,7 @@ + """ + Test whitespace handling. + """ ++from tests import need_network + from . import LinkCheckTest + + +@@ -25,6 +26,7 @@ class TestWhitespace (LinkCheckTest): + Test whitespace in URLs. + """ + ++ @need_network + def test_leading_whitespace (self): + # Leading whitespace + url = u" http://www.example.org/" +@@ -50,6 +52,7 @@ def test_leading_whitespace (self): + ] + self.direct(url, resultlines) + ++ @need_network + def test_trailing_whitespace (self): + # Trailing whitespace + url = u"http://www.example.org/ " diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index d3693dff05..776027ced7 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -5330,6 +5330,9 @@ (define-public linkchecker (uri (git-reference (url "https://github.com/linkchecker/linkchecker") (commit (string-append "v" version)))) + (patches + (search-patches + "linkchecker-mark-more-tests-that-require-the-network.patch")) (file-name (git-file-name name version)) (sha256 (base32 @@ -5339,8 +5342,32 @@ (define-public linkchecker `(("python2-dnspython" ,python2-dnspython) ("python2-pyxdg" ,python2-pyxdg) ("python2-requests" ,python2-requests))) + (native-inputs + `(("gettext" ,gettext-minimal) + ("python2-pytest" ,python2-pytest) + ("python2-miniboa" ,python2-miniboa) + ("python2-parameterized" ,python2-parameterized))) (arguments - `(#:python ,python-2)) + `(#:python ,python-2 + #:phases + (modify-phases %standard-phases + ;; Move the 'check phase to after 'install, so that the installed + ;; library can be used + (delete 'check) + (add-after 'install 'check + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; Set PYTHONPATH so that the installed linkchecker is used + (setenv "PYTHONPATH" + (string-append out "/lib/python2.7/site-packages" + ":" + (getenv "PYTHONPATH"))) + ;; Remove this directory to avoid it being used when running + ;; the tests + (delete-file-recursively "linkcheck") + + (invoke "py.test" "tests")) + #t))))) (home-page "https://linkcheck.github.io/linkchecker") (synopsis "Check websites for broken links") (description "LinkChecker is a website validator. It checks for broken