diff --git a/tests/FILEFORMAT.md b/tests/FILEFORMAT.md index 0f5ae7f512..6f6e71bb74 100644 --- a/tests/FILEFORMAT.md +++ b/tests/FILEFORMAT.md @@ -21,6 +21,25 @@ variables are substituted by the their respective contents and the output version of the test file is stored as `log/testNUM`. That version is what will be read and used by the test servers. +## Base64 Encoding + +In the preprocess stage, a special instruction can be used to have runtests.pl +base64 encode a certain section and insert in the generated output file. This +is in particular good for test cases where the test tool is expected to pass +in base64 encoded content that might use dynamic information that is unique +for this particular test invocation, like the server port number. + +To insert a base64 encoded string into the output, use this syntax: + + %b64[ data to encode ]b64% + +The data to encode can then use any of the existing variables mentioned below, +or even percent-encoded individual bytes. As an example, insert the HTTP +server's port number (in ASCII) followed by a space and the hexadecimal byte +9a: + + %b64[%HTTPPORT %9a]b64% + # Variables When the test is preprocessed, a range of "variables" in the test file will be diff --git a/tests/data/test842 b/tests/data/test842 index 1d9181e175..2b5ae1c18a 100644 --- a/tests/data/test842 +++ b/tests/data/test842 @@ -15,7 +15,7 @@ RFC7628 AUTH OAUTHBEARER REPLY AUTHENTICATE + -REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== A002 OK AUTHENTICATE completed +REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% A002 OK AUTHENTICATE completed From: me@somewhere @@ -42,9 +42,6 @@ IMAP OAuth 2.0 (OAUTHBEARER) authentication # The protocol section doesn't support ways of specifying the raw data in the # base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );" - # @@ -53,7 +50,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' A001 CAPABILITY A002 AUTHENTICATE OAUTHBEARER -bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +%b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% A003 SELECT 842 A004 FETCH 1 BODY[] A005 LOGOUT diff --git a/tests/data/test843 b/tests/data/test843 index bd39dd9071..131188933d 100644 --- a/tests/data/test843 +++ b/tests/data/test843 @@ -41,11 +41,6 @@ IMAP OAuth 2.0 (OAUTHBEARER) authentication with initial response 'imap://%HOSTIP:%IMAPPORT/843/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );" - # @@ -53,7 +48,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' A001 CAPABILITY -A002 AUTHENTICATE OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +A002 AUTHENTICATE OAUTHBEARER %b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% A003 SELECT 843 A004 FETCH 1 BODY[] A005 LOGOUT diff --git a/tests/data/test844 b/tests/data/test844 index c5093d2b8c..8573bc2fd6 100644 --- a/tests/data/test844 +++ b/tests/data/test844 @@ -15,9 +15,7 @@ RFC7628 AUTH OAUTHBEARER REPLY AUTHENTICATE + -REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + -eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0= -REPLY AQ== A002 NO Authentication failed +REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% A002 NO Authentication failed @@ -33,11 +31,6 @@ IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation 'imap://%HOSTIP:%IMAPPORT/844/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );" - # @@ -53,8 +46,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' A001 CAPABILITY A002 AUTHENTICATE OAUTHBEARER -bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== -AQ== +%b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% diff --git a/tests/data/test845 b/tests/data/test845 index 70562c7ab3..449eef3536 100644 --- a/tests/data/test845 +++ b/tests/data/test845 @@ -33,11 +33,6 @@ IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response 'imap://%HOSTIP:%IMAPPORT/845/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );" - # @@ -52,8 +47,8 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' # transfer and such a connection will not get a "LOGOUT" A001 CAPABILITY -A002 AUTHENTICATE OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== -AQ== +A002 AUTHENTICATE OAUTHBEARER %b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% +%b64[%01]b64% diff --git a/tests/data/test887 b/tests/data/test887 index 35419b5027..ccf3649552 100644 --- a/tests/data/test887 +++ b/tests/data/test887 @@ -17,7 +17,7 @@ RFC7628 AUTH OAUTHBEARER REPLY AUTH + -REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +OK Login successful +REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%POP3PORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% +OK Login successful From: me@somewhere @@ -42,11 +42,6 @@ POP3 OAuth 2.0 (OAUTHBEARER) authentication pop3://%HOSTIP:%POP3PORT/887 -u user --oauth2-bearer mF_9.B5f-4.1JqM -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );" - # @@ -55,7 +50,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' CAPA AUTH OAUTHBEARER -bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +%b64[n,a=user,%01host=127.0.0.1%01port=%POP3PORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% RETR 887 QUIT diff --git a/tests/data/test888 b/tests/data/test888 index 78463feaa8..465a2d0ce8 100644 --- a/tests/data/test888 +++ b/tests/data/test888 @@ -42,11 +42,6 @@ POP3 OAuth 2.0 (OAUTHBEARER) authentication with initial response pop3://%HOSTIP:%POP3PORT/888 -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );" - # @@ -54,7 +49,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' CAPA -AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +AUTH OAUTHBEARER %b64[n,a=user,%01host=127.0.0.1%01port=%POP3PORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% RETR 888 QUIT diff --git a/tests/data/test889 b/tests/data/test889 index 2edb371e95..9658d386c6 100644 --- a/tests/data/test889 +++ b/tests/data/test889 @@ -17,7 +17,7 @@ RFC7628 AUTH OAUTHBEARER REPLY AUTH + -REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0 +REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%POP3PORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0 REPLY AQ== -ERR Authentication failed @@ -34,11 +34,6 @@ POP3 OAuth 2.0 (OAUTHBEARER) failure as continuation pop3://%HOSTIP:%POP3PORT/889 -u user --oauth2-bearer mF_9.B5f-4.1JqM -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );" - # @@ -54,7 +49,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' CAPA AUTH OAUTHBEARER -bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +%b64[n,a=user,%01host=127.0.0.1%01port=%POP3PORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% AQ== diff --git a/tests/data/test890 b/tests/data/test890 index ca0ccc7b5e..4d6701ab00 100644 --- a/tests/data/test890 +++ b/tests/data/test890 @@ -34,11 +34,6 @@ POP3 OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response pop3://%HOSTIP:%POP3PORT/890 -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );" - # @@ -53,7 +48,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' # transfer and such a connection will not get a "QUIT" CAPA -AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +AUTH OAUTHBEARER %b64[n,a=user,%01host=127.0.0.1%01port=%POP3PORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% AQ== diff --git a/tests/data/test946 b/tests/data/test946 index c6753dc1e1..aa88364fa3 100644 --- a/tests/data/test946 +++ b/tests/data/test946 @@ -16,7 +16,7 @@ RFC7628 AUTH OAUTHBEARER REPLY AUTH 334 OAUTHBEARER supported -REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 235 Authenticated +REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% 235 Authenticated @@ -35,11 +35,6 @@ mail body smtp://%HOSTIP:%SMTPPORT/946 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T - -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );" - # @@ -48,7 +43,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' EHLO 946 AUTH OAUTHBEARER -bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +%b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% MAIL FROM: RCPT TO: DATA diff --git a/tests/data/test947 b/tests/data/test947 index 03c3fbe37d..d2622be8d2 100644 --- a/tests/data/test947 +++ b/tests/data/test947 @@ -35,11 +35,6 @@ mail body smtp://%HOSTIP:%SMTPPORT/947 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T - -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );" - # @@ -47,7 +42,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' EHLO 947 -AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +AUTH OAUTHBEARER %b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% MAIL FROM: RCPT TO: DATA diff --git a/tests/data/test948 b/tests/data/test948 index 8385f0cd27..a6eadf5fa9 100644 --- a/tests/data/test948 +++ b/tests/data/test948 @@ -16,7 +16,7 @@ RFC7628 AUTH OAUTHBEARER REPLY AUTH 334 OAUTHBEARER supported -REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0 +REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0 REPLY AQ== 535 Username and Password not accepted. Learn more at\r\n535 http://support.example.com/mail/oauth @@ -36,11 +36,6 @@ mail body smtp://%HOSTIP:%SMTPPORT/948 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T - -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );" - # @@ -56,7 +51,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' EHLO 948 AUTH OAUTHBEARER -bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +%b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% AQ== diff --git a/tests/data/test949 b/tests/data/test949 index 3459400770..82064f19a6 100644 --- a/tests/data/test949 +++ b/tests/data/test949 @@ -36,11 +36,6 @@ mail body smtp://%HOSTIP:%SMTPPORT/949 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T - -# The protocol section doesn't support ways of specifying the raw data in the -# base64 encoded message so we must assert this - -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );" - # @@ -55,7 +50,7 @@ perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' # transfer and such a connection will not get a "QUIT" EHLO 949 -AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +AUTH OAUTHBEARER %b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.1JqM%01%01]b64% AQ== diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index a0b36e5de4..d587f453e3 100755 --- a/tests/ftpserver.pl +++ b/tests/ftpserver.pl @@ -83,6 +83,7 @@ my $proto = 'ftp'; # default server protocol my $srcdir; # directory where ftpserver.pl is located my $srvrname; # server name for presentation purposes my $cwd_testno; # test case numbers extracted from CWD command +my $testno = 0; # test case number (read from ftpserver.cmd) my $path = '.'; my $logdir = $path .'/log'; @@ -449,17 +450,14 @@ sub startsf { # Returns the given test's reply data # sub getreplydata { - my ($testno) = @_; + my ($num) = @_; my $testpart = ""; - $testno =~ s/^([^0-9]*)//; - if($testno > 10000) { - $testpart = $testno % 10000; - $testno = int($testno / 10000); + $num =~ s/^([^0-9]*)//; + if($num > 10000) { + $testpart = $num % 10000; } - loadtest("$srcdir/data/test$testno"); - my @data = getpart("reply", "data$testpart"); if((!@data) && ($testpart ne "")) { @data = getpart("reply", "data"); @@ -2093,7 +2091,8 @@ my @ftpdir=("total 20\r\n", logmsg "pass LIST data on data connection\n"; if($cwd_testno) { - loadtest("$srcdir/data/test$cwd_testno"); + loadtest("$logdir/test$cwd_testno") || + loadtest("$srcdir/data/test$cwd_testno"); my @data = getpart("reply", "data"); for(@data) { @@ -2156,7 +2155,8 @@ sub MDTM_ftp { $testno = int($testno / 10000); } - loadtest("$srcdir/data/test$testno"); + loadtest("$logdir/test$testno") || + loadtest("$srcdir/data/test$testno"); my @data = getpart("reply", "mdtm"); @@ -2209,7 +2209,8 @@ sub SIZE_ftp { $testno = int($testno / 10000); } - loadtest("$srcdir/data/test$testno"); + loadtest("$logdir/test$testno") || + loadtest("$srcdir/data/test$testno"); my @data = getpart("reply", "size"); @@ -2298,7 +2299,8 @@ sub RETR_ftp { $testno = int($testno / 10000); } - loadtest("$srcdir/data/test$testno"); + loadtest("$logdir/test$testno") || + loadtest("$srcdir/data/test$testno"); my @data = getpart("reply", "data$testpart"); @@ -2881,6 +2883,10 @@ sub customize { $nosave = 1; logmsg "FTPD: NOSAVE prevents saving of uploaded data\n"; } + elsif($_ =~ /^Testnum (\d+)/){ + $testno = $1; + logmsg "FTPD: run test case number: $testno\n"; + } } close(CUSTOM); } @@ -3069,6 +3075,8 @@ while(1) { $| = 1; &customize(); # read test control instructions + loadtest("$logdir/test$testno") || + loadtest("$srcdir/data/test$testno"); my $welcome = $commandreply{"welcome"}; if(!$welcome) { diff --git a/tests/runtests.pl b/tests/runtests.pl index cc70a10115..b25b3f456a 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -76,6 +76,7 @@ use strict; use warnings; use Cwd; use Digest::MD5 qw(md5); +use MIME::Base64; # Subs imported from serverhelp module use serverhelp qw( @@ -3338,6 +3339,20 @@ sub subVariables { $$thing =~ s/${prefix}H2CVER/$h2cver/g; } +sub subBase64 { + my ($thing) = @_; + + # cut out the base64 piece + if($$thing =~ s/%b64\[(.*)\]b64%/%%B64%%/i) { + my $d = $1; + # encode %NN characters + $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; + my $enc = encode_base64($d, ""); + # put the result into there + $$thing =~ s/%%B64%%/$enc/; + } +} + sub fixarray { my @in = @_; @@ -3560,16 +3575,21 @@ sub singletest { for my $s (@entiretest) { my $f = $s; subVariables(\$s, "%"); + subBase64(\$s); if($f ne $s) { $diff++; } print D $s; } close(D); + # remove the separate test file again if nothing was updated to keep # things simpler unlink($otest) if(!$diff); + # in case the process changed the file, reload it + loadtest("log/test${testnum}") if($diff); + # timestamp required servers verification end $timesrvrend{$testnum} = Time::HiRes::time();