Commit 54b9c201 authored by Alex Brainman's avatar Alex Brainman

net/http/cgi: another attempt to fix windows tests

Also enables TestDirWindows test on windows.

Fixes #4401.

R=golang-dev, bradfitz
CC=golang-dev, krautz
https://golang.org/cl/6847072
parent 9466c27f
...@@ -404,7 +404,8 @@ func TestDirUnix(t *testing.T) { ...@@ -404,7 +404,8 @@ func TestDirUnix(t *testing.T) {
} }
func TestDirWindows(t *testing.T) { func TestDirWindows(t *testing.T) {
if skipTest(t) || runtime.GOOS != "windows" { if runtime.GOOS != "windows" {
t.Logf("Skipping windows specific test.")
return return
} }
...@@ -414,6 +415,7 @@ func TestDirWindows(t *testing.T) { ...@@ -414,6 +415,7 @@ func TestDirWindows(t *testing.T) {
var err error var err error
perl, err = exec.LookPath("perl") perl, err = exec.LookPath("perl")
if err != nil { if err != nil {
t.Logf("Skipping test: perl not found.")
return return
} }
perl, _ = filepath.Abs(perl) perl, _ = filepath.Abs(perl)
...@@ -456,6 +458,7 @@ func TestEnvOverride(t *testing.T) { ...@@ -456,6 +458,7 @@ func TestEnvOverride(t *testing.T) {
var err error var err error
perl, err = exec.LookPath("perl") perl, err = exec.LookPath("perl")
if err != nil { if err != nil {
t.Logf("Skipping test: perl not found.")
return return
} }
perl, _ = filepath.Abs(perl) perl, _ = filepath.Abs(perl)
......
...@@ -10,23 +10,6 @@ use Cwd; ...@@ -10,23 +10,6 @@ use Cwd;
binmode STDOUT; binmode STDOUT;
sub on_windows {
return $^O eq 'MSWin32' || $^O eq 'msys';
}
# normalize_windows_path normalizes the various Windows Perl path
# formats into Go's format.
sub normalize_windows_path {
my $dir = shift;
return $dir unless on_windows();
$dir =~ s!^[a-z]:!uc($&)!e;
if ($dir =~ s!^/([a-zA-Z])/!!) {
$dir = uc($1) . ":\\$dir";
}
$dir =~ s!/!\\!g;
return $dir;
}
my $q = MiniCGI->new; my $q = MiniCGI->new;
my $params = $q->Vars; my $params = $q->Vars;
...@@ -35,40 +18,43 @@ if ($params->{"loc"}) { ...@@ -35,40 +18,43 @@ if ($params->{"loc"}) {
exit(0); exit(0);
} }
my $NL = "\r\n"; print "Content-Type: text/html\r\n";
$NL = "\n" if $params->{mode} eq "NL"; print "X-CGI-Pid: $$\r\n";
print "X-Test-Header: X-Test-Value\r\n";
my $p = sub { print "\r\n";
print "$_[0]$NL";
};
# With carriage returns
$p->("Content-Type: text/html");
$p->("X-CGI-Pid: $$");
$p->("X-Test-Header: X-Test-Value");
$p->("");
if ($params->{"bigresponse"}) { if ($params->{"bigresponse"}) {
for (1..1024) { for (1..1024) {
print "A" x 1024, "\n"; print "A" x 1024, "\r\n";
} }
exit 0; exit 0;
} }
print "test=Hello CGI\n"; print "test=Hello CGI\r\n";
foreach my $k (sort keys %$params) { foreach my $k (sort keys %$params) {
print "param-$k=$params->{$k}\n"; print "param-$k=$params->{$k}\r\n";
} }
foreach my $k (sort keys %ENV) { foreach my $k (sort keys %ENV) {
my $clean_env = $ENV{$k}; my $clean_env = $ENV{$k};
$clean_env =~ s/[\n\r]//g; $clean_env =~ s/[\n\r]//g;
print "env-$k=$clean_env\n"; print "env-$k=$clean_env\r\n";
} }
my $dir = normalize_windows_path(getcwd()); # NOTE: msys perl returns /c/go/src/... not C:\go\....
print "cwd=$dir\n"; my $dir = getcwd();
if ($^O eq 'MSWin32' || $^O eq 'msys') {
if ($dir =~ /^.:/) {
$dir =~ s!/!\\!g;
} else {
my $cmd = $ENV{'COMSPEC'} || 'c:\\windows\\system32\\cmd.exe';
$cmd =~ s!\\!/!g;
$dir = `$cmd /c cd`;
chomp $dir;
}
}
print "cwd=$dir\r\n";
# A minimal version of CGI.pm, for people without the perl-modules # A minimal version of CGI.pm, for people without the perl-modules
# package installed. (CGI.pm used to be part of the Perl core, but # package installed. (CGI.pm used to be part of the Perl core, but
...@@ -102,24 +88,3 @@ sub _urldecode { ...@@ -102,24 +88,3 @@ sub _urldecode {
$v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
return $v; return $v;
} }
package Tests;
sub test_normalize_windows_paths {
my @tests = (
{in => "C:\\foo\\bar", want => "C:\\foo\\bar"},
{in => "C:/foo/bar", want => "C:\\foo\\bar"},
{in => "c:/foo/bar", want => "C:\\foo\\bar"},
{in => "/c/foo/bar", want => "C:\\foo\\bar"},
);
foreach my $tt (@tests) {
my $got = ::normalize_windows_path($tt->{in});
unless ($got eq $tt->{want}) {
die "For path $tt->{in}, normalize = $got; want $tt->{want}\n";
}
}
}
BEGIN {
test_normalize_windows_paths() if ::on_windows();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment