Test http handler

Evgeny PisemskySat Jul 19 11:45:01+0300 2025

9fca60a

Test http handler

tests/pastebin-http unknown status 1

1+
#!/usr/bin/env sh
2+
exec guile -s "$0" "$@"
3+
!#
4+
5+
;;; SPDX-FileCopyrightText: 2025 Evgeny Pisemsky <mail@pisemsky.site>
6+
;;;
7+
;;; SPDX-License-Identifier: GPL-3.0-only
8+
9+
(use-modules (rnrs bytevectors)
10+
             (srfi srfi-64)
11+
             (web uri)
12+
             (web request)
13+
             (web response)
14+
             (pastebin httpserver))
15+
16+
(test-begin "pastebin-http")
17+
18+
(let* ((dir (tmpnam))
19+
       (handler (make-pastebin-handler dir)))
20+
  (mkdir dir)
21+
22+
  (let ((request (build-request
23+
                  (string->uri "http://localhost:8080/post")
24+
                  #:method 'POST
25+
                  #:headers '((content-type . (multipart/form-data (boundary . "------------------------s1eMqEtEr3zEuOSkwyAiLi"))))
26+
                  #:port (%make-void-port "w+"))))
27+
    (define-values (resp body)
28+
      (handler request (string->utf8 "--------------------------s1eMqEtEr3zEuOSkwyAiLi\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nPaste 0\r\n--------------------------s1eMqEtEr3zEuOSkwyAiLi\r\nContent-Disposition: form-data; name=\"showUrl\"\r\n\r\n1\r\n--------------------------s1eMqEtEr3zEuOSkwyAiLi--")))
29+
    (test-equal 200 (response-code resp))
30+
    (test-equal "http://localhost:8080/raw/00000\r\n" (call-with-output-string body)))
31+
32+
  (let ((request (build-request (string->uri "http://localhost:8080/raw/00000"))))
33+
    (define-values (resp body)
34+
      (handler request ""))
35+
    (test-equal 200 (response-code resp))
36+
    (test-equal "Paste 0" (call-with-output-string body)))
37+
38+
  (let ((request (build-request
39+
                  (string->uri "http://localhost:8080/post")
40+
                  #:method 'POST
41+
                  #:headers '((content-type . (multipart/form-data (boundary . "------------------------WemU5jJZTowf8qPbKbZ6qE"))))
42+
                  #:port (%make-void-port "w+"))))
43+
    (define-values (resp body)
44+
      (handler request (string->utf8 "--------------------------WemU5jJZTowf8qPbKbZ6qE\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nPaste 1\r\n--------------------------WemU5jJZTowf8qPbKbZ6qE--")))
45+
    (test-equal 303 (response-code resp))
46+
    (test-equal "/" (uri-path (assq-ref (response-headers resp) 'location))))
47+
48+
  (let ((request (build-request (string->uri "http://localhost:8080/raw/00001"))))
49+
    (define-values (resp body)
50+
      (handler request ""))
51+
    (test-equal 200 (response-code resp))
52+
    (test-equal "Paste 1" (call-with-output-string body)))
53+
54+
  (let* ((uri (string->uri "http://localhost:8080/"))
55+
         (request (build-request uri)))
56+
    (define-values (resp body)
57+
      (handler request ""))
58+
    (test-equal 200 (response-code resp))))
59+
60+
(test-end "pastebin-http")
61+
62+
;; Local Variables:
63+
;; mode: scheme
64+
;; End: