use strict;
use warnings FATAL => 'all';

use Apache::Test;
use Apache::TestRequest;
use Apache::TestUtil;

#
# Test <If > section merging
# Nested <If> evaluation is only available in trunk,
# in 2.4.x the default behavior is to ignore any nested
# <If> block. 
#

plan tests => (have_min_apache_version('2.4.26') ? 23 : 11) * 2,
                  need need_lwp,
                  need_module('mod_headers'),
                  need_module('mod_proxy'),
                  need_module('mod_proxy_http'),
                  need_min_apache_version('2.3.8');


sub do_test
{
    my $url = shift;
    my $set = shift;
    my $expect = shift;

    $url = "/if_sec$url";

    my @headers_to_set = split(/\s+/, $set);
    my @headers = map { ("In-If$_" => 1) } @headers_to_set;

    my $response = GET($url, @headers);
    print "# $url with '$set':\n";
    ok t_cmp($response->code, 200);
    ok t_cmp($response->header("Out-Trace"), $expect);
}

do_test('/',                '',         undef); 
do_test('/foo.if_test',     '',         undef); 
do_test('/foo.if_test',     '1',        'global1');

if (have_min_apache_version('2.4.26')) {
    do_test('/foo.if_test',     '1 11',     'global1, nested11, nested113');
    do_test('/foo.if_test',     '1 11 111', 'global1, nested11, nested111');
    do_test('/foo.if_test',     '1 11 112', 'global1, nested11, nested112');
}

do_test('/foo.if_test',     '1 2',      'global1, files2');
do_test('/dir/foo.txt',     '1 2',      'global1, dir1, dir2, dir_files1');
do_test('/dir/',            '1 2',      'global1, dir1, dir2');

if (have_min_apache_version('2.4.26')) {
    do_test('/dir/',            '1 11',     'global1, dir1, nested11, nested113');
    do_test('/dir/',            '1 11 111', 'global1, dir1, nested11, nested111');
    do_test('/dir/',            '1 11 112', 'global1, dir1, nested11, nested112');
}

do_test('/loc/',            '1 2',      'global1, loc1, loc2');
do_test('/loc/foo.txt',     '1 2',      'global1, loc1, loc2');

if (have_min_apache_version('2.4.26')) {
    do_test('/loc/',            '1 11',     'global1, loc1, nested11, nested113');
    do_test('/loc/',            '1 11 111', 'global1, loc1, nested11, nested111');
    do_test('/loc/',            '1 11 112', 'global1, loc1, nested11, nested112');
}

do_test('/loc/foo.if_test', '1 2',      'global1, files2, loc1, loc2');

if (have_min_apache_version('2.4.26')) {
    do_test('/loc/foo.if_test', '1 2 11',     'global1, files2, loc1, loc2, nested11, nested113');
    do_test('/loc/foo.if_test', '1 2 11 111', 'global1, files2, loc1, loc2, nested11, nested111');
    do_test('/loc/foo.if_test', '1 2 11 112', 'global1, files2, loc1, loc2, nested11, nested112');
}

do_test('/proxy/',          '1 2',      'global1, locp1, locp2');
do_test('/proxy/',          '2',        'locp2');

