view js_internal_redirect.t @ 1721:6842b0f7fb9e

Tests: restored HTTP/2 request body tests with Content-Length. This partially reverts 3a334b20208e, which prevented testing request body with Content-Length. Arguably, it appeared as an early attempt to address new implementation requirements in 0aa07850922f (1.9.15) for request body flow control. After the HTTP/2 request body preread buffer introduction in ce94f07d5082 (1.11.0), and emitting HTTP/2 SETTINGS acknowledgement in tests since 48d277065309, it became barely necessary, if ever.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 20 Jul 2021 16:12:54 +0300
parents bc0990ea2e5b
children 18ac4d9e5a2a
line wrap: on
line source

#!/usr/bin/perl

# (C) Dmitry Volyntsev
# (C) Nginx, Inc.

# Tests for http njs module, internalRedirect method.

###############################################################################

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;

my $t = Test::Nginx->new()->has(qw/http rewrite/)
	->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 /test {
            js_content test_redirect;
        }

        location /redirect {
            internal;
            return 200 redirect$arg_b;
        }

        location @named {
            return 200 named;
        }
    }
}

EOF

$t->write_file('test.js', <<EOF);
    function test_redirect(r) {
        if (r.variables.arg_dest == 'named') {
            r.internalRedirect('\@named');

        } else {
            if (r.variables.arg_a) {
                r.internalRedirect('/redirect?b=' + r.variables.arg_a);

            } else {
                r.internalRedirect('/redirect');
            }
        }
    }

EOF

$t->try_run('no njs available')->plan(3);

###############################################################################

like(http_get('/test'), qr/redirect/s, 'redirect');
like(http_get('/test?a=A'), qr/redirectA/s, 'redirect with args');
like(http_get('/test?dest=named'), qr/named/s, 'redirect to named location');

###############################################################################