summaryrefslogtreecommitdiff
path: root/tests/reverse-proxy-502.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/reverse-proxy-502.scm')
-rw-r--r--tests/reverse-proxy-502.scm62
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/reverse-proxy-502.scm b/tests/reverse-proxy-502.scm
new file mode 100644
index 0000000..22ef269
--- /dev/null
+++ b/tests/reverse-proxy-502.scm
@@ -0,0 +1,62 @@
+;; disfluid, implementation of the Solid specification
+;; Copyright (C) 2021 Vivien Kraus
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU Affero General Public License as
+;; published by the Free Software Foundation, either version 3 of the
+;; License, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU Affero General Public License for more details.
+
+;; You should have received a copy of the GNU Affero General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+(define-module (tests reverse-proxy-502)
+ #:use-module (webid-oidc server endpoint)
+ #:use-module (webid-oidc server endpoint reverse-proxy)
+ #:use-module (webid-oidc testing)
+ #:use-module (webid-oidc offloading)
+ #:use-module ((webid-oidc parameters) #:prefix p:)
+ #:use-module (oop goops)
+ #:use-module (web server)
+ #:use-module (web request)
+ #:use-module (web response)
+ #:use-module (web uri)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 receive)
+ #:use-module (srfi srfi-26)
+ #:use-module (rnrs bytevectors)
+ #:declarative? #t
+ #:duplicates (merge-generics))
+
+(with-test-environment
+ "reverse-proxy-502"
+ (lambda ()
+ (parameterize
+ ((p:current-date 0)
+ (open-socket-for-uri
+ (lambda _
+ (error "This failed."))))
+ (with-threads
+ (let ((reverse-proxy
+ (make <reverse-proxy>
+ #:backend-uri (string->uri "https://example.com")
+ #:authentication-header 'test))
+ (request
+ (build-request
+ (string->uri "https://example.com")
+ #:headers '((content-type text/plain)
+ (test . "https://attack.com/profile/card#me"))
+ #:meta `((user . ,(string->uri "https://example.com/profile/card#me")))))
+ (request-body (string->utf8 "Hello, world!")))
+ (receive (response response-body response-meta)
+ (handle reverse-proxy request request-body)
+ (unless (eqv? (response-code response) 502)
+ (exit 1))
+ (primitive-exit 0))))
+ (sleep 120)
+ (format (current-error-port) "Test timeout.\n")
+ (exit 2))))