diff options
| author | Christopher Baines <mail@cbaines.net> | 2018-07-13 20:39:46 +0100 | 
|---|---|---|
| committer | Christopher Baines <mail@cbaines.net> | 2018-10-02 08:11:17 +0100 | 
| commit | f8e710684e5c3f866413dff825ba17bdffceac5d (patch) | |
| tree | 5b8fd628c1df930945645729140ff18bd6ace5a9 /gnu/tests | |
| parent | 6c6c03fa00db33703002fa8845716f50f649d201 (diff) | |
services: Add Gitolite.
* gnu/services/version-control.scm (<gitolite-configuration>,
<gitolite-rc-file>): New record types.
(gitolite-accounts, gitolite-activation): New procedures.
(gitolite-service-type): New variables.
* gnu/tests/version-control.scm (%gitolite-test-admin-keypair, %gitolite-os,
%test-gitolite): New variables.
(run-gitolite-test): New procedure.
* doc/guix.texi (Version Control): Document the gitolite service.
Diffstat (limited to 'gnu/tests')
| -rw-r--r-- | gnu/tests/version-control.scm | 114 | 
1 files changed, 113 insertions, 1 deletions
| diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm index 3b935a1b48..4409b8a12b 100644 --- a/gnu/tests/version-control.scm +++ b/gnu/tests/version-control.scm @@ -2,6 +2,7 @@  ;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>  ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>  ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>  ;;;  ;;; This file is part of GNU Guix.  ;;; @@ -27,14 +28,17 @@    #:use-module (gnu services)    #:use-module (gnu services version-control)    #:use-module (gnu services cgit) +  #:use-module (gnu services ssh)    #:use-module (gnu services web)    #:use-module (gnu services networking)    #:use-module (gnu packages version-control) +  #:use-module (gnu packages ssh)    #:use-module (guix gexp)    #:use-module (guix store)    #:use-module (guix modules)    #:export (%test-cgit -            %test-git-http)) +            %test-git-http +            %test-gitolite))  (define README-contents    "Hello!  This is what goes inside the 'README' file.") @@ -300,3 +304,111 @@ HTTP-PORT."     (name "git-http")     (description "Connect to a running Git HTTP server.")     (value (run-git-http-test)))) + + +;;; +;;; Gitolite. +;;; + +(define %gitolite-test-admin-keypair +  (computed-file +   "gitolite-test-admin-keypair" +   (with-imported-modules (source-module-closure +                           '((guix build utils))) +     #~(begin +         (use-modules (ice-9 match) (srfi srfi-26) +                      (guix build utils)) + +         (mkdir #$output) +         (invoke #$(file-append openssh "/bin/ssh-keygen") +                 "-f" (string-append #$output "/test-admin") +                 "-t" "rsa" +                 "-q" +                 "-N" ""))))) + +(define %gitolite-os +  (simple-operating-system +   (dhcp-client-service) +   (service openssh-service-type) +   (service gitolite-service-type +            (gitolite-configuration +             (admin-pubkey +              (file-append %gitolite-test-admin-keypair "/test-admin.pub")))))) + +(define (run-gitolite-test) +  (define os +    (marionette-operating-system +     %gitolite-os +     #:imported-modules '((gnu services herd) +                          (guix combinators)))) + +  (define vm +    (virtual-machine +     (operating-system os) +     (port-forwardings `((2222 . 22))))) + +  (define test +    (with-imported-modules '((gnu build marionette) +                             (guix build utils)) +      #~(begin +          (use-modules (srfi srfi-64) +                       (rnrs io ports) +                       (gnu build marionette) +                       (guix build utils)) + +          (define marionette +            (make-marionette (list #$vm))) + +          (mkdir #$output) +          (chdir #$output) + +          (test-begin "gitolite") + +          ;; Wait for sshd to be up and running. +          (test-assert "service running" +            (marionette-eval +             '(begin +                (use-modules (gnu services herd)) +                (start-service 'ssh-daemon)) +             marionette)) + +          (display #$%gitolite-test-admin-keypair) + +          (setenv "GIT_SSH_VARIANT" "ssh") +          (setenv "GIT_SSH_COMMAND" +                  (string-join +                   '(#$(file-append openssh "/bin/ssh") +                     "-i" #$(file-append %gitolite-test-admin-keypair +                                         "/test-admin") +                     "-o" "UserKnownHostsFile=/dev/null" +                     "-o" "StrictHostKeyChecking=no"))) + +          (test-assert "cloning the admin repository" +            (invoke #$(file-append git "/bin/git") +                    "clone" "-v" +                    "ssh://git@localhost:2222/gitolite-admin" +                    "/tmp/clone")) + +          (test-assert "admin key exists" +            (file-exists? "/tmp/clone/keydir/test-admin.pub")) + +          (with-directory-excursion "/tmp/clone" +            (invoke #$(file-append git "/bin/git") +                    "-c" "user.name=Guix" "-c" "user.email=guix" +                    "commit" +                    "-m" "Test commit" +                    "--allow-empty") + +            (test-assert "pushing, and the associated hooks" +              (invoke #$(file-append git "/bin/git") "push"))) + +          (test-end) +          (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + +  (gexp->derivation "gitolite" test)) + +(define %test-gitolite +  (system-test +   (name "gitolite") +   (description "Clone the Gitolite admin repository.") +   (value (run-gitolite-test)))) | 
