changeset 261:9b1df914171f

Tests: win32 location tests.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 11 Feb 2013 22:17:23 +0400
parents 1c356f231c8f
children d4d9bbe627a8
files http_location_win32.t
diffstat 1 files changed, 118 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/http_location_win32.t
@@ -0,0 +1,118 @@
+#!/usr/bin/env perl
+
+# (C) Maxim Dounin
+
+# Tests for location selection on win32.
+
+###############################################################################
+
+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;
+
+plan(skip_all => 'not win32')
+	if $^O ne 'MSWin32' && $^O ne 'msys';
+
+my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(19)
+	->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-Location root;
+            return 204;
+        }
+
+        location /directory/ {
+            add_header X-Location directory;
+            return 204;
+        }
+
+        location /direct~1 {
+        }
+
+        location = /file {
+            add_header X-Location file;
+            return 204;
+        }
+    }
+}
+
+EOF
+
+$t->run();
+
+my $d = $t->testdir();
+mkdir("$d/directory");
+
+$t->write_file('directory/file', 'SEE-THIS');
+
+###############################################################################
+
+like(http_get('/x'), qr/X-Location: root/, 'root');
+
+# these all are mapped to "/directory/"
+
+like(http_get('/directory/'), qr/X-Location: directory/, 'directory');
+like(http_get('/Directory/'), qr/X-Location: directory/, 'directory caseless');
+like(http_get('/directory./'), qr/X-Location: directory/, 'directory dot');
+like(http_get('/directory.%2ffile'), qr/X-Location: directory/,
+	'directory dot encoded slash');
+like(http_get('/directory::$index_allocation/'),
+	qr/X-Location: directory|400 Bad/,
+	'directory stream');
+like(http_get('/directory::$index_allocation./'),
+	qr/X-Location: directory|400 Bad/,
+	'directory stream dot');
+like(http_get('/directory:$i30:$index_allocation./'),
+	qr/X-Location: directory|400 Bad/,
+	'directory i30 stream dot');
+
+# these looks similar, but shouldn't be mapped to "/directory/"
+
+like(http_get('/directory../'), qr/X-Location: root/, 'directory dot dot');
+like(http_get('/directory.::$index_allocation/'), qr/X-Location: root|400 Bad/,
+	'directory dot stream');
+
+# short name, should be rejected
+
+unlike(http_get('/direct~1/file'), qr/SEE-THIS/, 'short name');
+unlike(http_get('/direct~1./file'), qr/SEE-THIS/, 'short name dot');
+unlike(http_get('/direct~1::$index_allocation./file'), qr/SEE-THIS/,
+	'short name stream dot');
+unlike(http_get('/direct~1.::$index_allocation/file'), qr/SEE-THIS/,
+	'short name dot stream');
+
+# these should be mapped to /file
+
+like(http_get('/file'), qr/X-Location: file/, 'file');
+like(http_get('/file.'), qr/X-Location: file/, 'file dot');
+like(http_get('/file..'), qr/X-Location: file/, 'file dot dot');
+like(http_get('/file%20.%20.'), qr/X-Location: file/, 'file dots and spaces');
+like(http_get('/file::$data..'), qr/X-Location: file|400 Bad/,
+	'file stream dot dot');
+
+###############################################################################