summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/hackage.scm20
-rw-r--r--tests/store.scm78
2 files changed, 82 insertions, 16 deletions
diff --git a/tests/hackage.scm b/tests/hackage.scm
index 9919d54f47..189b9af173 100644
--- a/tests/hackage.scm
+++ b/tests/hackage.scm
@@ -171,10 +171,7 @@ library
     ('source
      ('origin
        ('method 'url-fetch)
-       ('uri ('string-append
-              "https://hackage.haskell.org/package/foo/foo-"
-              'version
-              ".tar.gz"))
+       ('uri ('hackage-uri "foo" 'version))
        ('sha256
         ('base32
          (? string? hash)))))
@@ -214,10 +211,7 @@ library
     ('source
      ('origin
        ('method 'url-fetch)
-       ('uri ('string-append
-              "https://hackage.haskell.org/package/foo/foo-"
-              'version
-              ".tar.gz"))
+       ('uri ('hackage-uri "foo" 'version))
        ('sha256
         ('base32
          (? string? hash)))))
@@ -337,10 +331,7 @@ executable cabal
     ('source
      ('origin
        ('method 'url-fetch)
-       ('uri ('string-append
-              "https://hackage.haskell.org/package/foo/foo-"
-              'version
-              ".tar.gz"))
+       ('uri ('hackage-uri "foo" 'version))
        ('sha256
         ('base32
          (? string? hash)))))
@@ -401,10 +392,7 @@ executable cabal
     ('source
      ('origin
        ('method 'url-fetch)
-       ('uri ('string-append
-              "https://hackage.haskell.org/package/foo/foo-"
-              'version
-              ".tar.gz"))
+       ('uri ('hackage-uri "foo" 'version))
        ('sha256
         ('base32
          (? string? hash)))))
diff --git a/tests/store.scm b/tests/store.scm
index d5edd110dd..5df28adf0d 100644
--- a/tests/store.scm
+++ b/tests/store.scm
@@ -943,6 +943,84 @@
                (build-derivations s (list d))
                #f))))))
 
+(test-equal "substitute query and large size"
+  (+ 100 (expt 2 63))                     ;<https://issues.guix.gnu.org/51983>
+  (with-store s
+    (let* ((size (+ 100 (expt 2 63)))      ;does not fit in signed 'long long'
+           (item (string-append (%store-prefix)
+                                "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bad-size")))
+      ;; Create fake substituter data, to be read by 'guix substitute'.
+      (call-with-output-file (string-append (%substitute-directory)
+                                            "/" (store-path-hash-part item)
+                                            ".narinfo")
+        (lambda (port)
+          (format port "StorePath: ~a
+URL: http://example.org
+Compression: none
+NarSize: ~a
+NarHash: sha256:0fj9vhblff2997pi7qjj7lhmy7wzhnjwmkm2hmq6gr4fzmg10s0w
+References: 
+System: x86_64-linux~%"
+                  item size)))
+
+      ;; Remove entry from the local cache.
+      (false-if-exception
+       (delete-file-recursively (string-append (getenv "XDG_CACHE_HOME")
+                                               "/guix/substitute")))
+
+      ;; Make sure 'guix substitute' correctly communicates the above
+      ;; data.
+      (set-build-options s #:use-substitutes? #t
+                         #:substitute-urls (%test-substitute-urls))
+      (match (pk 'spi (substitutable-path-info s (list item)))
+        (((? substitutable? s))
+         (and (equal? (substitutable-path s) item)
+              (substitutable-nar-size s)))))))
+
+(test-equal "substitute and large size"
+  (+ 100 (expt 2 31))                     ;<https://issues.guix.gnu.org/46212>
+  (with-store s
+    (let* ((size (+ 100 (expt 2 31)))            ;does not fit in signed 'int'
+           (item (string-append (%store-prefix)
+                                "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bad-size-"
+                                (random-text)))
+           (nar  (string-append (%substitute-directory) "/nar")))
+      ;; Create a dummy nar to allow for substitution.
+      (call-with-output-file nar
+        (lambda (port)
+          (write-file-tree (store-path-package-name item) port
+                           #:file-type+size (lambda _
+                                              (values 'regular 12))
+                           #:file-port (lambda _
+                                         (open-input-string "Hello world.")))))
+
+      ;; Create fake substituter data, to be read by 'guix substitute'.
+      (call-with-output-file (string-append (%substitute-directory)
+                                            "/" (store-path-hash-part item)
+                                            ".narinfo")
+        (lambda (port)
+          (format port "StorePath: ~a
+URL: file://~a
+Compression: none
+NarSize: ~a
+NarHash: sha256:~a
+References: 
+System: x86_64-linux~%"
+                  item nar size
+                  (bytevector->nix-base32-string (gcrypt:file-sha256 nar)))))
+
+      ;; Remove entry from the local cache.
+      (false-if-exception
+       (delete-file-recursively (string-append (getenv "XDG_CACHE_HOME")
+                                               "/guix/substitute")))
+
+      ;; Make sure 'guix substitute' correctly communicates the above
+      ;; data.
+      (set-build-options s #:use-substitutes? #t
+                         #:substitute-urls (%test-substitute-urls))
+      (ensure-path s item)
+      (path-info-nar-size (query-path-info s item)))))
+
 (test-assert "export/import several paths"
   (let* ((texts (unfold (cut >= <> 10)
                         (lambda _ (random-text))