Commits

Anonymous committed b77577b

Auth request: auth_request_set tests.

Comments (0)

Files changed (1)

t/auth-request-set.t

+#!/usr/bin/perl
+
+# (C) Maxim Dounin
+
+# Tests for auth request module, auth_request_set.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Socket qw/ CRLF /;
+
+use Test::More;
+use Test::Nginx;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+my $t = Test::Nginx->new()->has(qw/http rewrite/)
+	->plan(6);
+
+$t->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+master_process off;
+daemon         off;
+
+events {
+}
+
+http {
+    %%TEST_GLOBALS_HTTP%%
+
+    server {
+        listen       127.0.0.1:8080;
+        server_name  localhost;
+
+        location = /t1.html {
+            auth_request /auth;
+            auth_request_set $username $upstream_http_x_username;
+            add_header X-Set-Username $username;
+        }
+
+        location = /t2.html {
+            auth_request /auth;
+            auth_request_set $username $upstream_http_x_username;
+            error_page 404 = /fallback;
+        }
+        location = /fallback {
+            add_header X-Set-Username $username;
+            return 204;
+        }
+
+        location = /t3.html {
+            auth_request /auth;
+            auth_request_set $username $upstream_http_x_username;
+            error_page 404 = @fallback;
+        }
+        location @fallback {
+            add_header X-Set-Username $username;
+            return 204;
+        }
+
+        location = /t4.html {
+            auth_request /auth;
+            auth_request_set $username $upstream_http_x_username;
+            error_page 404 = /t4-fallback.html;
+        }
+        location = /t4-fallback.html {
+            auth_request /auth2;
+            auth_request_set $username $upstream_http_x_username;
+            add_header X-Set-Username $username;
+        }
+
+        location = /t5.html {
+            auth_request /auth;
+            auth_request_set $args "setargs";
+            proxy_pass http://127.0.0.1:8081/t5.html;
+        }
+
+        location = /t6.html {
+            add_header X-Unset-Username "x${username}x";
+            return 204;
+        }
+
+        location = /auth {
+            proxy_pass http://127.0.0.1:8081;
+        }
+        location = /auth2 {
+            proxy_pass http://127.0.0.1:8081;
+        }
+    }
+
+    server {
+        listen       127.0.0.1:8081;
+        server_name  localhost;
+
+        location = /auth {
+            add_header X-Username "username";
+            return 204;
+        }
+
+        location = /auth2 {
+            add_header X-Username "username2";
+            return 204;
+        }
+
+        location = /t5.html {
+            add_header X-Args $args;
+            return 204;
+        }
+    }
+}
+
+EOF
+
+$t->write_file('t1.html', '');
+$t->write_file('t4-fallback.html', '');
+$t->run();
+
+###############################################################################
+
+like(http_get('/t1.html'), qr/X-Set-Username: username/, 'set normal');
+like(http_get('/t2.html'), qr/X-Set-Username: username/, 'set after redirect');
+like(http_get('/t3.html'), qr/X-Set-Username: username/,
+	'set after named location');
+like(http_get('/t4.html'), qr/X-Set-Username: username2/,
+	 'set on second auth');
+
+# there are two variables with set_handler: $args and $limit_rate
+# we do test $args as it's a bit more simple thing to do
+
+like(http_get('/t5.html'), qr/X-Args: setargs/, 'variable with set_handler');
+
+# check that using variable without setting it returns empty content
+
+like(http_get('/t6.html'), qr/X-Unset-Username: xx/, 'unset variable');
+
+###############################################################################
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.