Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
TLMSP curl
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CYBER - Cyber Security
TS 103 523 MSP
TLMSP
TLMSP curl
Commits
8e735d1e
Commit
8e735d1e
authored
24 years ago
by
Daniel Stenberg
Browse files
Options
Downloads
Patches
Plain Diff
converted shell script to perl
parent
aa9a6028
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
tests/README
+12
-1
12 additions, 1 deletion
tests/README
tests/httpserver.pl
+58
-4
58 additions, 4 deletions
tests/httpserver.pl
tests/runtests.pl
+275
-0
275 additions, 0 deletions
tests/runtests.pl
tests/runtests.sh
+0
-220
0 additions, 220 deletions
tests/runtests.sh
with
345 additions
and
225 deletions
tests/README
+
12
−
1
View file @
8e735d1e
...
...
@@ -13,6 +13,9 @@ Run:
'make test'. This invokes the 'runtests.sh' shell script. Edit the top
variables of that script in case you have some specific needs.
The script breaks on the first test that doesn't do OK. Run the script
with -v for more verbose output.
Logs:
All logs are generated in the logs/ subdirctory (it is emtpied first
in the runtests.sh script)
...
...
@@ -29,4 +32,12 @@ Data:
httpN.txt: the full dump of the HTTP protocol communication that curl is
expected to use when performing this test
replyN.txt: the full dump the server should reply to curl for this test
replyN.txt: the full dump the server should reply to curl for this test.
If the final result that curl should've got is not in this
file, you can instead name the file replyN0001.txt. This enables
you to fiddle more. ;-)
FIX:
* Make httpserver.pl work when we PUT without Content-Length:
This diff is collapsed.
Click to expand it.
tests/httpserver.pl
+
58
−
4
View file @
8e735d1e
#!/usr/bin/perl
use
Socket
;
use
Carp
;
use
FileHandle
;
sub
spawn
;
# forward declaration
sub
logmsg
{
#print "$0 $$: @_ at ", scalar localtime, "\n"
}
my
$port
=
shift
||
$ARGV
[
0
];
my
$port
=
$ARGV
[
0
];
my
$proto
=
getprotobyname
('
tcp
');
$port
=
$
1
if
$port
=~
/(\d+)/
;
# untaint port number
if
(
$ARGV
[
1
]
=~
/^ftp$/i
)
{
$protocol
=
"
FTP
";
}
else
{
$protocol
=
"
HTTP
";
}
socket
(
Server
,
PF_INET
,
SOCK_STREAM
,
$proto
)
||
die
"
socket: $!
";
setsockopt
(
Server
,
SOL_SOCKET
,
SO_REUSEADDR
,
pack
("
l
",
1
))
||
die
"
setsockopt: $!
";
bind
(
Server
,
sockaddr_in
(
$port
,
INADDR_ANY
))
||
die
"
bind: $!
";
listen
(
Server
,
SOMAXCONN
)
||
die
"
listen: $!
";
logmsg
"
server started on port
$port
";
print
"
$protocol
server started on port
$port
\n
";
open
(
PID
,
"
>.server.pid
");
print
PID
$$
;
...
...
@@ -46,8 +55,53 @@ for ( $waitedpid = 0;
# this code is forked and run
spawn
sub
{
my
(
$request
,
$path
,
$ver
,
$left
,
$cl
);
if
(
$protocol
eq
"
FTP
")
{
# < 220 pm1 FTP server (SunOS 5.7) ready.
# > USER anonymous
# < 331 Guest login ok, send ident as password.
# > PASS curl_by_daniel@haxx.se
# < 230 Guest login ok, access restrictions apply.
# * We have successfully logged in
# * Connected to pm1 (193.15.23.1)
# > PASV
# < 227 Entering Passive Mode (193,15,23,1,231,59)
# * Connecting to pm1 (193.15.23.1) port 59195
# > TYPE A
# < 200 Type set to A.
# > LIST
# < 150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes).
# * Getting file with size: -1
print
"
220-running the curl suite test server
\r\n
",
"
220-running the curl suite test server
\r\n
",
"
220 running the curl suite test server
\r\n
";
STDOUT
->
autoflush
(
1
);
while
(
1
)
{
last
unless
defined
(
$_
=
<
STDIN
>
);
# Remove trailing CRLF.
s/[\n\r]+$//
;
unless
(
m/^([A-Z]{3,4})\s?(.*)/i
)
{
print
STDERR
"
badly formed command received:
"
.
$_
;
exit
0
;
}
print
STDERR
"
GOT:
$_
\n
";
}
exit
;
}
# otherwise, we're doing HTTP
while
(
<
STDIN
>
)
{
if
(
$_
=~
/(
GET|POST|HEAD
) (.*) HTTP\/1.(\d)/
)
{
if
(
$_
=~
/(
[A-Z]*
) (.*) HTTP\/1.(\d)/
)
{
$request
=
$
1
;
$path
=
$
2
;
$ver
=
$
3
;
...
...
@@ -68,7 +122,7 @@ for ( $waitedpid = 0;
if
(
!
$left
&&
(
$_
eq
"
\r\n
")
or
(
$_
eq
""))
{
if
(
$request
eq
"
POST
"
)
{
if
(
$request
=~
/^(POST|PUT)$/
)
{
$left
=
$cl
;
}
else
{
...
...
This diff is collapsed.
Click to expand it.
tests/runtests.pl
0 → 100755
+
275
−
0
View file @
8e735d1e
#!/usr/bin/perl
#
# Main curl test script, in perl to run on more platforms
#
#######################################################################
# These should be the only variables that might be needed to get edited:
$HOSTIP
=
"
127.0.0.1
";
$HOSTPORT
=
8999
;
$CURL
=
"
../src/curl
";
$LOGDIR
=
"
log
";
$TESTDIR
=
"
data
";
$SERVERIN
=
"
$LOGDIR
/server.input
";
$CURLOUT
=
"
$LOGDIR
/curl.out
";
# Normally, all test cases should be run, but at times it is handy to
# simply run a particular one:
$TESTCASES
=
"
all
";
# To run specific test cases, set them like:
# $TESTCASES="1 2 3 7 8";
#######################################################################
# No variables below this point should need to be modified
#
$PIDFILE
=
"
.server.pid
";
sub
stopserver
{
# check for pidfile
if
(
-
f
$PIDFILE
)
{
$PID
=
`
cat
$PIDFILE
`;
kill
(
9
,
$PID
);
# die!
unlink
$PIDFILE
;
# server is killed
}
}
sub
runserver
{
# check for pidfile
if
(
-
f
$PIDFILE
)
{
$PID
=
`
cat
$PIDFILE
`;
if
(
$PID
ne
""
&&
kill
(
0
,
$PID
))
{
$STATUS
=
"
httpd (pid
$PID
) running
";
$RUNNING
=
1
;
}
else
{
$STATUS
=
"
httpd (pid
$PID
?) not running
";
$RUNNING
=
0
;
}
}
else
{
$STATUS
=
"
httpd (no pid file) not running
";
$RUNNING
=
0
;
}
if
(
$RUNNING
!=
1
)
{
system
("
perl ./httpserver.pl
$HOSTPORT
&
");
sleep
1
;
# give it a little time to start
}
else
{
print
"
$STATUS
\n
";
# verify that our server is one one running on this port:
$data
=
`
$CURL
--silent -i
$HOSTIP
:
$HOSTPORT
/verifiedserver
`;
if
(
$data
!~
/WE ROOLZ/
)
{
print
"
Another HTTP server is running on port
$HOSTPORT
\n
",
"
Edit runtests.pl to use another port and rerun the test script
\n
";
exit
;
}
print
"
The running HTTP server has been verified to be our server
\n
";
}
}
sub
filteroff
{
my
$infile
=
$_
[
0
];
my
$filter
=
$_
[
1
];
my
$ofile
=
$_
[
2
];
open
(
IN
,
"
<
$infile
")
||
return
1
;
open
(
OUT
,
"
>
$ofile
")
||
return
1
;
# print "FILTER: off $filter from $infile to $ofile\n";
# system("egrep -v \"$strip\" < $first > $LOGDIR/generated.tmp");
while
(
<
IN
>
)
{
$_
=~
s/$filter//
;
print
OUT
$_
;
}
close
(
IN
);
close
(
OUT
);
return
0
;
}
sub
compare
{
# filter off the 4 pattern before compare!
my
$first
=
$_
[
0
];
my
$sec
=
$_
[
1
];
my
$text
=
$_
[
2
];
my
$strip
=
$_
[
3
];
if
(
$strip
ne
"")
{
filteroff
(
$first
,
$strip
,
"
$LOGDIR
/generated.tmp
");
filteroff
(
$sec
,
$strip
,
"
$LOGDIR
/stored.tmp
");
# system("egrep -v \"$strip\" < $sec > $LOGDIR/stored.tmp");
$first
=
"
$LOGDIR
/generated.tmp
";
$sec
=
"
$LOGDIR
/stored.tmp
";
}
$res
=
system
("
cmp
$first
$sec
");
$res
/=
256
;
if
(
$res
!=
0
)
{
print
"
$text
FAILED
\n
";
return
1
;
}
print
"
$text
OK
\n
";
return
0
;
}
sub
displaydata
{
my
$version
=
`
$CURL
-V
`;
my
$hostname
=
`
hostname
`;
my
$hosttype
=
`
uname -a
`;
print
"
Running tests on:
\n
",
"
$version
",
"
host
$hostname
",
"
system
$hosttype
";
}
sub
singletest
{
my
$NUMBER
=
$_
[
0
];
my
$REPLY
=
"
${TESTDIR}
/reply
${NUMBER}
.txt
";
if
(
-
f
"
$TESTDIR
/reply
${NUMBER}
0001.txt
"
)
{
# we use this file instead to check the final output against
$REPLY
=
"
$TESTDIR
/reply
${NUMBER}
0001.txt
";
}
# curl command to run
$CURLCMD
=
"
$TESTDIR
/command
$NUMBER
.txt
";
# this is the valid HTTP we should generate
$HTTP
=
"
$TESTDIR
/http
$NUMBER
.txt
";
# name of the test
$DESC
=
`
cat
$TESTDIR
/name
$NUMBER
.txt | tr -d '
\
012'
`;
# redirected stdout here
$STDOUT
=
"
$LOGDIR
/stdout
$NUMBER
";
# if this file exist, we verify that the stdout contained this:
$VALIDOUT
=
"
$TESTDIR
/stdout
$NUMBER
.txt
";
print
"
test
$NUMBER
... [
$DESC
]
\n
";
# get the command line options to use
open
(
COMMAND
,
"
<
$CURLCMD
");
$cmd
=<
COMMAND
>
;
chomp
$cmd
;
close
(
COMMAND
);
# make some nice replace operations
$cmd
=~
s/%HOSTIP/$HOSTIP/g
;
$cmd
=~
s/%HOSTPORT/$HOSTPORT/g
;
$cmd
=~
s/%HOSTNAME/$HOSTNAME/g
;
# run curl, add -v for debug information output
$CMDLINE
=
"
$CURL
--output
$CURLOUT
--include --silent
$cmd
>
$STDOUT
";
if
(
$verbose
)
{
print
"
$CMDLINE
\n
";
}
# run the command line we built
$res
=
system
("
$CMDLINE
");
$res
/=
256
;
if
(
$res
!=
0
)
{
print
"
Failed to invoke curl for test
$NUMBER
\n
";
}
else
{
# verify the received data
$res
=
compare
(
$CURLOUT
,
$REPLY
,
"
data
");
$res
/=
256
;
if
(
$res
)
{
exit
;
}
# verify the sent request
$res
=
compare
(
$SERVERIN
,
$HTTP
,
"
http
",
"
^(User-Agent:|--curl|Content-Type: multipart/form-data; boundary=).*
\r\n
");
$res
/=
256
;
# The strip pattern above is for stripping off User-Agent: since
# that'll be different in all versions, and the lines in a
# RFC1876-post that are randomly generated and therefore are doomed to
# always differ!
if
(
$res
)
{
exit
;
}
if
(
-
r
"
$VALIDOUT
"
)
{
$res
=
compare
(
$STDOUT
,
$VALIDOUT
,
"
stdout
");
$res
/=
256
;
if
(
$res
)
{
exit
;
}
}
# remove the stdout file
unlink
("
$STDOUT
");
}
return
0
;
}
#######################################################################
# Check options to this test program
#
if
(
$ARGV
[
0
]
eq
"
-v
")
{
$verbose
=
1
;
}
#######################################################################
# Output curl version and host info being tested
#
displaydata
();
#######################################################################
# remove and recreate logging directory:
#
system
("
rm -rf
$LOGDIR
");
mkdir
("
$LOGDIR
",
0777
);
#######################################################################
# First, start the TCP server
#
runserver
();
#######################################################################
# The main test-loop
#
if
(
$TESTCASES
eq
"
all
")
{
$TESTCASES
=
`
ls -1
$TESTDIR
/command*.txt | sed -e 's/[a-z
\
/
\
.]*//g' | sort -n
`;
}
foreach
$testnum
(
split
("
",
$TESTCASES
))
{
singletest
(
$testnum
);
# loop for next test
}
#######################################################################
# Tests done, stop the server
#
stopserver
();
This diff is collapsed.
Click to expand it.
tests/runtests.sh
deleted
100755 → 0
+
0
−
220
View file @
aa9a6028
#!/bin/sh
#
# Main curl test script
#
#######################################################################
# These should be the only variables that might be needed to get edited:
HOSTIP
=
127.0.0.1
HOSTPORT
=
8999
CURL
=
../src/curl
LOGDIR
=
log
SERVERIN
=
$LOGDIR
/server.input
CURLOUT
=
$LOGDIR
/curl.out
NC
=
nc
# Normally, all test cases should be run, but at times it is handy to
# simply run a particular one:
TESTCASES
=
all
# To run specific test cases, set them like:
# TESTCASES="1 2 3 7 8"
#######################################################################
# No variables below this point should need to be modified
#
PIDFILE
=
".server.pid"
stopserver
()
{
# check for pidfile
if
[
-f
$PIDFILE
]
;
then
PID
=
`
cat
$PIDFILE
`
kill
-9
$PID
rm
-f
$PIDFILE
# server is killed
fi
}
runserver
()
{
# check for pidfile
if
[
-f
$PIDFILE
]
;
then
PID
=
`
cat
$PIDFILE
`
if
[
"x
$PID
"
!=
"x"
]
&&
kill
-0
$PID
2>/dev/null
;
then
STATUS
=
"httpd (pid
$PID
) running"
RUNNING
=
1
else
STATUS
=
"httpd (pid
$PID
?) not running"
RUNNING
=
0
fi
else
STATUS
=
"httpd (no pid file) not running"
RUNNING
=
0
fi
if
[
$RUNNING
!=
"1"
]
;
then
./httpserver.pl
$HOSTPORT
&
sleep
1
# give it a little time to start
else
echo
$STATUS
# verify that our server is one one running on this port:
data
=
`
$CURL
--silent
-i
$HOSTIP
:
$HOSTPORT
/verifiedserver
`
;
if
{
echo
$data
|
grep
-v
"WE ROOLZ"
>
/dev/null 2>&1
;
}
then
echo
"Another HTTP server is running on port
$HOSTPORT
"
echo
"Edit runtests.sh to use another port and rerun the test script"
exit
fi
echo
"The running HTTP server has been verified to be our test server"
fi
}
compare
()
{
# filter off the $4 pattern before compare!
first
=
"
$1
"
sec
=
"
$2
"
text
=
"
$3
"
strip
=
"
$4
"
if
test
-n
"
$strip
"
;
then
egrep
-v
"
$strip
"
<
$first
>
$LOGDIR
/generated.tmp
egrep
-v
"
$strip
"
<
$sec
>
$LOGDIR
/stored.tmp
first
=
"
$LOGDIR
/generated.tmp"
sec
=
"
$LOGDIR
/stored.tmp"
fi
cmp
$first
$sec
if
[
$?
!=
"0"
]
;
then
echo
"
$text
FAILED"
return
1
else
echo
"
$text
OK"
return
0
fi
}
singletest
()
{
NUMBER
=
"
$1
"
REPLY
=
data/reply
$NUMBER
.txt
CURLCMD
=
data/command
$NUMBER
.txt
HTTP
=
data/http
$NUMBER
.txt
DESC
=
`
cat
data/name
$NUMBER
.txt |
tr
-d
'\012'
`
echo
"test
$NUMBER
... [
$DESC
]"
# get the command line options to use
cmd
=
`
sed
-e
"s/%HOSTIP/
$HOSTIP
/g"
\
-e
"s/%HOSTPORT/
$HOSTPORT
/g"
\
-e
"s/%HOSTNAME/
$HOSTNAME
/g"
<
$CURLCMD
`
# run curl
CMDLINE
=
"
$CURL
-o
$CURLOUT
-i --silent
$cmd
"
if
test
-n
"
$verbose
"
;
then
echo
"
$CMDLINE
"
fi
# we do it the eval way to deal with quotes and similar stuff
eval
$CMDLINE
if
[
$?
!=
"0"
]
;
then
echo
"Failed to invoke curl for test
$NUMBER
"
else
# when curl is done, the server has closed down as well
# verify the received data
compare
$CURLOUT
$REPLY
" fetch"
if
[
$?
!=
"0"
]
;
then
exit
;
fi
# verify the sent request
compare
$SERVERIN
$HTTP
" command"
\
"(User-Agent:|^--curl|Content-Type: multipart/form-data; boundary=)"
#
# The strip pattern above is for stripping off User-Agent: since that'll
# be different in all versions, and the lines in a RFC1876-post that are
# randomly generated and therefore are doomed to always differ!
#
if
[
$?
!=
"0"
]
;
then
exit
;
fi
fi
return
0
}
#######################################################################
# Check options to this test program
#
if
test
"
$1
"
=
"-v"
;
then
verbose
=
"1"
fi
if
test
-n
"
$NEWSETUP
"
;
then
#######################################################################
# Make sure the Host: lines are correct for this setup
#
HOST
=
"
$HOSTIP
:
$HOSTPORT
"
for
test
in
data/http
*
.txt
;
do
sed
-e
"s/Host:
\(
[0-9.:]*
\)
/Host:
$HOST
/g"
<
$test
>
$test
.tmp
mv
$test
.tmp
$test
done
fi
#######################################################################
# Output curl version being tested
#
VERSION
=
`
$CURL
-V
`
HOSTNAME
=
`
hostname
`
echo
"Running tests on:"
echo
$VERSION
echo
"host
$HOSTNAME
"
#######################################################################
# remove and recreate logging directory:
#
rm
-rf
$LOGDIR
mkdir
$LOGDIR
#######################################################################
# First, start the TCP server
#
runserver
#######################################################################
# The main test-loop
#
if
[
x
$TESTCASES
=
xall
]
;
then
TESTCASES
=
`
ls
-1
data/command
*
.txt |
sed
-e
's/[a-z\/\.]*//g'
`
fi
for
NUMBER
in
$TESTCASES
;
do
singletest
$NUMBER
# loop for next test
done
#######################################################################
# Tests done, stop server
#
stopserver
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment