# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
use strict;
use warnings FATAL => 'all';

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

use File::Spec::Functions qw(catfile);

plan tests => 1;

#force test to go over http, since this doesn't work with t/TEST -ssl
Apache::TestRequest::scheme('http');

my $location = "/TestApache__read";

my $socket = Apache::TestRequest::vhost_socket('default');

my $file = catfile Apache::Test::vars('serverroot'), "..", 'Makefile';

open my $fh, $file or die "open $file: $!";
my $data = join '', <$fh>;
close $fh;

my $size = length $data;

for my $string ("POST $location HTTP/1.0",
                "Content-length: $size",
                "") {
    my $line = "$string\r\n";
    syswrite $socket, $line, length($line);
}

my $written = 0;
my $bufsiz = 240;

my $sleeps = 2;

while ($written < length($data)) {
    my $remain = length($data) - $written;
    my $len = $remain > $bufsiz ? $bufsiz : $remain;
    $written += syswrite $socket, $data, $len, $written;
    sleep 1 if $sleeps-- > 0;
}

while (<$socket>) {
    last if /^\015?\012$/; #skip over headers
}

my $return = join '', <$socket>;

ok $data eq $return;
