branch: main
commit 6a00f42a76f404f8811b767c92bf923c8428b6c7
Author: Ludovic Courtès <[email protected]>
AuthorDate: Fri Jun 14 10:13:03 2024 +0200

    tests: Test the creation of build product GC roots.
    
    * tests/database.scm (%store): New variable.
    ("set-build-successful! installs GC root for product"): New test.
---
 tests/database.scm | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/tests/database.scm b/tests/database.scm
index c4efb0a..2c740e4 100644
--- a/tests/database.scm
+++ b/tests/database.scm
@@ -26,11 +26,15 @@
              (cuirass parameters)
              (cuirass remote)
              (cuirass specification)
+             ((cuirass store)
+              #:select (%gc-root-directory))
              (cuirass utils)
              ((cuirass logging) #:select (current-logging-level))
              (tests common)
              (guix channels)
-             ((guix build utils) #:select (call-with-temporary-output-file))
+             ((guix store) #:select (open-connection add-text-to-store))
+             ((guix build utils)
+              #:select (call-with-temporary-output-file mkdir-p))
              (rnrs io ports)
              (squee)
              (fibers)
@@ -145,6 +149,10 @@
         (raise-exception result)
         result)))
 
+(define %store
+  (false-if-exception (open-connection)))
+
+
 (current-logging-level 'debug)
 
 (test-group-with-cleanup "database"
@@ -849,7 +857,32 @@ timestamp, checkouttime, evaltime) VALUES ('guix', 0, 0, 
0, 0);")
         (set-build-successful! drv)
         (match (build-products (db-get-build name))
           ((product)
-           (equal? (build-product-file product) (getcwd)))))))
+           (and (equal? (build-product-file product) (getcwd))))))))
+
+  (test-skip (if %store 0 1))
+  (test-assert "set-build-successful! installs GC root for product"
+    (with-fibers
+     (parameterize ((%gc-root-directory (mkdtemp "/tmp/cuirass-test-XXXXXX")))
+       (mkdir-p (%gc-root-directory))
+       (let* ((name "/foo6.drv")
+              (item (add-text-to-store %store "build-product.txt"
+                                       "Hello!"))
+              (build
+               (make-dummy-build name
+                                 #:outputs
+                                 (list (output
+                                        (item item)
+                                        (derivation "/foo6.drv")))))
+              (drv (build-derivation build)))
+         (db-add-build build)
+         (set-build-successful! drv)
+         (match (build-products (db-get-build name))
+           ((product)
+            (let ((root (string-append (%gc-root-directory) "/"
+                                       (basename
+                                        (build-product-file product)))))
+              (string=? (readlink root) item
+                        (build-product-file product)))))))))
 
   (test-assert "db-worker-current-builds"
     (with-fibers

Reply via email to