tests: Run the tests for the Python bindings of GPGME.
authorJustus Winter <justus@g10code.com>
Thu, 9 Mar 2017 13:33:02 +0000 (14:33 +0100)
committerJustus Winter <justus@g10code.com>
Thu, 9 Mar 2017 13:33:02 +0000 (14:33 +0100)
* tests/gpgme/gpgme-defs.scm (create-file): Write lines.
(create-gpgmehome): Extend function to create the right environment
for the Python tests.
* tests/gpgme/run-tests.scm: Make an environment cache for the Python
tests and enable them.
* tests/gpgme/wrap.scm: Do not hardcode the path of the Python
interpreter.

Signed-off-by: Justus Winter <justus@g10code.com>
tests/gpgme/gpgme-defs.scm
tests/gpgme/run-tests.scm
tests/gpgme/wrap.scm

index 7a7166c..12e033c 100644 (file)
 ;; The tests expect the pinentry to return the passphrase "abc".
 (setenv "PINENTRY_USER_DATA" "abc" #t)
 
-(define (create-file name content)
+(define (create-file name . lines)
   (letfd ((fd (open name (logior O_WRONLY O_CREAT O_BINARY) #o600)))
-    (display content (fdopen fd "wb"))))
+    (let ((port (fdopen fd "wb")))
+      (for-each (lambda (line) (display line port) (newline port)) lines))))
 
 (define (create-gpgmehome . path)
-  (create-file "gpg.conf" "no-force-v3-sigs\n")
+  ;; Support for various environments.
+  (define mode
+    (cond
+     ((equal? path '("lang" "python" "tests"))
+      (set! path '("tests" "gpg")) ;; Mostly uses files from tests/gpg.
+      'python)
+     (else
+      'gpg)))
+
+  (create-file
+   "gpg.conf"
+   "no-force-v3-sigs"
+   (string-append "agent-program " (tool 'gpg-agent) "|--debug-quick-random\n"))
   (create-file
    "gpg-agent.conf"
    (string-append "pinentry-program " (tool 'pinentry)))
      (call-check `(,@GPG --yes --import ,(apply in-gpgme-srcdir
                                                `(,@path ,file)))))
    (list "pubdemo.asc" "secdemo.asc"))
+
+  (when (equal? mode 'python)
+       (log "Importing extra keys for Python tests")
+       (for-each
+        (lambda (file)
+          (call-check `(,@GPG --yes --import
+                              ,(apply in-gpgme-srcdir
+                                      `("lang" "python" "tests" ,file)))))
+        (list "encrypt-only.asc" "sign-only.asc"))
+
+       (log "Marking key as trusted")
+       (pipe:do
+        (pipe:echo "A0FF4590BB6122EDEF6E3C542D727CC768697734:6:\n")
+        (pipe:spawn `(,(tool 'gpg) --import-ownertrust))))
+
   (stop-agent))
 
 ;; Initialize the test environment, install appropriate configuration
index 4d3a7e6..72de495 100644 (file)
                   run-tests-parallel
                   run-tests-sequential))
        (setup-c (make-environment-cache
-                (test::scm #f "setup.scm" (in-srcdir "setup.scm") "--" "tests" "gpg")))
+                (test::scm #f "setup.scm (tests/gpg)" (in-srcdir "setup.scm")
+                           "--" "tests" "gpg")))
+       (setup-py (make-environment-cache
+                 (test::scm #f "setup.scm (lang/python/tests)" (in-srcdir "setup.scm")
+                            "--" "lang" "python" "tests")))
        (tests (filter (lambda (arg) (not (string-prefix? arg "--"))) *args*)))
   (runner
    (apply
@@ -67,6 +71,5 @@
                             -- ,@(:path cmpnts))))
                  (if (null? tests) (all-tests makefile (:key cmpnts)) tests))))
         `((("tests" "gpg") "c_tests" ,setup-c)
-          ;; XXX: Not yet.
-          ;; (("lang" "python" "tests") "py_tests")
+          (("lang" "python" "tests") "py_tests" ,setup-py)
           (("lang" "qt" "tests") "TESTS" ,setup-c))))))
index e8f2b1f..d338892 100644 (file)
@@ -29,6 +29,9 @@
 (setenv "top_srcdir" gpgme-srcdir #t)
 (setenv "srcdir" (path-join gpgme-srcdir "tests" "gpg") #t)
 
+(define python (catch #f
+                     (path-expand "python" (string-split (getenv "PATH") *pathsep*))))
+
 (define (run what)
   (if (string-suffix? (car what) ".py")
       (begin
                                   (getenv "LD_LIBRARY_PATH"))
                    (path-join gpgme-builddir "src/.libs"))
                #t)
-       (call-with-fds
-        `("/usr/bin/python"
-          ,(in-gpgme-srcdir "lang" "python" "tests" "run-tests.py")
-          --quiet
-          --interpreters=/usr/bin/python
-          --builddir ,(path-join gpgme-builddir "lang" "python" "tests")
-          ,@what)
-        STDIN_FILENO STDOUT_FILENO STDERR_FILENO))
-      (if #f 77 (call-with-fds what STDIN_FILENO STDOUT_FILENO STDERR_FILENO))))
+       (if python
+           (call-with-fds
+            `(,python
+              ,(in-gpgme-srcdir "lang" "python" "tests" "run-tests.py")
+              --quiet
+              ,(string-append "--interpreters=" python)
+              --builddir ,(path-join gpgme-builddir "lang" "python" "tests")
+              ,@what)
+            STDIN_FILENO STDOUT_FILENO STDERR_FILENO)
+           77))
+      (call-with-fds what STDIN_FILENO STDOUT_FILENO STDERR_FILENO)))
 
 (let ((name (basename (car executable))))
   (cond