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: |