summaryrefslogtreecommitdiff
path: root/tests/channels.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/channels.scm')
-rw-r--r--tests/channels.scm47
1 files changed, 41 insertions, 6 deletions
diff --git a/tests/channels.scm b/tests/channels.scm
index 910088ba15..3b141428c8 100644
--- a/tests/channels.scm
+++ b/tests/channels.scm
@@ -37,6 +37,7 @@
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (srfi srfi-64)
+ #:use-module (ice-9 control)
#:use-module (ice-9 match))
(test-begin "channels")
@@ -136,11 +137,11 @@
(url "test")))
(test-dir (channel-instance-checkout instance--simple)))
(mock ((guix git) update-cached-checkout
- (lambda* (url #:key ref)
+ (lambda* (url #:key ref starting-commit)
(match url
- ("test" (values test-dir "caf3cabba9e"))
+ ("test" (values test-dir "caf3cabba9e" #f))
(_ (values (channel-instance-checkout instance--no-deps)
- "abcde1234")))))
+ "abcde1234" #f)))))
(with-store store
(let ((instances (latest-channel-instances store (list channel))))
(and (eq? 2 (length instances))
@@ -155,11 +156,11 @@
(url "test")))
(test-dir (channel-instance-checkout instance--with-dupes)))
(mock ((guix git) update-cached-checkout
- (lambda* (url #:key ref)
+ (lambda* (url #:key ref starting-commit)
(match url
- ("test" (values test-dir "caf3cabba9e"))
+ ("test" (values test-dir "caf3cabba9e" #f))
(_ (values (channel-instance-checkout instance--no-deps)
- "abcde1234")))))
+ "abcde1234" #f)))))
(with-store store
(let ((instances (latest-channel-instances store (list channel))))
(and (= 2 (length instances))
@@ -178,6 +179,40 @@
"abc1234")))
instances)))))))
+(unless (which (git-command)) (test-skip 1))
+(test-equal "latest-channel-instances #:validate-pull"
+ 'descendant
+
+ ;; Make sure the #:validate-pull procedure receives the right values.
+ (let/ec return
+ (with-temporary-git-repository directory
+ '((add "a.txt" "A")
+ (commit "first commit")
+ (add "b.scm" "#t")
+ (commit "second commit"))
+ (with-repository directory repository
+ (let* ((commit1 (find-commit repository "first"))
+ (commit2 (find-commit repository "second"))
+ (spec (channel (url (string-append "file://" directory))
+ (name 'foo)))
+ (new (channel (inherit spec)
+ (commit (oid->string (commit-id commit2)))))
+ (old (channel (inherit spec)
+ (commit (oid->string (commit-id commit1))))))
+ (define (validate-pull channel current instance relation)
+ (return (and (eq? channel old)
+ (string=? (oid->string (commit-id commit2))
+ current)
+ (string=? (oid->string (commit-id commit1))
+ (channel-instance-commit instance))
+ relation)))
+
+ (with-store store
+ ;; Attempt a downgrade from NEW to OLD.
+ (latest-channel-instances store (list old)
+ #:current-channels (list new)
+ #:validate-pull validate-pull)))))))
+
(test-assert "channel-instances->manifest"
;; Compute the manifest for a graph of instances and make sure we get a
;; derivation graph that mirrors the instance graph. This test also ensures