#!/usr/bin/perl

# (C) Maxim Dounin

# Tests for gunzip filter module with memcached.

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

use warnings;
use strict;

use Test::More;

BEGIN { use FindBin; chdir($FindBin::Bin); }

use lib 'lib';
use Test::Nginx qw/ :DEFAULT :gzip /;

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

select STDERR; $| = 1;
select STDOUT; $| = 1;

eval { require Cache::Memcached; };
plan(skip_all => 'Cache::Memcached not installed') if $@;

eval { require IO::Compress::Gzip; };
plan(skip_all => "IO::Compress::Gzip not found") if $@;

my $t = Test::Nginx->new()->has(qw/http gunzip memcached rewrite/)
	->has_daemon('memcached')
	->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

http {
    %%TEST_GLOBALS_HTTP%%

    server {
        listen       127.0.0.1:8080;
        server_name  localhost;

        gunzip on;

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

EOF

my $memhelp = `memcached -h`;
my @memopts = ();

if ($memhelp =~ /repcached/) {
	# repcached patch adds additional listen socket
	push @memopts, '-X', '8082';
}
if ($memhelp =~ /-U/) {
	# UDP port is on by default in memcached 1.2.7+
	push @memopts, '-U', '0';
}

$t->run_daemon('memcached', '-l', '127.0.0.1', '-p', '8081', @memopts);

$t->run()->plan(2);

$t->waitforsocket('127.0.0.1:8081')
	or die "Can't start memcached";

# Put compressed value into memcached.  This requires compress_threshold to be
# set and compressed value to be at least 20% less than original one.

my $memd = Cache::Memcached->new(servers => [ '127.0.0.1:8081' ],
	compress_threshold => 1, connect_timeout => 1.0);
$memd->set('/', 'TEST' x 10)
	or die "can't put value into memcached: $!";

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

http_gzip_like(http_gzip_request('/'), qr/TEST/, 'memcached response gzipped');
like(http_get('/'), qr/TEST/, 'memcached response gunzipped');

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