aboutsummaryrefslogtreecommitdiff
path: root/tests/guile/cantius-test.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/guile/cantius-test.scm')
-rw-r--r--tests/guile/cantius-test.scm57
1 files changed, 55 insertions, 2 deletions
diff --git a/tests/guile/cantius-test.scm b/tests/guile/cantius-test.scm
index 04176f9..0e4b2ca 100644
--- a/tests/guile/cantius-test.scm
+++ b/tests/guile/cantius-test.scm
@@ -1,8 +1,9 @@
;;; SPDX-License-Identifier: CC0-1.0
;;;
-;;; Copyright (C) 2023 Wojtek Kosior <koszko@koszko.org>
+;;; Copyright (C) 2023, 2024 Wojtek Kosior <koszko@koszko.org>
-(use-modules ((srfi srfi-8) #:select (receive))
+(use-modules ((scheme base) #:select (bytevector-copy string->utf8))
+ ((srfi srfi-8) #:select (receive))
((srfi srfi-26) #:select (cut))
((srfi srfi-34) #:select (guard raise))
((ice-9 safe-r5rs) #:select (null-environment))
@@ -38,6 +39,7 @@
(make-thread thread-terminate! thread-yield!
thread-start!))
#:use-module ((ice-9 format) #:select (format))
+ #:use-module ((ice-9 textual-ports) #:select (get-string-all))
#:use-module (cantius))
(define sock-port
@@ -73,6 +75,17 @@
(values (build-response*)
"Google provides the best services in the world..."))
+ (define-endpoint %my-endset static-files
+ ("static" . file-path)
+ `((,%resource-root-path
+ . ,(dirname (search-path %load-path "cantius" ".scm")))
+ (,%default-headers
+ . ((content-type
+ . (text/formatted (charset . "Windows-1252"))))))
+ (call-with-input-file
+ (find-resource-file (string-join file-path "/"))
+ get-string-all))
+
(define server-sock
(socket PF_INET SOCK_STREAM 0))
@@ -164,6 +177,46 @@
(tu:test-assert (string-prefix? "Google provides" (cadr google-result))))
+ (tu:test-group "valid-static-resources"
+ (define valid-resource-result
+ (get "/static/cantius.scm"))
+
+ (tu:test-eqv 200 (rsp:response-code (car valid-resource-result)))
+
+ (tu:test-equal '(text/formatted (charset . "Windows-1252"))
+ (rsp:response-content-type (car valid-resource-result)))
+
+ (tu:test-assert (string-prefix? ";;; " (cadr valid-resource-result))))
+
+ (tu:test-group "illegal-static-resources"
+ (for-each (lambda (resource-path)
+ (define illegal-resource-result
+ (get resource-path))
+
+ (tu:test-eqv 403
+ (rsp:response-code (car illegal-resource-result)))
+
+ ;; Default handler for illegal resource accesses is expected to
+ ;; ignore the value of the `%default-headers` parameter.
+ (tu:test-equal '(text/plain (charset . "utf-8"))
+ (rsp:response-content-type
+ (car illegal-resource-result))))
+
+ '("/static/../../../../../etc/passwd"
+ "/static/stylesheets/."
+ "/static/nonfree/../scripts/main.js")))
+
+ (tu:test-group "missing-static-resources"
+ (define missing-resource-result
+ (get "/static/i'm-not-here!!!"))
+
+ (tu:test-eqv 404 (rsp:response-code (car missing-resource-result)))
+
+ ;; Default handler for missing resource accesses is expected to ignore the
+ ;; value of the `%default-headers` parameter.
+ (tu:test-equal '(text/plain (charset . "utf-8"))
+ (rsp:response-content-type (car missing-resource-result))))
+
(tu:test-assert (eval '(begin (thread-terminate! server-thread)
(close server-sock))
(test-env 'nonfree-site))))