changeset 396:5eb0df61f371

Tests: added tests for the "$upstream_cookie_<name>" variables.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 30 Apr 2014 18:04:50 +0400
parents d7d9b4367bab
children 847ea345becb
files proxy_upstream_cookie.t
diffstat 1 files changed, 119 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/proxy_upstream_cookie.t
@@ -0,0 +1,119 @@
+#!/usr/bin/perl
+
+# (C) Nginx, Inc.
+
+# Tests for the $upstream_cookie_<name> variables.
+
+###############################################################################
+
+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 / {
+            add_header X-Upstream-Cookie $upstream_cookie_tc;
+            proxy_pass http://127.0.0.1:8081;
+        }
+    }
+
+    server {
+        listen       127.0.0.1:8081;
+        server_name  localhost;
+
+        location / {
+            add_header Set-Cookie $http_x_test_cookie;
+            return 204;
+        }
+
+        # embed multiline cookie with add_header
+        location /mcomma {
+            add_header Set-Cookie "tc=one,two,three";
+            add_header Set-Cookie "tc=four,five,six";
+            return 204;
+        }
+        location /msemicolon {
+            add_header Set-Cookie "tc=one;two;three";
+            add_header Set-Cookie "tc=four;five;six";
+            return 204;
+        }
+    }
+}
+
+EOF
+
+$t->try_run('no upstream_cookie_<name>')->plan(19);
+
+###############################################################################
+
+is(http_get_uc('tc='), undef, 'value_none');
+is(http_get_uc('tc=;'), undef, 'semicolon');
+is(http_get_uc('tc= ;'), undef, 'space_semicolon');
+is(http_get_uc('tc =   ; Domain=example.com;'), undef, 'space_semicolon_more');
+
+is(http_get_uc('tc=x'), 'x', 'onechar');
+is(http_get_uc('tc=,'), ',', 'comma');
+is(http_get_uc('tc	=	content     ;'), undef, 'tabbed');
+is(http_get_uc('tc="content"'), '"content"', 'dquoted');
+is(http_get_uc('tc=content'), 'content', 'normal');
+is(http_get_uc('tc=con  tent; Domain=example.com'), 'con  tent',
+	'internal_space');
+is(http_get_uc('tc = content'), 'content', 'separated');
+
+is(http_get_uc('tc=1.2.3'), '1.2.3', 'dots');
+is(http_get_uc('tc==abc'), '=abc', 'deq');
+is(http_get_uc('tc==;abc'), '=', 'deqsemi');
+is(http_get_uc('=tc=content'), undef, 'eqfirst');
+is(http_get_uc('tc=first,tc=second'), 'first,tc=second', 'two_comma');
+is(http_get_uc('tc=first;tc=second'), 'first', 'two_semicolon');
+
+like(http_get('/mcomma'), qr/^X-Upstream-Cookie: one,two,three\x0d?$/mi,
+	'multiline comma');
+like(http_get('/msemicolon'), qr/^X-Upstream-Cookie: one\x0d?$/mi,
+	'multiline semicolon');
+
+###############################################################################
+
+sub http_get_uc {
+	my ($cookie) = @_;
+
+	http(<<EOF) =~ qr/^X-Upstream-Cookie:\s(.+?)\x0d?$/mi;
+GET / HTTP/1.1
+Host: localhost
+Connection: close
+X-Test-Cookie: $cookie
+
+EOF
+
+	return $1;
+}
+
+###############################################################################