Mercurial > hg > nginx-tests
view dav_utf8.t @ 1891:acbdc4dd7508
Tests: HTTP/3 add_trailer tests.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 09 May 2023 19:49:44 +0400 |
parents | 835630547d35 |
children | a095b971fbcc |
line wrap: on
line source
#!/usr/bin/perl # (C) Sergey Kandaurov # (C) Nginx, Inc. # Tests for nginx dav module with utf8 encoded names. ############################################################################### use warnings; use strict; use Test::More; use Encode qw/ encode /; BEGIN { use FindBin; chdir($FindBin::Bin); } use lib 'lib'; use Test::Nginx; ############################################################################### select STDERR; $| = 1; select STDOUT; $| = 1; eval { require Win32API::File if $^O eq 'MSWin32'; }; plan(skip_all => 'Win32API::File not installed') if $@; my $t = Test::Nginx->new()->has(qw/http dav/)->plan(16); $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; location / { dav_methods PUT DELETE MKCOL COPY MOVE; } } } EOF $t->run(); ############################################################################### local $TODO = 'not yet' if $^O eq 'MSWin32' and !$t->has_version('1.23.4'); my $d = $t->testdir(); my $r; my $file = "file-%D0%BC%D0%B8"; my $file_path = "file-\x{043c}\x{0438}"; $r = http(<<EOF . '0123456789'); PUT /$file HTTP/1.1 Host: localhost Connection: close Content-Length: 10 EOF like($r, qr/201 Created.*(Content-Length|\x0d\0a0\x0d\x0a)/ms, 'put file'); ok(fileexists("$d/$file_path"), 'put file exist'); $r = http(<<EOF); COPY /$file HTTP/1.1 Host: localhost Destination: /$file-moved Connection: close EOF like($r, qr/204 No Content/, 'copy file'); ok(fileexists("$d/$file_path-moved"), 'copy file exist'); $r = http(<<EOF); MOVE /$file HTTP/1.1 Host: localhost Destination: /$file-moved Connection: close EOF like($r, qr/204 No Content/, 'move file'); ok(!fileexists("$d/$file_path"), 'file moved'); $r = http(<<EOF); DELETE /$file-moved HTTP/1.1 Host: localhost Connection: close Content-Length: 0 EOF like($r, qr/204 No Content/, 'delete file'); ok(!fileexists("$d/$file_path-moved"), 'file deleted'); my $dir = "dir-%D0%BC%D0%B8"; my $dir_path = "dir-\x{043c}\x{0438}"; $r = http(<<EOF); MKCOL /$dir/ HTTP/1.1 Host: localhost Connection: close EOF like($r, qr/201 Created.*(Content-Length|\x0d\0a0\x0d\x0a)/ms, 'mkcol'); ok(fileexists("$d/$dir_path"), 'mkcol exist'); $r = http(<<EOF); COPY /$dir/ HTTP/1.1 Host: localhost Destination: /$dir-moved/ Connection: close EOF like($r, qr/201 Created.*(Content-Length|\x0d\0a0\x0d\x0a)/ms, 'copy dir'); ok(fileexists("$d/$dir_path-moved"), 'copy dir exist'); $r = http(<<EOF); MOVE /$dir/ HTTP/1.1 Host: localhost Destination: /$dir-moved/ Connection: close EOF like($r, qr/201 Created.*(Content-Length|\x0d\0a0\x0d\x0a)/ms, 'move dir'); ok(!fileexists("$d/$dir_path"), 'dir moved'); $r = http(<<EOF); DELETE /$dir-moved/ HTTP/1.1 Host: localhost Connection: close EOF unlike($r, qr/200 OK.*Content-Length|Transfer-Encoding/ms, 'delete dir'); ok(!fileexists("$d/$dir_path-moved"), 'dir deleted'); ############################################################################### sub fileexists { my ($path) = @_; return -e $path if $^O ne 'MSWin32'; $path = encode("UTF-16LE", $path . "\0"); my $attr = Win32API::File::GetFileAttributesW($path); return 0 if $attr == Win32API::File::INVALID_HANDLE_VALUE(); return $attr; } ###############################################################################