#!/usr/bin/perl

# (C) Maxim Dounin
# (C) Nginx, Inc.

# Tests for proxy_next_upstream non_idempotent.

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

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 proxy rewrite upstream_keepalive/);

$t->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

http {
    %%TEST_GLOBALS_HTTP%%

    upstream u {
        server 127.0.0.1:%%PORT_1%% max_fails=0;
        server 127.0.0.1:%%PORT_1%% max_fails=0;
    }

    upstream uk {
        server 127.0.0.1:%%PORT_1%% max_fails=0;
        server 127.0.0.1:%%PORT_1%% max_fails=0;
        keepalive 10;
    }

    server {
        listen       127.0.0.1:%%PORT_0%%;
        server_name  localhost;

        add_header X-IP $upstream_addr always;

        location / {
            proxy_pass http://u;
            proxy_next_upstream error timeout;
        }

        location /non {
            proxy_pass http://u;
            proxy_next_upstream error timeout non_idempotent;
        }

        location /keepalive {
            proxy_pass http://uk;
            proxy_next_upstream error timeout;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }

    server {
        listen       127.0.0.1:%%PORT_1%%;
        server_name  localhost;

        location / {
            return 444;
        }

        location /keepalive/establish {
            return 204;
        }
    }
}

EOF

$t->try_run('no proxy_next_upstream non_idempotent')->plan(6);

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

# non-idempotent requests should not be retried by default
# if a request has been sent to a backend

like(http_get('/'), qr/X-IP: (\S+), \1\x0d?$/m, 'get');
like(http_post('/'), qr/X-IP: (\S+)\x0d?$/m, 'post');

# with "proxy_next_upstream non_idempotent" there is no
# difference between idempotent and non-idempotent requests,
# non-idempotent requests are retried as usual

like(http_get('/non'), qr/X-IP: (\S+), \1\x0d?$/m, 'get non_idempotent');
like(http_post('/non'), qr/X-IP: (\S+), \1\x0d?$/m, 'post non_idempotent');

# cached connections follow the same rules

like(http_get('/keepalive/establish'), qr/204 No Content/m, 'keepalive');
like(http_post('/keepalive/drop'), qr/X-IP: (\S+)\x0d?$/m, 'keepalive post');

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

sub http_post {
	my ($uri, %extra) = @_;
	my $cl = $extra{cl} || 0;

	http(<<"EOF");
POST $uri HTTP/1.0
Content-Length: $cl

EOF
}

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