aboutsummaryrefslogtreecommitdiff
blob: 1c6d1e9e579459ba684c4e563bc62874a4a990f9 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (test-uuid)
  #:use-module (gnu system uuid)
  #:use-module (srfi srfi-64)
  #:use-module (rnrs bytevectors))

(test-begin "uuid")

(test-equal "uuid->string"
  "c5307e6b-d1ba-499d-89c5-cb0b143577c4"
  (uuid->string
   #vu8(197 48 126 107 209 186 73 157 137 197 203 11 20 53 119 196)))

(test-equal "string->uuid"
  '(16 "4dab5feb-d176-45de-b287-9b0a6e4c01cb")
  (let ((uuid (string->uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
    (list (bytevector-length uuid) (uuid->string uuid))))

(test-assert "uuid"
  (let ((str "4dab5feb-d176-45de-b287-9b0a6e4c01cb"))
    (bytevector=? (uuid-bytevector
                   (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb"))
                  (string->uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb"))))

(test-assert "uuid, syntax error"
  (catch 'syntax-error
    (lambda ()
      (eval '(uuid "foobar") (current-module))
      #f)
    (lambda (key proc message location form . args)
      (and (eq? proc 'uuid)
           (string-contains message "invalid UUID")
           (equal? form '(uuid "foobar" 'dce))))))

(test-equal "uuid, ISO-9660, format preserved"
  "1970-01-01-17-14-42-99"
  (uuid->string (uuid "1970-01-01-17-14-42-99" 'iso9660)))

(test-equal "uuid, FAT32, format preserved"
  "1234-ABCD"
  (uuid->string (uuid "1234-abcd" 'fat32)))

(test-equal "uuid, FAT32, leading zeros preserved"
  "00CA-050E"                                    ;<https://bugs.gnu.org/35582>
  (uuid->string (uuid "00CA-050E" 'fat32)))

(test-assert "uuid, dynamic value"
  (let* ((good "4dab5feb-d176-45de-b287-9b0a6e4c01cb")
         (bad  (string-drop good 3)))
    (and (uuid? (uuid good))
         (string=? good (uuid->string (uuid good)))
         (not (uuid bad)))))

(test-assert "uuid=?"
  (and (uuid=? (uuid-bytevector (uuid "1234-abcd" 'fat32))
               (uuid "1234-abcd" 'fat32))
       (uuid=? (uuid "1234-abcd" 'fat32)
               (uuid "1234-abcd" 'fat))))

(test-end)
ent ports, asynchronous TCP/UDP sockets, asynchronous DNS resolution, asynchronous file system operations, and threading primitives.") ;; A few files fall under other non-copyleft licenses; see 'LICENSE' for ;; details. Documentation is CC-BY 4.0 as of 1.12.0; see 'LICENSE-docs'. (license (list license:expat license:cc-by4.0)))) (define-public libuv-for-node ;; When upgrading Node, also upgrade this. Get the version from ;; https://github.com/nodejs/node/blob/master/deps/uv/include/uv/version.h (package (inherit libuv) (name "libuv") (version "1.42.0") (source (origin (method url-fetch) (uri (string-append "https://dist.libuv.org/dist/v" version "/libuv-v" version ".tar.gz")) (sha256 (base32 "0wpb9pz3r8nksnrf4zbixj2kk9whr7abi45ydrwyv2js2ljrc4j3")))) (properties '((hidden? . #t))))) (define-public libuv-for-r-httpuv ;; When upgrading r-httpuv, also upgrade this. (package (inherit libuv) (name "libuv") (version "1.43.0") (source (origin (method url-fetch) (uri (string-append "https://dist.libuv.org/dist/v" version "/libuv-v" version ".tar.gz")) (sha256 (base32 "194kwq3jfj9s628kzkchdca534rikjw0xiyas0cjbphqmsvjpmwh")))) (properties '((hidden? . #t))))) (define-public libuv-julia (let ((commit "e6f0e4900e195c8352f821abe2b3cffc3089547b") (revision "4")) ;; When upgrading Julia, also upgrade this. Get the commit from ;; https://github.com/JuliaLang/julia/blob/v1.8.2/deps/libuv.version (package (inherit libuv) (name "libuv-julia") (version (git-version "2.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/JuliaLang/libuv") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0ib2cprvbyviwrzm0fw6dqvlbm9akf2kj3vjzp82q3gii74cv3c9")))) (arguments '(#:configure-flags '("--with-pic") #:tests? #f)) (home-page "https://github.com/JuliaLang/libuv") (properties '((hidden? . #t)))))) (define-public libuv-for-luv ;; When upgrading make-lua-luv, also upgrade this. Get the version from ;; https://github.com/luvit/luv/blob/master/CMakeLists.txt (package (inherit libuv) (name "libuv") (version "1.43.0") (source (origin (method url-fetch) (uri (string-append "https://dist.libuv.org/dist/v" version "/libuv-v" version ".tar.gz")) (sha256 (base32 "194kwq3jfj9s628kzkchdca534rikjw0xiyas0cjbphqmsvjpmwh")))) (properties '((hidden? . #t))))) (define-public perl-anyevent (package (name "perl-anyevent") (version "7.17") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/M/ML/MLEHMANN/" "AnyEvent-" version ".tar.gz")) (sha256 (base32 "11drlj8r02czhjgzkb39axnr8zzyp506r043xfmf93q9kilfmgjh")))) (build-system perl-build-system) (native-inputs (list perl-canary-stability)) (propagated-inputs (list perl-async-interrupt perl-ev perl-guard perl-json perl-json-xs perl-net-ssleay perl-task-weaken)) (home-page "https://metacpan.org/release/AnyEvent") (synopsis "API for I/O, timer, signal, child process and completion events") (description "This module allows using a variety of events without forcing module authors to pick a specific event loop, and without noticeable overhead. Currently supported event loops are EV, Event, Glib/Gtk2, Tk, Qt, @code{Event::Lib}, Irssi, @code{IO::Async} and POE (and thus also WxWidgets and Prima). It also comes with a very fast Pure Perl event loop that does not rely on XS.") (license license:perl-license))) (define-public perl-ev (package (name "perl-ev") (version "4.31") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/M/ML/MLEHMANN/EV-" version ".tar.gz")) (sha256 (base32 "1jxlhnvrqim39977zwavjrcbdf9bifb46pwaxvm0s8klq121kjwb")) (modules '((guix build utils))) (snippet '(begin ;; Drop bundled libev. (delete-file-recursively "libev") #t)))) (build-system perl-build-system) (arguments '(#:phases (modify-phases %standard-phases (add-after 'unpack 'unpack-libev ;; This package requires the libev *sources* in order ;; to build. Unpack system libev here... (lambda* (#:key inputs #:allow-other-keys) (mkdir "./libev") (invoke "tar" "-xf" (assoc-ref inputs "libev-source") "-C" "./libev" "--strip-components=1")))))) (native-inputs `(("libev-source" ,(package-source libev)) ("perl-canary-stability" ,perl-canary-stability))) (propagated-inputs (list perl-common-sense)) (home-page "https://metacpan.org/release/EV") (synopsis "Perl interface to libev") (description "This module provides an interface to @code{libev}, a high performance full-featured event loop. It can be used through the @code{AnyEvent} module and still be faster than other event loops currently supported in Perl.") (license license:perl-license))) (define-public perl-rpc-epc-service (package (name "perl-rpc-epc-service") (version "0.0.11") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/K/KI/KIWANAMI/RPC-EPC-Service-" "v" version ".tar.gz")) (sha256 (base32 "1qwb284z4ig3xzy21m1b3w8bkb8k6l2ij6cjz93znn2j6qs42pwp")))) (build-system perl-build-system) (native-inputs (list perl-module-build perl-test-simple)) (propagated-inputs (list perl-anyevent perl-data-sexpression)) (arguments ;; Tests seem to fail because they try to start a server. `(#:tests? #f)) (home-page "https://metacpan.org/release/RPC-EPC-Service") (synopsis "Asynchronous remote procedure stack") (description "RPC::EPC::Service enables to connect the other process with the S-expression protocol, like the Swank protocol of the SLIME.") (license license:perl-license)))