summaryrefslogtreecommitdiff
path: root/gnu/tests/version-control.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-07-13 20:39:46 +0100
committerChristopher Baines <mail@cbaines.net>2018-10-02 08:11:17 +0100
commitf8e710684e5c3f866413dff825ba17bdffceac5d (patch)
tree5b8fd628c1df930945645729140ff18bd6ace5a9 /gnu/tests/version-control.scm
parent6c6c03fa00db33703002fa8845716f50f649d201 (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/version-control.scm')
-rw-r--r--gnu/tests/version-control.scm114
1 files changed, 113 insertions, 1 deletions
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 3b935a1b485..4409b8a12b3 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -2,6 +2,7 @@
2;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com> 2;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
3;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org> 3;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
4;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org> 4;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
5;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
5;;; 6;;;
6;;; This file is part of GNU Guix. 7;;; This file is part of GNU Guix.
7;;; 8;;;
@@ -27,14 +28,17 @@
27 #:use-module (gnu services) 28 #:use-module (gnu services)
28 #:use-module (gnu services version-control) 29 #:use-module (gnu services version-control)
29 #:use-module (gnu services cgit) 30 #:use-module (gnu services cgit)
31 #:use-module (gnu services ssh)
30 #:use-module (gnu services web) 32 #:use-module (gnu services web)
31 #:use-module (gnu services networking) 33 #:use-module (gnu services networking)
32 #:use-module (gnu packages version-control) 34 #:use-module (gnu packages version-control)
35 #:use-module (gnu packages ssh)
33 #:use-module (guix gexp) 36 #:use-module (guix gexp)
34 #:use-module (guix store) 37 #:use-module (guix store)
35 #:use-module (guix modules) 38 #:use-module (guix modules)
36 #:export (%test-cgit 39 #:export (%test-cgit
37 %test-git-http)) 40 %test-git-http
41 %test-gitolite))
38 42
39(define README-contents 43(define README-contents
40 "Hello! This is what goes inside the 'README' file.") 44 "Hello! This is what goes inside the 'README' file.")
@@ -300,3 +304,111 @@ HTTP-PORT."
300 (name "git-http") 304 (name "git-http")
301 (description "Connect to a running Git HTTP server.") 305 (description "Connect to a running Git HTTP server.")
302 (value (run-git-http-test)))) 306 (value (run-git-http-test))))
307
308
309;;;
310;;; Gitolite.
311;;;
312
313(define %gitolite-test-admin-keypair
314 (computed-file
315 "gitolite-test-admin-keypair"
316 (with-imported-modules (source-module-closure
317 '((guix build utils)))
318 #~(begin
319 (use-modules (ice-9 match) (srfi srfi-26)
320 (guix build utils))
321
322 (mkdir #$output)
323 (invoke #$(file-append openssh "/bin/ssh-keygen")
324 "-f" (string-append #$output "/test-admin")
325 "-t" "rsa"
326 "-q"
327 "-N" "")))))
328
329(define %gitolite-os
330 (simple-operating-system
331 (dhcp-client-service)
332 (service openssh-service-type)
333 (service gitolite-service-type
334 (gitolite-configuration
335 (admin-pubkey
336 (file-append %gitolite-test-admin-keypair "/test-admin.pub"))))))
337
338(define (run-gitolite-test)
339 (define os
340 (marionette-operating-system
341 %gitolite-os
342 #:imported-modules '((gnu services herd)
343 (guix combinators))))
344
345 (define vm
346 (virtual-machine
347 (operating-system os)
348 (port-forwardings `((2222 . 22)))))
349
350 (define test
351 (with-imported-modules '((gnu build marionette)
352 (guix build utils))
353 #~(begin
354 (use-modules (srfi srfi-64)
355 (rnrs io ports)
356 (gnu build marionette)
357 (guix build utils))
358
359 (define marionette
360 (make-marionette (list #$vm)))
361
362 (mkdir #$output)
363 (chdir #$output)
364
365 (test-begin "gitolite")
366
367 ;; Wait for sshd to be up and running.
368 (test-assert "service running"
369 (marionette-eval
370 '(begin
371 (use-modules (gnu services herd))
372 (start-service 'ssh-daemon))
373 marionette))
374
375 (display #$%gitolite-test-admin-keypair)
376
377 (setenv "GIT_SSH_VARIANT" "ssh")
378 (setenv "GIT_SSH_COMMAND"
379 (string-join
380 '(#$(file-append openssh "/bin/ssh")
381 "-i" #$(file-append %gitolite-test-admin-keypair
382 "/test-admin")
383 "-o" "UserKnownHostsFile=/dev/null"
384 "-o" "StrictHostKeyChecking=no")))
385
386 (test-assert "cloning the admin repository"
387 (invoke #$(file-append git "/bin/git")
388 "clone" "-v"
389 "ssh://git@localhost:2222/gitolite-admin"
390 "/tmp/clone"))
391
392 (test-assert "admin key exists"
393 (file-exists? "/tmp/clone/keydir/test-admin.pub"))
394
395 (with-directory-excursion "/tmp/clone"
396 (invoke #$(file-append git "/bin/git")
397 "-c" "user.name=Guix" "-c" "user.email=guix"
398 "commit"
399 "-m" "Test commit"
400 "--allow-empty")
401
402 (test-assert "pushing, and the associated hooks"
403 (invoke #$(file-append git "/bin/git") "push")))
404
405 (test-end)
406 (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
407
408 (gexp->derivation "gitolite" test))
409
410(define %test-gitolite
411 (system-test
412 (name "gitolite")
413 (description "Clone the Gitolite admin repository.")
414 (value (run-gitolite-test))))