Refined some of the diagnostics error code restrictions, added invalid URL check

This commit is contained in:
Michael Lazar 2020-01-12 18:23:31 -05:00
parent 1d59053436
commit c5d5c8d472
1 changed files with 33 additions and 7 deletions

View File

@ -190,6 +190,22 @@ class BaseCheck:
style = "success" if response.status.startswith("5") else "failure"
log(f"Received status of {response.status!r}", style)
def assert_proxy_refused(self, response: GeminiResponse) -> None:
"""
Helper method to assert that a response returned a permanent.
"""
log("Status should return a failure code (53 PROXY REQUEST REFUSED)")
style = "success" if response.status == "53" else "failure"
log(f"Received status of {response.status!r}", style)
def assert_bad_request(self, response: GeminiResponse) -> None:
"""
Helper method to assert that a response returned a permanent.
"""
log("Status should return a failure code (59 BAD REQUEST)")
style = "success" if response.status == "59" else "failure"
log(f"Received status of {response.status!r}", style)
class IPv4Address(BaseCheck):
"""Establish a connection over an IPv4 address"""
@ -542,7 +558,7 @@ class URLWrongPort(BaseCheck):
def check(self) -> None:
url = f"gemini://{self.args.host}:443/\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_proxy_refused(response)
class URLWrongHost(BaseCheck):
@ -551,7 +567,7 @@ class URLWrongHost(BaseCheck):
def check(self) -> None:
url = f"gemini://wikipedia.org/\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_proxy_refused(response)
class URLSchemeHTTP(BaseCheck):
@ -560,7 +576,7 @@ class URLSchemeHTTP(BaseCheck):
def check(self) -> None:
url = f"http://{self.netloc}/\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_proxy_refused(response)
class URLSchemeHTTPS(BaseCheck):
@ -569,7 +585,7 @@ class URLSchemeHTTPS(BaseCheck):
def check(self) -> None:
url = f"https://{self.netloc}/\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_proxy_refused(response)
class URLSchemeGopher(BaseCheck):
@ -578,7 +594,7 @@ class URLSchemeGopher(BaseCheck):
def check(self) -> None:
url = f"gopher://{self.netloc}/\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_proxy_refused(response)
class URLEmpty(BaseCheck):
@ -587,7 +603,7 @@ class URLEmpty(BaseCheck):
def check(self) -> None:
url = f"\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_bad_request(response)
class URLRelative(BaseCheck):
@ -596,7 +612,16 @@ class URLRelative(BaseCheck):
def check(self) -> None:
url = f"/\r\n"
response = self.make_request(url)
self.assert_permanent_failure(response)
self.assert_bad_request(response)
class URLInvalid(BaseCheck):
"""Random text should not be accepted by the server"""
def check(self) -> None:
url = f"Hello Gemini!\r\n"
response = self.make_request(url)
self.assert_bad_request(response)
class URLDotEscape(BaseCheck):
@ -635,6 +660,7 @@ CHECKS = [
URLSchemeGopher,
URLEmpty,
URLRelative,
URLInvalid,
URLDotEscape,
]