X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-bsd-sockets%2Ftests.lisp;h=ba41bc5fb354e892e29dcf9725a0a119b736ead2;hb=4bc6b918bb99e8dcd17bbe6479a06e52b2d04a6c;hp=22512f5fa6f2706cc5e7eb860d1c3b8097740b45;hpb=10d2c05ea44ca0837091434fe2223c0c31687615;p=sbcl.git diff --git a/contrib/sb-bsd-sockets/tests.lisp b/contrib/sb-bsd-sockets/tests.lisp index 22512f5..ba41bc5 100644 --- a/contrib/sb-bsd-sockets/tests.lisp +++ b/contrib/sb-bsd-sockets/tests.lisp @@ -1,17 +1,5 @@ (defpackage "SB-BSD-SOCKETS-TEST" - (:use "CL" "SB-BSD-SOCKETS" "RT")) - -#|| - -

Tests

- -There should be at least one test for pretty much everything you can do -with the package. In some places I've been more diligent than others; more -tests gratefully accepted. - -Tests are in the file tests.lisp and also make good examples. - -||# + (:use "CL" "SB-BSD-SOCKETS" "SB-RT")) (in-package :sb-bsd-sockets-test) @@ -102,8 +90,13 @@ Tests are in the file tests.lisp and also make good examples. ((or (>= i (length buffer)) (not c) (eq c eof)) i) (setf (elt buffer i) c)))) -;;; these require that the echo services are turned on in inetd +#+internet-available +(deftest name-service-return-type + (vectorp (host-ent-address (get-host-by-address #(127 0 0 1)))) + t) +;;; these require that the echo services are turned on in inetd +#+internet-available (deftest simple-tcp-client (let ((s (make-instance 'inet-socket :type :stream :protocol :tcp)) (data (make-string 200))) @@ -115,6 +108,19 @@ Tests are in the file tests.lisp and also make good examples. (> (length data) 0)))) t) +#+internet-available +(deftest sockaddr-return-type + (let ((s (make-instance 'inet-socket :type :stream :protocol :tcp))) + (unwind-protect + (progn + (socket-connect s #(127 0 0 1) 7) + (multiple-value-bind (host port) (socket-peername s) + (and (vectorp host) + (numberp port)))) + (socket-close s))) + t) + +#+internet-available (deftest simple-udp-client (let ((s (make-instance 'inet-socket :type :datagram :protocol (get-protocol-by-name "udp"))) (data (make-string 200))) @@ -127,32 +133,48 @@ Tests are in the file tests.lisp and also make good examples. (> (length data) 0)))) t) -#|| -

Unix-domain sockets

- -A fairly rudimentary test that connects to the syslog socket and sends a -message. Priority 7 is kern.debug; you'll probably want to look at -/etc/syslog.conf or local equivalent to find out where the message ended up -||# - -(deftest simple-unix-client - (let ((s (make-instance 'unix-socket :type :datagram))) - (format t "~A~%" s) - (socket-connect s "/dev/log") - (let ((stream (socket-make-stream s :input t :output t :buffering :none))) - (format stream - "<7>bsd-sockets: Don't panic. We're testing unix-domain client code; this message can safely be ignored") - t)) - t) - - -;;; these require that the internet (or bits of it, atleast) is available - +;;; A fairly rudimentary test that connects to the syslog socket and +;;; sends a message. Priority 7 is kern.debug; you'll probably want +;;; to look at /etc/syslog.conf or local equivalent to find out where +;;; the message ended up + +(deftest simple-local-client + (progn + ;; SunOS (Solaris) and Darwin systems don't have a socket at + ;; /dev/log. We might also be building in a chroot or + ;; something, so don't fail this test just because the file is + ;; unavailable, or if it's a symlink to some weird character + ;; device. + (when (and (probe-file "/dev/log") + (sb-posix:s-issock + (sb-posix::stat-mode (sb-posix:stat "/dev/log")))) + (let ((s (make-instance 'local-socket :type :datagram))) + (format t "Connecting ~A... " s) + (finish-output) + (handler-case + (socket-connect s "/dev/log") + (sb-bsd-sockets::socket-error () + (setq s (make-instance 'local-socket :type :stream)) + (format t "failed~%Retrying with ~A... " s) + (finish-output) + (socket-connect s "/dev/log"))) + (format t "ok.~%") + (let ((stream (socket-make-stream s :input t :output t :buffering :none))) + (format stream + "<7>bsd-sockets: Don't panic. We're testing local-domain client code; this message can safely be ignored")))) + t) + t) + + +;;; these require that the internet (or bits of it, at least) is available + +#+internet-available (deftest get-host-by-name (equalp (car (host-ent-addresses (get-host-by-name "a.root-servers.net"))) #(198 41 0 4)) t) +#+internet-available (deftest get-host-by-address (host-ent-name (get-host-by-address #(198 41 0 4))) "a.root-servers.net") @@ -172,6 +194,7 @@ message. Priority 7 is kern.debug; you'll probably want to look at (format stream "~A HTTP/1.0~%~%" request)) s)) +#+internet-available (deftest simple-http-client-1 (handler-case (let ((s (http-stream "ww.telent.net" 80 "HEAD /"))) @@ -185,6 +208,7 @@ message. Priority 7 is kern.debug; you'll probably want to look at t) +#+internet-available (deftest sockopt-receive-buffer ;; on Linux x86, the receive buffer size appears to be doubled in the ;; kernel: we set a size of x and then getsockopt() returns 2x.