wget/testenv/Test-hsts.py

81 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
from sys import exit
from test.http_test import HTTPTest
from test.base_test import HTTPS, SKIP_TEST
from misc.wget_file import WgetFile
import time
import os
"""
This test makes sure Wget can parse a given HSTS database and apply the indicated HSTS policy.
"""
print (os.getenv('SSL_TESTS'))
if os.getenv('SSL_TESTS') is None:
exit (SKIP_TEST)
def hsts_database_path():
hsts_file = ".wget-hsts-testenv"
return os.path.abspath(hsts_file)
def create_hsts_database(path, host, port):
# we want the current time as an integer,
# not as a floating point
curtime = int(time.time())
max_age = "123456"
f = open(path, "w")
f.write("# dummy comment\n")
f.write(host + "\t" + str(port) + "\t0\t" + str(curtime) + "\t" + max_age + "\n")
f.close()
File_Name = "hw"
File_Content = "Hello, world!"
File = WgetFile(File_Name, File_Content)
Hsts_File_Path = hsts_database_path()
CAFILE = os.path.abspath(os.path.join(os.getenv('srcdir', '.'), 'certs', 'ca-cert.pem'))
WGET_OPTIONS = "--hsts-file=" + Hsts_File_Path + " --ca-certificate=" + CAFILE
WGET_URLS = [[File_Name]]
Files = [[File]]
Servers = [HTTPS]
Requests = ["http"]
ExpectedReturnCode = 0
ExpectedDownloadedFiles = [File]
pre_test = {
"ServerFiles" : Files,
"Domains" : ["localhost"]
}
post_test = {
"ExpectedFiles" : ExpectedDownloadedFiles,
"ExpectedRetCode" : ExpectedReturnCode,
}
test_options = {
"WgetCommands" : WGET_OPTIONS,
"Urls" : WGET_URLS
}
test = HTTPTest(
pre_hook = pre_test,
post_hook = post_test,
test_params = test_options,
protocols = Servers,
req_protocols = Requests
)
# start the web server and create the temporary HSTS database
test.setup()
create_hsts_database(Hsts_File_Path, 'localhost', test.port)
err = test.begin()
# remove the temporary HSTS database
os.unlink(hsts_database_path())
exit(err)