Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 85ac47ba27
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 100 lines (70 sloc) 2.157 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
#!/usr/bin/perl

# (C) Maxim Dounin

# Test for memcached backend with fake daemon.

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

use warnings;
use strict;

use Test::More;
use Socket qw/ CRLF /;

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 memcached ssi/)->plan(3)
->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

master_process off;
daemon off;

events {
}

http {
    %%TEST_GLOBALS_HTTP%%

    server {
        listen 127.0.0.1:8080;
        server_name localhost;

        location / {
            set $memcached_key $uri;
            memcached_pass 127.0.0.1:8081;
        }

        location /ssi {
            default_type text/html;
            ssi on;
        }
    }
}

EOF

$t->write_file('ssi.html', '<!--#include virtual="/" set="blah" -->blah: <!--#echo var="blah" -->');
$t->run_daemon(\&memcached_fake_daemon);
$t->run();

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

like(http_get('/'), qr/SEE-THIS/, 'memcached split trailer');

like(http_get('/ssi.html'), qr/SEE-THIS/, 'memcached ssi var');

like(`grep -F '[error]' ${\($t->testdir())}/error.log`, qr/^$/s, 'no error');

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

sub memcached_fake_daemon {
my $server = IO::Socket::INET->new(
Proto => 'tcp',
LocalAddr => '127.0.0.1:8081',
Listen => 5,
Reuse => 1
)
or die "Can't create listening socket: $!\n";

while (my $client = $server->accept()) {
$client->autoflush(1);

while (<$client>) {
last if (/\x0d\x0a$/);
}

print $client 'VALUE / 0 8' . CRLF;
print $client 'SEE-TH';
select(undef, undef, undef, 0.1);
print $client 'IS';
select(undef, undef, undef, 0.1);
print $client CRLF . 'EN';
select(undef, undef, undef, 0.1);
print $client 'D' . CRLF;
close $client;
}
}

###############################################################################
Something went wrong with that request. Please try again.