#!/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)
