|  | #!/usr/bin/perl | 
|  |  | 
|  | # (C) Dmitry Volyntsev | 
|  | # (C) Nginx, Inc. | 
|  |  | 
|  | # Tests for http njs module, r.requestBody method. | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | use warnings; | 
|  | use strict; | 
|  |  | 
|  | use Test::More; | 
|  |  | 
|  | use Socket qw/ CRLF /; | 
|  |  | 
|  | 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/) | 
|  | ->write_file_expand('nginx.conf', <<'EOF'); | 
|  |  | 
|  | %%TEST_GLOBALS%% | 
|  |  | 
|  | daemon off; | 
|  |  | 
|  | events { | 
|  | } | 
|  |  | 
|  | http { | 
|  | %%TEST_GLOBALS_HTTP%% | 
|  |  | 
|  | js_include test.js; | 
|  |  | 
|  | server { | 
|  | listen       127.0.0.1:8080; | 
|  | server_name  localhost; | 
|  |  | 
|  | location /body { | 
|  | js_content test_body; | 
|  | } | 
|  |  | 
|  | location /in_file { | 
|  | client_body_in_file_only on; | 
|  | js_content test_body; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | EOF | 
|  |  | 
|  | $t->write_file('test.js', <<EOF); | 
|  | function test_body(r) { | 
|  | try { | 
|  | var body = r.requestBody; | 
|  | r.return(200, body); | 
|  |  | 
|  | } catch (e) { | 
|  | r.return(500, e.message); | 
|  | } | 
|  | } | 
|  |  | 
|  | EOF | 
|  |  | 
|  | $t->try_run('no njs request body')->plan(3); | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | like(http_post('/body'), qr/REQ-BODY/, 'request body'); | 
|  | like(http_post('/in_file'), qr/request body is in a file/, | 
|  | 'request body in file'); | 
|  | like(http_post_big('/body'), qr/200.*^(1234567890){1024}$/ms, | 
|  | 'request body big'); | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | sub http_post { | 
|  | my ($url, %extra) = @_; | 
|  |  | 
|  | my $p = "POST $url HTTP/1.0" . CRLF . | 
|  | "Host: localhost" . CRLF . | 
|  | "Content-Length: 8" . CRLF . | 
|  | CRLF . | 
|  | "REQ-BODY"; | 
|  |  | 
|  | return http($p, %extra); | 
|  | } | 
|  |  | 
|  | sub http_post_big { | 
|  | my ($url, %extra) = @_; | 
|  |  | 
|  | my $p = "POST $url HTTP/1.0" . CRLF . | 
|  | "Host: localhost" . CRLF . | 
|  | "Content-Length: 10240" . CRLF . | 
|  | CRLF . | 
|  | ("1234567890" x 1024); | 
|  |  | 
|  | return http($p, %extra); | 
|  | } | 
|  |  | 
|  | ############################################################################### |