mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-04-06 21:20:33 +02:00
services: Add MongoDB.
* gnu/services/databases.scm (%default-mongodb-configuration-file, %mongodb-accounts, mongodb-service-type): New variables. (<mongodb-configuration>): New record type. (mongodb-activation, mongodb-shepherd-service): New procedures. * gnu/tests/databases.scm (%test-mongodb): New variable. * doc/guix.texi (Database Services): Add MongoDB documentation.
This commit is contained in:
@@ -25,9 +25,11 @@
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services databases)
|
||||
#:use-module (gnu services networking)
|
||||
#:use-module (gnu packages databases)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix store)
|
||||
#:export (%test-memcached))
|
||||
#:export (%test-memcached
|
||||
%test-mongodb))
|
||||
|
||||
(define %memcached-os
|
||||
(simple-operating-system
|
||||
@@ -121,3 +123,85 @@
|
||||
(name "memcached")
|
||||
(description "Connect to a running MEMCACHED server.")
|
||||
(value (run-memcached-test))))
|
||||
|
||||
(define %mongodb-os
|
||||
(operating-system
|
||||
(inherit
|
||||
(simple-operating-system
|
||||
(dhcp-client-service)
|
||||
(service mongodb-service-type)))
|
||||
(packages (cons* mongodb
|
||||
%base-packages))))
|
||||
|
||||
(define* (run-mongodb-test #:optional (port 27017))
|
||||
"Run tests in %MONGODB-OS, forwarding PORT."
|
||||
(define os
|
||||
(marionette-operating-system
|
||||
%mongodb-os
|
||||
#:imported-modules '((gnu services herd)
|
||||
(guix combinators))))
|
||||
|
||||
(define vm
|
||||
(virtual-machine
|
||||
(operating-system os)
|
||||
(memory-size 1024)
|
||||
(disk-image-size (* 1024 (expt 2 20)))
|
||||
(port-forwardings `((27017 . ,port)))))
|
||||
|
||||
(define test
|
||||
(with-imported-modules '((gnu build marionette))
|
||||
#~(begin
|
||||
(use-modules (srfi srfi-11) (srfi srfi-64)
|
||||
(gnu build marionette)
|
||||
(ice-9 popen)
|
||||
(ice-9 rdelim))
|
||||
|
||||
(define marionette
|
||||
(make-marionette (list #$vm)))
|
||||
|
||||
(mkdir #$output)
|
||||
(chdir #$output)
|
||||
|
||||
(test-begin "mongodb")
|
||||
|
||||
(test-assert "service running"
|
||||
(marionette-eval
|
||||
'(begin
|
||||
(use-modules (gnu services herd))
|
||||
(match (start-service 'mongodb)
|
||||
(#f #f)
|
||||
(('service response-parts ...)
|
||||
(match (assq-ref response-parts 'running)
|
||||
((pid) (number? pid))))))
|
||||
marionette))
|
||||
|
||||
(test-eq "test insert"
|
||||
0
|
||||
(system* (string-append #$mongodb "/bin/mongo")
|
||||
"test"
|
||||
"--eval"
|
||||
"db.testCollection.insert({data: 'test-data'})"))
|
||||
|
||||
(test-equal "test find"
|
||||
"test-data"
|
||||
(let* ((port (open-pipe*
|
||||
OPEN_READ
|
||||
(string-append #$mongodb "/bin/mongo")
|
||||
"test"
|
||||
"--quiet"
|
||||
"--eval"
|
||||
"db.testCollection.findOne().data"))
|
||||
(output (read-line port))
|
||||
(status (close-pipe port)))
|
||||
output))
|
||||
|
||||
(test-end)
|
||||
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
|
||||
|
||||
(gexp->derivation "mongodb-test" test))
|
||||
|
||||
(define %test-mongodb
|
||||
(system-test
|
||||
(name "mongodb")
|
||||
(description "Connect to a running MONGODB server.")
|
||||
(value (run-mongodb-test))))
|
||||
|
||||
Reference in New Issue
Block a user