Mercurial > hg > nginx-tests
comparison js_headers.t @ 1439:c083749bc47d
Tests: added njs http r.headersOut tests.
author | Dmitry Volyntsev <xeioex@nginx.com> |
---|---|
date | Thu, 07 Feb 2019 20:23:58 +0300 |
parents | |
children | 5d0eb718f38e |
comparison
equal
deleted
inserted
replaced
1438:98facc98bb2e | 1439:c083749bc47d |
---|---|
1 #!/usr/bin/perl | |
2 | |
3 # (C) Dmitry Volyntsev | |
4 # (C) Nginx, Inc. | |
5 | |
6 # Tests for http njs module, working with headers. | |
7 | |
8 ############################################################################### | |
9 | |
10 use warnings; | |
11 use strict; | |
12 | |
13 use Test::More; | |
14 | |
15 use Config; | |
16 | |
17 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
18 | |
19 use lib 'lib'; | |
20 use Test::Nginx; | |
21 | |
22 ############################################################################### | |
23 | |
24 select STDERR; $| = 1; | |
25 select STDOUT; $| = 1; | |
26 | |
27 my $t = Test::Nginx->new()->has(qw/http charset/) | |
28 ->write_file_expand('nginx.conf', <<'EOF'); | |
29 | |
30 %%TEST_GLOBALS%% | |
31 | |
32 daemon off; | |
33 | |
34 events { | |
35 } | |
36 | |
37 http { | |
38 %%TEST_GLOBALS_HTTP%% | |
39 | |
40 js_include test.js; | |
41 | |
42 server { | |
43 listen 127.0.0.1:8080; | |
44 server_name localhost; | |
45 | |
46 location /njs { | |
47 js_content test_njs; | |
48 } | |
49 | |
50 location /content_length { | |
51 js_content content_length; | |
52 } | |
53 | |
54 location /content_type { | |
55 charset windows-1251; | |
56 | |
57 default_type text/plain; | |
58 js_content content_type; | |
59 } | |
60 | |
61 location /content_encoding { | |
62 js_content content_encoding; | |
63 } | |
64 | |
65 location /headers_list { | |
66 js_content headers_list; | |
67 } | |
68 } | |
69 } | |
70 | |
71 EOF | |
72 | |
73 $t->write_file('test.js', <<EOF); | |
74 function test_njs(r) { | |
75 r.return(200, njs.version); | |
76 } | |
77 | |
78 function content_length(r) { | |
79 r.headersOut['Content-Length'] = ''; | |
80 r.headersOut['Content-Length'] = 3; | |
81 delete r.headersOut['Content-Length']; | |
82 r.headersOut['Content-Length'] = 3; | |
83 r.sendHeader(); | |
84 r.send('XXX'); | |
85 r.finish(); | |
86 } | |
87 | |
88 function content_type(r) { | |
89 r.headersOut['Content-Type'] = 'text/xml'; | |
90 r.headersOut['Content-Type'] = ''; | |
91 r.headersOut['Content-Type'] = 'text/xml; charset='; | |
92 delete r.headersOut['Content-Type']; | |
93 r.headersOut['Content-Type'] = 'text/xml; charset=utf-8'; | |
94 r.headersOut['Content-Type'] = 'text/xml; charset="utf-8"'; | |
95 r.return(200); | |
96 } | |
97 | |
98 function content_encoding(r) { | |
99 r.headersOut['Content-Encoding'] = ''; | |
100 r.headersOut['Content-Encoding'] = 'test'; | |
101 delete r.headersOut['Content-Encoding']; | |
102 r.headersOut['Content-Encoding'] = 'gzip'; | |
103 r.return(200); | |
104 } | |
105 | |
106 function headers_list(r) { | |
107 for (var h in {a:1, b:2, c:3}) { | |
108 r.headersOut[h] = h; | |
109 } | |
110 | |
111 delete r.headersOut.b; | |
112 r.headersOut.d = 'd'; | |
113 | |
114 var out = ""; | |
115 for (var h in r.headersOut) { | |
116 out += h + ":"; | |
117 } | |
118 | |
119 r.return(200, out); | |
120 } | |
121 | |
122 EOF | |
123 | |
124 $t->try_run('no njs')->plan(5); | |
125 | |
126 ############################################################################### | |
127 | |
128 | |
129 TODO: { | |
130 local $TODO = 'not yet' | |
131 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.2.8'; | |
132 | |
133 like(http_get('/content_length'), qr/Content-Length: 3/, | |
134 'set Content-Length'); | |
135 like(http_get('/content_type'), qr/Content-Type: text\/xml; charset="utf-8"\r/, | |
136 'set Content-Type'); | |
137 unlike(http_get('/content_type'), qr/Content-Type: text\/plain/, | |
138 'set Content-Type 2'); | |
139 like(http_get('/content_encoding'), qr/Content-Encoding: gzip/, | |
140 'set Content-Encoding'); | |
141 like(http_get('/headers_list'), qr/a:c:d/, 'headers list'); | |
142 | |
143 } | |
144 | |
145 ############################################################################### |