AtlatestRepositorysigil-websocket

sigil-websocket / tree / testtest-websocket.sgl

1(import (sigil test)
2 (sigil websocket frame))
3
4;; ============================================================
5;; Frame opcodes
6;; ============================================================
7
8(test-group "frame opcodes"
9 (test "opcode values"
10 (assert-equal #x0 opcode-continuation)
11 (assert-equal #x1 opcode-text)
12 (assert-equal #x2 opcode-binary)
13 (assert-equal #x8 opcode-close)
14 (assert-equal #x9 opcode-ping)
15 (assert-equal #xA opcode-pong))
17 (test "opcode-control? identifies control frames"
18 (assert-false (opcode-control? opcode-text))
19 (assert-false (opcode-control? opcode-binary))
20 (assert-true (opcode-control? opcode-close))
21 (assert-true (opcode-control? opcode-ping))
22 (assert-true (opcode-control? opcode-pong))))
24;; ============================================================
25;; Frame encoding
26;; ============================================================
28(test-group "frame encoding"
29 (test "encode-text-frame produces bytevector"
30 (let ((frame (encode-text-frame "hello")))
31 (assert-true (bytevector? frame))
32 (assert-true (> (bytevector-length frame) 5))))
34 (test "encode-ping-frame produces bytevector"
35 (let ((frame (encode-ping-frame)))
36 (assert-true (bytevector? frame))))
38 (test "encode-close-frame produces bytevector"
39 (let ((frame (encode-close-frame)))
40 (assert-true (bytevector? frame)))))
42;; ============================================================
43;; Frame encode/decode roundtrip
44;; ============================================================
46(test-group "frame roundtrip"
47 (test "decode from encode-text-frame"
48 ;; encode-text-frame generates a masked frame for client use
49 (let* ((encoded (encode-text-frame "hello"))
50 (result (decode-frame encoded)))
51 (assert-true (frame-decode-result? result))
52 (let ((frame (frame-decode-result-frame result)))
53 (when frame
54 (assert-equal opcode-text (ws-frame-opcode frame)))))))
56;; ============================================================
57;; Masking
58;; ============================================================
60(test-group "masking"
61 (test "generate-mask-key returns 4 bytes"
62 (let ((key (generate-mask-key)))
63 (assert-true (bytevector? key))
64 (assert-equal 4 (bytevector-length key))))
66 (test "apply-mask is reversible"
67 (let* ((key (generate-mask-key))
68 (data (make-bytevector 5))
69 (masked (apply-mask data key))
70 (unmasked (apply-mask masked key)))
71 (assert-equal data unmasked)))
73 (test "masking changes data"
74 (let* ((key (generate-mask-key))
75 (data (make-bytevector 16))
76 (masked (apply-mask data key)))
77 ;; Masked should differ (unless mask key is all zeros, extremely unlikely)
78 (assert-false (equal? data masked)))))
80(run-tests)