annotate http_location_win32.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents 882267679006
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
261
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/env perl
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for location selection on win32.
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 plan(skip_all => 'not win32')
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 if $^O ne 'MSWin32' && $^O ne 'msys';
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(19)
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 ->write_file_expand('nginx.conf', <<'EOF');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 %%TEST_GLOBALS%%
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 daemon off;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 events {
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 http {
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
41 listen 127.0.0.1:8080;
261
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 server_name localhost;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 location / {
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 add_header X-Location root;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 return 204;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 location /directory/ {
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 add_header X-Location directory;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 return 204;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 location /direct~1 {
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 location = /file {
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 add_header X-Location file;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 return 204;
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 EOF
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 $t->run();
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 my $d = $t->testdir();
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 mkdir("$d/directory");
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 $t->write_file('directory/file', 'SEE-THIS');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 ###############################################################################
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 like(http_get('/x'), qr/X-Location: root/, 'root');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 # these all are mapped to "/directory/"
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 like(http_get('/directory/'), qr/X-Location: directory/, 'directory');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 like(http_get('/Directory/'), qr/X-Location: directory/, 'directory caseless');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 like(http_get('/directory./'), qr/X-Location: directory/, 'directory dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 like(http_get('/directory.%2ffile'), qr/X-Location: directory/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 'directory dot encoded slash');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 like(http_get('/directory::$index_allocation/'),
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 qr/X-Location: directory|400 Bad/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 'directory stream');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 like(http_get('/directory::$index_allocation./'),
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 qr/X-Location: directory|400 Bad/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 'directory stream dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 like(http_get('/directory:$i30:$index_allocation./'),
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 qr/X-Location: directory|400 Bad/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 'directory i30 stream dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 # these looks similar, but shouldn't be mapped to "/directory/"
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 like(http_get('/directory../'), qr/X-Location: root/, 'directory dot dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 like(http_get('/directory.::$index_allocation/'), qr/X-Location: root|400 Bad/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 'directory dot stream');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 # short name, should be rejected
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 unlike(http_get('/direct~1/file'), qr/SEE-THIS/, 'short name');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 unlike(http_get('/direct~1./file'), qr/SEE-THIS/, 'short name dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 unlike(http_get('/direct~1::$index_allocation./file'), qr/SEE-THIS/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 'short name stream dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 unlike(http_get('/direct~1.::$index_allocation/file'), qr/SEE-THIS/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 'short name dot stream');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 # these should be mapped to /file
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 like(http_get('/file'), qr/X-Location: file/, 'file');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 like(http_get('/file.'), qr/X-Location: file/, 'file dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(http_get('/file..'), qr/X-Location: file/, 'file dot dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 like(http_get('/file%20.%20.'), qr/X-Location: file/, 'file dots and spaces');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 like(http_get('/file::$data..'), qr/X-Location: file|400 Bad/,
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 'file stream dot dot');
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117
9b1df914171f Tests: win32 location tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 ###############################################################################