aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Albinus2025-07-24 18:48:52 +0200
committerMichael Albinus2025-07-24 18:48:52 +0200
commitfdb7397b01e2f471778f8437bfdc4f55c3d3ea97 (patch)
treef9efdeb3258474a87caf413cd702a794f8f3a16f
parentec96ea30ba8911c34a664d8d9989d9a64380e073 (diff)
parent5cce567f20098fafa809fdefc468f493f95921fc (diff)
downloademacs-fdb7397b01e2f471778f8437bfdc4f55c3d3ea97.tar.gz
emacs-fdb7397b01e2f471778f8437bfdc4f55c3d3ea97.zip
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
-rw-r--r--test/lisp/net/network-stream-tests.el473
1 files changed, 134 insertions, 339 deletions
diff --git a/test/lisp/net/network-stream-tests.el b/test/lisp/net/network-stream-tests.el
index 41ca0264907..8a4e53287bf 100644
--- a/test/lisp/net/network-stream-tests.el
+++ b/test/lisp/net/network-stream-tests.el
@@ -275,394 +275,189 @@
275 (throw 'server (cons proc port)))) 275 (throw 'server (cons proc port))))
276 (delete-process proc))))) 276 (delete-process proc)))))
277 277
278(ert-deftest connect-to-tls-ipv4-wait () 278(defmacro with-tls-params (func &optional proc-parms proc-negotiate &rest server-parms)
279 (skip-unless (executable-find "gnutls-serv")) 279 "Call TLS FUNC with extra parameters PROC-PARMS.
280 (skip-unless (gnutls-available-p)) 280Call PROC-NEGOTIATE once the connection is up. SERVER-PARMS are the
281 (let* ((s (make-tls-server)) 281additional parameters to use to start the listening TLS server."
282 (server (car s)) 282 (let (parms)
283 (port (cdr s)) 283 (cond ((eq func 'make-network-process)
284 proc status) 284 (setq parms
285 (unwind-protect 285 '(:name "bar"
286 (progn 286 :buffer (generate-new-buffer "*foo*")
287 (setq proc (make-network-process 287 :service port)))
288 :name "bar" 288 ((eq func 'open-network-stream)
289 :buffer (generate-new-buffer "*foo*") 289 (setq parms
290 :host "localhost" 290 '("bar"
291 :service port)) 291 (generate-new-buffer "*foo*")
292 (should proc) 292 "localhost"
293 (gnutls-negotiate :process proc 293 port)))
294 :type 'gnutls-x509pki 294 ((eq func 'open-gnutls-stream)
295 :hostname "localhost")) 295 (setq parms
296 (if (process-live-p server) (delete-process server))) 296 '("bar"
297 (setq status (gnutls-peer-status proc)) 297 (generate-new-buffer "*foo*")
298 (should (consp status)) 298 "localhost"
299 (delete-process proc) 299 port))
300 ;; open-gnutls-stream has a different calling convention from
301 ;; the other two, and we have to cater for the old api where
302 ;; nowait is not specified with a plist.
303 (when proc-parms
304 (setq proc-parms (list proc-parms)))))
305 `(let* ((s (make-tls-server ',server-parms))
306 (server (car s))
307 (port (cdr s))
308 proc status)
309 (unwind-protect
310 (progn
311 (setq proc (apply #',func ,@parms (list ,@proc-parms)))
312 (should proc)
313 ,proc-negotiate
314 (skip-when (eq (process-status proc) 'connect)))
315 (if (process-live-p server) (delete-process server)))
316 (setq status (gnutls-peer-status proc))
317 (should (consp status))
318 (delete-process proc)
300 ;; This sleep-for is needed for the native MS-Windows build. If 319 ;; This sleep-for is needed for the native MS-Windows build. If
301 ;; it is removed, the next test mysteriously fails because the 320 ;; it is removed, the next test mysteriously fails because the
302 ;; initial part of the echo is not received. 321 ;; initial part of the echo is not received.
303 (sleep-for 0.1) 322 (sleep-for 0.1)
304 (let ((issuer (plist-get (plist-get status :certificate) :issuer))) 323 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
305 (should (stringp issuer)) 324 (should (stringp issuer))
306 (setq issuer (split-string issuer ",")) 325 (setq issuer (split-string issuer ","))
307 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC"))))) 326 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC"))))))
327
328(ert-deftest connect-to-tls-ipv4-wait ()
329 (skip-unless (executable-find "gnutls-serv"))
330 (skip-unless (gnutls-available-p))
331 (with-tls-params
332 make-network-process
333 (:host "localhost")
334 (gnutls-negotiate :process proc
335 :type 'gnutls-x509pki
336 :hostname "localhost")))
308 337
309(ert-deftest connect-to-tls-ipv4-nowait () 338(ert-deftest connect-to-tls-ipv4-nowait ()
310 (skip-unless (executable-find "gnutls-serv")) 339 (skip-unless (executable-find "gnutls-serv"))
311 (skip-unless (gnutls-available-p)) 340 (skip-unless (gnutls-available-p))
312 (let* ((s (make-tls-server)) 341 (let ((times 0)
313 (server (car s)) 342 (network-security-level 'low))
314 (port (cdr s)) 343 (with-tls-params
315 (times 0) 344 make-network-process
316 (network-security-level 'low) 345 (:nowait t
317 proc status) 346 :family 'ipv4
318 (unwind-protect 347 :tls-parameters
319 (progn 348 (cons 'gnutls-x509pki
320 (setq proc (make-network-process 349 (gnutls-boot-parameters
321 :name "bar" 350 :hostname "localhost"))
322 :buffer (generate-new-buffer "*foo*") 351 :host "localhost")
323 :nowait t 352 (while (and (eq (process-status proc) 'connect)
324 :family 'ipv4 353 (< (setq times (1+ times)) 10))
325 :tls-parameters 354 (sit-for 0.1)))))
326 (cons 'gnutls-x509pki
327 (gnutls-boot-parameters
328 :hostname "localhost"))
329 :host "localhost"
330 :service port))
331 (while (and (eq (process-status proc) 'connect)
332 (< (setq times (1+ times)) 10))
333 (sit-for 0.1))
334 (skip-when (eq (process-status proc) 'connect)))
335 (if (process-live-p server) (delete-process server)))
336 (setq status (gnutls-peer-status proc))
337 (should (consp status))
338 (delete-process proc)
339 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
340 (should (stringp issuer))
341 (setq issuer (split-string issuer ","))
342 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
343 355
344(ert-deftest connect-to-tls-ipv6-nowait () 356(ert-deftest connect-to-tls-ipv6-nowait ()
345 (skip-unless (executable-find "gnutls-serv")) 357 (skip-unless (executable-find "gnutls-serv"))
346 (skip-unless (gnutls-available-p)) 358 (skip-unless (gnutls-available-p))
347 (skip-when (eq system-type 'windows-nt)) 359 (skip-when (eq system-type 'windows-nt))
348 (skip-unless (featurep 'make-network-process '(:family ipv6))) 360 (skip-unless (featurep 'make-network-process '(:family ipv6)))
349 (let* ((s (make-tls-server)) 361 (let ((times 0)
350 (server (car s)) 362 (network-security-level 'low))
351 (port (cdr s)) 363 (with-tls-params
352 (times 0) 364 make-network-process
353 (network-security-level 'low) 365 (:family 'ipv6
354 proc status) 366 :nowait t
355 (unwind-protect 367 :tls-parameters
356 (progn 368 (cons 'gnutls-x509pki
357 (setq proc (make-network-process 369 (gnutls-boot-parameters
358 :name "bar" 370 :hostname "localhost"))
359 :buffer (generate-new-buffer "*foo*") 371 :host "::1")
360 :family 'ipv6 372 (while (and (eq (process-status proc) 'connect)
361 :nowait t 373 (< (setq times (1+ times)) 10))
362 :tls-parameters 374 (sit-for 0.1)))))
363 (cons 'gnutls-x509pki
364 (gnutls-boot-parameters
365 :hostname "localhost"))
366 :host "::1"
367 :service port))
368 (should proc)
369 (while (and (eq (process-status proc) 'connect)
370 (< (setq times (1+ times)) 10))
371 (sit-for 0.1))
372 (skip-when (eq (process-status proc) 'connect)))
373 (if (process-live-p server) (delete-process server)))
374 (setq status (gnutls-peer-status proc))
375 (should (consp status))
376 (delete-process proc)
377 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
378 (should (stringp issuer))
379 (setq issuer (split-string issuer ","))
380 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
381 375
382(ert-deftest open-network-stream-tls-wait () 376(ert-deftest open-network-stream-tls-wait ()
383 (skip-unless (executable-find "gnutls-serv")) 377 (skip-unless (executable-find "gnutls-serv"))
384 (skip-unless (gnutls-available-p)) 378 (skip-unless (gnutls-available-p))
385 (let* ((s (make-tls-server)) 379 (let ((network-security-level 'low))
386 (server (car s)) 380 (with-tls-params
387 (port (cdr s)) 381 open-network-stream
388 (network-security-level 'low) 382 (:type 'tls
389 proc status) 383 :nowait nil))))
390 (unwind-protect
391 (progn
392 (setq proc (open-network-stream
393 "bar"
394 (generate-new-buffer "*foo*")
395 "localhost"
396 port
397 :type 'tls
398 :nowait nil))
399 (should proc)
400 (skip-when (eq (process-status proc) 'connect)))
401 (if (process-live-p server) (delete-process server)))
402 (setq status (gnutls-peer-status proc))
403 (should (consp status))
404 (delete-process proc)
405 ;; This sleep-for is needed for the native MS-Windows build. If
406 ;; it is removed, the next test mysteriously fails because the
407 ;; initial part of the echo is not received.
408 (sleep-for 0.1)
409 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
410 (should (stringp issuer))
411 (setq issuer (split-string issuer ","))
412 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
413 384
414(ert-deftest open-network-stream-tls-nowait () 385(ert-deftest open-network-stream-tls-nowait ()
415 (skip-unless (executable-find "gnutls-serv")) 386 (skip-unless (executable-find "gnutls-serv"))
416 (skip-unless (gnutls-available-p)) 387 (skip-unless (gnutls-available-p))
417 (let* ((s (make-tls-server)) 388 (let ((network-security-level 'low)
418 (server (car s)) 389 (times 0))
419 (port (cdr s)) 390 (with-tls-params
420 (times 0) 391 open-network-stream
421 (network-security-level 'low) 392 (:type 'tls
422 proc status) 393 :nowait t)
423 (unwind-protect 394 (progn (while (and (eq (process-status proc) 'connect)
424 (progn 395 (< (setq times (1+ times)) 10))
425 (setq proc (open-network-stream 396 (sit-for 0.1))
426 "bar" 397 (skip-when (eq (process-status proc) 'connect))))))
427 (generate-new-buffer "*foo*")
428 "localhost"
429 port
430 :type 'tls
431 :nowait t))
432 (should proc)
433 (while (and (eq (process-status proc) 'connect)
434 (< (setq times (1+ times)) 10))
435 (sit-for 0.1))
436 (skip-when (eq (process-status proc) 'connect)))
437 (if (process-live-p server) (delete-process server)))
438 (setq status (gnutls-peer-status proc))
439 (should (consp status))
440 (delete-process proc)
441 ;; This sleep-for is needed for the native MS-Windows build. If
442 ;; it is removed, the next test mysteriously fails because the
443 ;; initial part of the echo is not received.
444 (sleep-for 0.1)
445 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
446 (should (stringp issuer))
447 (setq issuer (split-string issuer ","))
448 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
449 398
450(ert-deftest open-network-stream-tls () 399(ert-deftest open-network-stream-tls ()
451 (skip-unless (executable-find "gnutls-serv")) 400 (skip-unless (executable-find "gnutls-serv"))
452 (skip-unless (gnutls-available-p)) 401 (skip-unless (gnutls-available-p))
453 (let* ((s (make-tls-server)) 402 (let ((network-security-level 'low))
454 (server (car s)) 403 (with-tls-params
455 (port (cdr s)) 404 open-network-stream
456 (network-security-level 'low) 405 (:type 'tls))))
457 proc status)
458 (unwind-protect
459 (progn
460 (setq proc (open-network-stream
461 "bar"
462 (generate-new-buffer "*foo*")
463 "localhost"
464 port
465 :type 'tls))
466 (should proc)
467 (skip-when (eq (process-status proc) 'connect)))
468 (if (process-live-p server) (delete-process server)))
469 (setq status (gnutls-peer-status proc))
470 (should (consp status))
471 (delete-process proc)
472 ;; This sleep-for is needed for the native MS-Windows build. If
473 ;; it is removed, the next test mysteriously fails because the
474 ;; initial part of the echo is not received.
475 (sleep-for 0.1)
476 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
477 (should (stringp issuer))
478 (setq issuer (split-string issuer ","))
479 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
480 406
481(ert-deftest open-network-stream-tls-nocert () 407(ert-deftest open-network-stream-tls-nocert ()
482 (skip-unless (executable-find "gnutls-serv")) 408 (skip-unless (executable-find "gnutls-serv"))
483 (skip-unless (gnutls-available-p)) 409 (skip-unless (gnutls-available-p))
484 (let* ((s (make-tls-server)) 410 (let ((network-security-level 'low))
485 (server (car s)) 411 (with-tls-params
486 (port (cdr s)) 412 open-network-stream
487 (network-security-level 'low) 413 (:type 'tls
488 proc status) 414 :client-certificate nil))))
489 (unwind-protect
490 (progn
491 (setq proc (open-network-stream
492 "bar"
493 (generate-new-buffer "*foo*")
494 "localhost"
495 port
496 :type 'tls
497 :client-certificate nil))
498 (should proc)
499 (skip-when (eq (process-status proc) 'connect)))
500 (if (process-live-p server) (delete-process server)))
501 (setq status (gnutls-peer-status proc))
502 (should (consp status))
503 (delete-process proc)
504 ;; This sleep-for is needed for the native MS-Windows build. If
505 ;; it is removed, the next test mysteriously fails because the
506 ;; initial part of the echo is not received.
507 (sleep-for 0.1)
508 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
509 (should (stringp issuer))
510 (setq issuer (split-string issuer ","))
511 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
512 415
513(ert-deftest open-gnutls-stream-new-api-default () 416(ert-deftest open-gnutls-stream-new-api-default ()
514 (skip-unless (executable-find "gnutls-serv")) 417 (skip-unless (executable-find "gnutls-serv"))
515 (skip-unless (gnutls-available-p)) 418 (skip-unless (gnutls-available-p))
516 (let* ((s (make-tls-server)) 419 (with-tls-params
517 (server (car s)) 420 open-gnutls-stream))
518 (port (cdr s))
519 proc status)
520 (unwind-protect
521 (progn
522 (setq proc (open-gnutls-stream
523 "bar"
524 (generate-new-buffer "*foo*")
525 "localhost"
526 port))
527 (should proc)
528 (skip-when (eq (process-status proc) 'connect)))
529 (if (process-live-p server) (delete-process server)))
530 (setq status (gnutls-peer-status proc))
531 (should (consp status))
532 (delete-process proc)
533 ;; This sleep-for is needed for the native MS-Windows build. If
534 ;; it is removed, the next test mysteriously fails because the
535 ;; initial part of the echo is not received.
536 (sleep-for 0.1)
537 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
538 (should (stringp issuer))
539 (setq issuer (split-string issuer ","))
540 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
541 421
542(ert-deftest open-gnutls-stream-new-api-wait () 422(ert-deftest open-gnutls-stream-new-api-wait ()
543 (skip-unless (executable-find "gnutls-serv")) 423 (skip-unless (executable-find "gnutls-serv"))
544 (skip-unless (gnutls-available-p)) 424 (skip-unless (gnutls-available-p))
545 (let* ((s (make-tls-server)) 425 (with-tls-params
546 (server (car s)) 426 open-gnutls-stream
547 (port (cdr s)) 427 (list :nowait nil)))
548 proc status)
549 (unwind-protect
550 (progn
551 (setq proc (open-gnutls-stream
552 "bar"
553 (generate-new-buffer "*foo*")
554 "localhost"
555 port
556 (list :nowait nil)))
557 (should proc)
558 (skip-when (eq (process-status proc) 'connect)))
559 (if (process-live-p server) (delete-process server)))
560 (setq status (gnutls-peer-status proc))
561 (should (consp status))
562 (delete-process proc)
563 ;; This sleep-for is needed for the native MS-Windows build. If
564 ;; it is removed, the next test mysteriously fails because the
565 ;; initial part of the echo is not received.
566 (sleep-for 0.1)
567 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
568 (should (stringp issuer))
569 (setq issuer (split-string issuer ","))
570 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
571 428
572(ert-deftest open-gnutls-stream-old-api-wait () 429(ert-deftest open-gnutls-stream-old-api-wait ()
573 (skip-unless (executable-find "gnutls-serv")) 430 (skip-unless (executable-find "gnutls-serv"))
574 (skip-unless (gnutls-available-p)) 431 (skip-unless (gnutls-available-p))
575 (let* ((s (make-tls-server)) 432 (let ((nowait nil)) ; Workaround Bug#47080
576 (server (car s)) 433 (with-tls-params
577 (port (cdr s)) 434 open-gnutls-stream
578 (nowait nil) ; Workaround Bug#47080 435 nowait)))
579 proc status)
580 (unwind-protect
581 (progn
582 (setq proc (open-gnutls-stream
583 "bar"
584 (generate-new-buffer "*foo*")
585 "localhost"
586 port
587 nowait))
588 (should proc)
589 (skip-when (eq (process-status proc) 'connect)))
590 (if (process-live-p server) (delete-process server)))
591 (setq status (gnutls-peer-status proc))
592 (should (consp status))
593 (delete-process proc)
594 ;; This sleep-for is needed for the native MS-Windows build. If
595 ;; it is removed, the next test mysteriously fails because the
596 ;; initial part of the echo is not received.
597 (sleep-for 0.1)
598 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
599 (should (stringp issuer))
600 (setq issuer (split-string issuer ","))
601 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
602 436
603(ert-deftest open-gnutls-stream-new-api-nowait () 437(ert-deftest open-gnutls-stream-new-api-nowait ()
604 (skip-unless (executable-find "gnutls-serv")) 438 (skip-unless (executable-find "gnutls-serv"))
605 (skip-unless (gnutls-available-p)) 439 (skip-unless (gnutls-available-p))
606 (let* ((s (make-tls-server)) 440 (let ((times 0)
607 (server (car s)) 441 (network-security-level 'low))
608 (port (cdr s)) 442 (with-tls-params
609 (times 0) 443 open-gnutls-stream
610 (network-security-level 'low) 444 (list :nowait t)
611 proc status) 445 (while (and (eq (process-status proc) 'connect)
612 (unwind-protect 446 (< (setq times (1+ times)) 10))
613 (progn 447 (sit-for 0.1)))))
614 (setq proc (open-gnutls-stream
615 "bar"
616 (generate-new-buffer "*foo*")
617 "localhost"
618 port
619 (list :nowait t)))
620 (should proc)
621 (while (and (eq (process-status proc) 'connect)
622 (< (setq times (1+ times)) 10))
623 (sit-for 0.1))
624 (skip-when (eq (process-status proc) 'connect)))
625 (if (process-live-p server) (delete-process server)))
626 (setq status (gnutls-peer-status proc))
627 (should (consp status))
628 (delete-process proc)
629 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
630 (should (stringp issuer))
631 (setq issuer (split-string issuer ","))
632 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
633 448
634(ert-deftest open-gnutls-stream-old-api-nowait () 449(ert-deftest open-gnutls-stream-old-api-nowait ()
635 (skip-unless (executable-find "gnutls-serv")) 450 (skip-unless (executable-find "gnutls-serv"))
636 (skip-unless (gnutls-available-p)) 451 (skip-unless (gnutls-available-p))
637 (let* ((s (make-tls-server)) 452 (let ((times 0)
638 (server (car s)) 453 (network-security-level 'low)
639 (port (cdr s)) 454 (nowait t))
640 (times 0) 455 (with-tls-params
641 (network-security-level 'low) 456 open-gnutls-stream
642 (nowait t) 457 nowait
643 proc status) 458 (while (and (eq (process-status proc) 'connect)
644 (unwind-protect 459 (< (setq times (1+ times)) 10))
645 (progn 460 (sit-for 0.1)))))
646 (setq proc (open-gnutls-stream
647 "bar"
648 (generate-new-buffer "*foo*")
649 "localhost"
650 port
651 nowait))
652 (should proc)
653 (setq times 0)
654 (while (and (eq (process-status proc) 'connect)
655 (< (setq times (1+ times)) 10))
656 (sit-for 0.1))
657 (skip-when (eq (process-status proc) 'connect)))
658 (if (process-live-p server) (delete-process server)))
659 (setq status (gnutls-peer-status proc))
660 (should (consp status))
661 (delete-process proc)
662 (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
663 (should (stringp issuer))
664 (setq issuer (split-string issuer ","))
665 (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
666 461
667(ert-deftest open-gnutls-stream-new-api-errors () 462(ert-deftest open-gnutls-stream-new-api-errors ()
668 (skip-unless (gnutls-available-p)) 463 (skip-unless (gnutls-available-p))