blob: b21bc4c84a36c8539ab8850a4a228a4c8be10a4b [file] [log] [blame]
#!/usr/bin/perl
# (C) Maxim Dounin
# Tests for nginx xslt filter module.
###############################################################################
use warnings;
use strict;
use Test::More;
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 xslt/)->plan(8);
$t->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;
default_type text/xml;
location /x1 {
xslt_stylesheet %%TESTDIR%%/test.xslt;
}
location /x2 {
xslt_stylesheet %%TESTDIR%%/test.xslt
param1='value1':param2=/root param3='value%33';
}
location /x3 {
xml_entities %%TESTDIR%%/entities.dtd;
xslt_stylesheet %%TESTDIR%%/test.xslt;
}
location /x4 {
xslt_stylesheet %%TESTDIR%%/first.xslt;
xslt_stylesheet %%TESTDIR%%/test.xslt;
}
location /x5 {
xslt_stylesheet %%TESTDIR%%/test.xslt
param1='$server_name';
}
}
}
EOF
$t->write_file('test.xslt', <<'EOF');
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="param1"/>
<xsl:param name="param2"/>
<xsl:param name="param3"/>
<xsl:template match="/">
test xslt result
param1=<xsl:value-of select="$param1"/>
param2=<xsl:value-of select="$param2"/>
param3=<xsl:value-of select="$param3"/>
data=<xsl:value-of select="/root"/>
</xsl:template>
</xsl:stylesheet>
EOF
$t->write_file('first.xslt', <<'EOF');
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>other <xsl:value-of select="/root"/></root>
</xsl:template>
</xsl:stylesheet>
EOF
$t->write_file('entities.dtd', '<!ENTITY test "test entity">' . "\n");
$t->write_file('x1', '<empty/>');
$t->write_file('x2', '<root>data</root>');
$t->write_file('x3', '<!DOCTYPE root><root>&test;</root>');
$t->write_file('x4', '<root>data</root>');
$t->write_file('x5', '<root>data</root>');
$t->run();
###############################################################################
like(http_get("/x1"), qr!200 OK.*test xslt result!ms, 'simple');
like(http_get("/x1"), qr!200 OK.*Content-Type: text/html!ms, 'content type');
like(http_get("/x2"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms,
'params');
like(http_get("/x3"), qr!200 OK.*data=test entity!ms, 'entities');
like(http_get("/x4"), qr!200 OK.*data=other data!ms, 'several stylesheets');
TODO: {
todo_skip 'heap-buffer-overflow', 1 unless $t->has_version('1.17.2')
or $ENV{TEST_NGINX_UNSAFE};
like(http_get("/x5"), qr!200 OK.*param1=localhost!ms, 'params variable');
}
# xslt and ranges
TODO: {
local $TODO = 'not yet' unless $t->has_version('1.19.2');
unlike(http_get("/x1"), qr!Accept-Ranges!, 'no Accept-Ranges');
like(http(<<EOF), qr!200 OK.*test xslt result!ms, 'no ranges');
GET /x1 HTTP/1.1
Host: localhost
Connection: close
Range: bytes=-10
EOF
}
###############################################################################