summaryrefslogtreecommitdiff
path: root/tests/too-many-refresh-tokens.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/too-many-refresh-tokens.scm')
-rw-r--r--tests/too-many-refresh-tokens.scm50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/too-many-refresh-tokens.scm b/tests/too-many-refresh-tokens.scm
new file mode 100644
index 0000000..cd1cbdc
--- /dev/null
+++ b/tests/too-many-refresh-tokens.scm
@@ -0,0 +1,50 @@
+(use-modules (webid-oidc refresh-token)
+ (webid-oidc testing)
+ (webid-oidc errors)
+ (webid-oidc jwk)
+ (web uri)
+ (srfi srfi-19)
+ (web response)
+ (ice-9 optargs)
+ (ice-9 receive))
+
+(define (issue-n-refresh-tokens key n)
+ (if (<= n 0)
+ '()
+ (let ((next
+ (issue-refresh-token
+ (string->uri (format #f "https://subject-~a.com" (+ n 1)))
+ (string->uri (format #f "https://client-~a.com" (+ n 1)))
+ (jkt key))))
+ (cons next
+ (issue-n-refresh-tokens key (- n 1))))))
+
+(with-test-environment
+ "too-many-refresh-tokens"
+ (lambda ()
+ (let* ((key (generate-key #:n-size 2048))
+ (refresh-tokens (list->vector (issue-n-refresh-tokens key 21))))
+ (let ((first-refresh-token (vector-ref refresh-tokens 0))
+ (second-refresh-token (vector-ref refresh-tokens 20)))
+ (with-exception-handler
+ (lambda (error)
+ (unless ((record-predicate &invalid-refresh-token) error)
+ (exit 1)))
+ (lambda ()
+ (with-refresh-token first-refresh-token key
+ (lambda (sub aud)
+ ;; It has been made invalid!
+ (exit 1))))
+ #:unwind? #t
+ #:unwind-for-type &invalid-refresh-token)
+ (unless (with-refresh-token second-refresh-token key
+ (lambda (sub aud)
+ (format (current-error-port)
+ "~a / ~a\n"
+ (uri->string sub)
+ (uri->string aud))
+ (unless (equal? sub (string->uri "https://subject-2.com"))
+ (exit 2))
+ (unless (equal? aud (string->uri "https://client-2.com"))
+ (exit 3))))
+ (exit 4))))))