Mercurial > hg > nginx-tests
changeset 1594:2083b4f183e7
Tests: proxy_cookie_flags tests.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Sat, 26 Sep 2020 18:09:28 +0100 |
parents | a328109be893 |
children | a2c6b95d6591 |
files | proxy_cookie_flags.t |
diffstat | 1 files changed, 124 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/proxy_cookie_flags.t Sat Sep 26 18:09:28 2020 +0100 @@ -0,0 +1,124 @@ +#!/usr/bin/perl + +# (C) Sergey Kandaurov +# (C) Nginx, Inc. + +# Tests for the proxy_cookie_flags directive. + +############################################################################### + +use warnings; +use strict; + +use Test::More; + +BEGIN { use FindBin; chdir($FindBin::Bin); } + +use lib 'lib'; +use Test::Nginx; + +############################################################################### + +select STDERR; $| = 1; +select STDOUT; $| = 1; + +my $t = Test::Nginx->new()->has(qw/http proxy rewrite/); + +$t->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +daemon off; + +events { +} + +http { + %%TEST_GLOBALS_HTTP%% + + server { + listen 127.0.0.1:8080; + server_name localhost; + + location / { + proxy_pass http://127.0.0.1:8081; + + proxy_cookie_flags a secure httponly samesite=none; + proxy_cookie_flags b secure httponly samesite=lax; + proxy_cookie_flags c secure httponly samesite=strict; + proxy_cookie_flags d nosecure nohttponly nosamesite; + + proxy_cookie_flags $arg_complex secure; + proxy_cookie_flags ~BAR httponly; + + location /off/ { + proxy_pass http://127.0.0.1:8081; + proxy_cookie_flags off; + } + } + } + + server { + listen 127.0.0.1:8081; + server_name localhost; + + location / { + set $c "$arg_v$arg_complex=path=domain=; Domain=example.org$arg_f"; + add_header Set-Cookie $c; + return 200 OK; + } + } +} + +EOF + +$t->try_run('no proxy_cookie_flags')->plan(11); + +############################################################################### + +is(http_get_set_cookie('/?v=a'), + 'a=path=domain=; Domain=example.org; Secure; HttpOnly; SameSite=None', + 'flags set all'); +is(http_get_set_cookie('/?v=b'), + 'b=path=domain=; Domain=example.org; Secure; HttpOnly; SameSite=Lax', + 'flags set lax'); +is(http_get_set_cookie('/?v=c'), + 'c=path=domain=; Domain=example.org; Secure; HttpOnly; SameSite=Strict', + 'flags set strict'); + +# edit already set flags + +is(http_get_set_cookie('/?v=a&f=;Secure;HttpOnly;SameSite=Lax'), + 'a=path=domain=; Domain=example.org; Secure; HttpOnly; SameSite=None', + 'flags reset all'); +is(http_get_set_cookie('/?v=b&f=;Secure;HttpOnly;SameSite=None'), + 'b=path=domain=; Domain=example.org; Secure; HttpOnly; SameSite=Lax', + 'flags reset lax'); +is(http_get_set_cookie('/?v=c&f=;Secure;HttpOnly;SameSite=None'), + 'c=path=domain=; Domain=example.org; Secure; HttpOnly; SameSite=Strict', + 'flags reset strict'); + +is(http_get_set_cookie('/?v=d&f=;secure;httponly;samesite=lax'), + 'd=path=domain=; Domain=example.org', + 'flags remove'); + +is(http_get_set_cookie('/?v=nx&f=;samesite=none'), + 'nx=path=domain=; Domain=example.org;samesite=none', 'flags no match'); + +is(http_get_set_cookie('/?complex=v'), + 'v=path=domain=; Domain=example.org; Secure', 'flags variable'); +is(http_get_set_cookie('/?v=foobarbaz'), + 'foobarbaz=path=domain=; Domain=example.org; HttpOnly', 'flags regex'); + +is(http_get_set_cookie('/off/?v=a'), 'a=path=domain=; Domain=example.org', + 'flags off'); + +############################################################################### + +sub http_get_set_cookie { + my ($uri) = @_; + http_get($uri) =~ /^Set-Cookie:\s(.+?)\x0d?$/mi; + return $1; +} + +###############################################################################