package TestAPI::conn_rec;

# this test module is only for testing fields in the conn_rec listed
# in apache_structures.map (but some fields are tested in other tests)

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

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

use Apache2::RequestRec ();
use Apache2::RequestUtil ();
use Apache2::Connection ();

use Apache2::Const -compile => qw(OK CONN_CLOSE);

use constant APACHE24   => have_min_apache_version('2.4.0');

sub handler {
    my $r = shift;

    my $c = $r->connection;

    plan $r, tests => 16;

    ok $c;

    ok $c->pool->isa('APR::Pool');

    ok $c->base_server->isa('Apache2::ServerRec');

    ok $c->client_socket->isa('APR::Socket');

    ok $c->local_addr->isa('APR::SockAddr');

    if (APACHE24) {
        ok $c->client_addr->isa('APR::SockAddr');

        # client_ip
        {
            my $client_ip_org = $c->client_ip;
            my $client_ip_new = "10.10.10.255";
            ok $client_ip_org;

            $c->client_ip($client_ip_new);
            ok t_cmp $c->client_ip, $client_ip_new;

            # restore
            $c->client_ip($client_ip_org);
            ok t_cmp $c->client_ip, $client_ip_org;
        }
    }
    else {
        ok $c->remote_addr->isa('APR::SockAddr');
        # remote_ip
        {
            my $remote_ip_org = $c->remote_ip;
            my $remote_ip_new = "10.10.10.255";
            ok $remote_ip_org;
 
            $c->remote_ip($remote_ip_new);
            ok t_cmp $c->remote_ip, $remote_ip_new;

 
            # restore
            $c->remote_ip($remote_ip_org);
            ok t_cmp $c->remote_ip, $remote_ip_org;
        }
    }

    ok $c->remote_host || 1;

    ok !$c->aborted;

    ok t_cmp($c->keepalive,
             Apache2::Const::CONN_CLOSE,
             "the client has issued a non-keepalive request");

    ok $c->local_ip;

    ok $c->local_host || 1;

    t_debug "id ", ($c->id == 0 ? "zero" : $c->id);
    ok $c->id || 1;

    ok $c->notes;

    # XXX: missing tests
    # conn_config

    Apache2::Const::OK;
}

1;
