diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-07-01 23:32:25 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-07-01 23:34:51 +0200 |
commit | d774c7b1218a3cc20079b19812da119f9ed26b54 (patch) | |
tree | 62ac8a6f85d6c7f897c5fd7bb98ed6abe699da8c /tests | |
parent | 884df776408caa137456e91ba0f5fd71524cf6c3 (diff) | |
download | guix-d774c7b1218a3cc20079b19812da119f9ed26b54.tar guix-d774c7b1218a3cc20079b19812da119f9ed26b54.tar.gz |
channels: Dependencies listed in '.guix-channel' can have an introduction.
Suggested by Ricardo Wurmus and Simon Tournier.
* guix/channels.scm (sexp->channel-introduction): New procedure.
(read-channel-metadata): Use it.
(profile-channels)[sexp->channel-introduction]: Remove.
* tests/channels.scm ("latest-channel-instances, authenticate dependency"):
New test.
* doc/guix.texi (Channels)[Declaring Channel Dependencies]: Augment example.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/channels.scm | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/channels.scm b/tests/channels.scm index 7e593b84c4..cde3b668fb 100644 --- a/tests/channels.scm +++ b/tests/channels.scm @@ -536,4 +536,54 @@ #:keyring-reference-prefix "") 'failed))))))) +(unless (gpg+git-available?) (test-skip 1)) +(test-equal "latest-channel-instances, authenticate dependency" + #t + ;; Make sure that a channel dependency that has an introduction is + ;; authenticated. This test checks that an authentication error is raised + ;; as it should when authenticating the dependency. + (with-fresh-gnupg-setup (list %ed25519-public-key-file + %ed25519-secret-key-file) + (with-temporary-git-repository dependency-directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) + (keyring-reference "master")))) + (add ".guix-authorizations" + ,(object->string + `(authorizations (version 0) ()))) + (add "signer.key" ,(call-with-input-file %ed25519-public-key-file + get-string-all)) + (commit "zeroth commit" + (signer ,(key-fingerprint %ed25519-public-key-file))) + (add "foo.txt" "evil") + (commit "unsigned commit")) + (with-repository dependency-directory dependency + (let* ((commit0 (find-commit dependency "zeroth")) + (commit1 (find-commit dependency "unsigned")) + (intro `(channel-introduction + (version 0) + (commit ,(commit-id-string commit0)) + (signer ,(openpgp-format-fingerprint + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519-public-key-file))))))) + (with-temporary-git-repository directory + `((add ".guix-channel" + ,(object->string + `(channel (version 0) + (dependencies + (channel + (name test-channel) + (url ,dependency-directory) + (introduction ,intro)))))) + (commit "single commit")) + (let ((channel (channel (name 'test) (url directory)))) + (guard (c ((unsigned-commit-error? c) + (oid=? (git-authentication-error-commit c) + (commit-id commit1)))) + (with-store store + (latest-channel-instances store (list channel)) + 'failed))))))))) + (test-end "channels") |