Running gemini server diagnostics check against dump.royniang.com:1965 ... [IPv4Address] Establish a connection over an IPv4 address Looking up IPv4 address for 'dump.royniang.com'  ✓ '185.193.127.25' Attempting to connect to 185.193.127.25:1965  ✓ Successfully established connection [IPv6Address] Establish a connection over an IPv6 address Looking up IPv6 address for 'dump.royniang.com'  Found IPv4-mapped address, skipping check [TLSVersion] Server must negotiate at least TLS v1.2, ideally TLS v1.3 Checking client library  'OpenSSL 1.1.1d 10 Sep 2019' Determining highest supported TLS version  ✓ Negotiated TLSv1.3 [TLSClaims] Certificate claims must be valid Checking "Not Valid Before" timestamp  ✓ 2019-11-24 17:40:17 UTC Checking "Not Valid After" timestamp  ✓ 2020-02-22 17:40:17 UTC Checking subject claim matches server hostname  {'subject': ((('commonName', 'dump.royniang.com'),),), 'subjectAltName': (('DNS', 'dump.royniang.com'),)}  ✓ Hostname 'dump.royniang.com' matches claim [TLSVerified] Certificate should be self-signed or have a trusted issuer Connecting over verified SSL socket  x [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076) [TLSRequired] Non-TLS requests should be refused Sending non-TLS request  ✓ ConnectionResetError(54, 'Connection reset by peer') [ConcurrentConnections] Server should support concurrent connections Attempting to establish two connections  Opening socket 1  Opening socket 2  Closing socket 2  Closing socket 1  ✓ Concurrent connections supported [Homepage] Request the gemini homepage Requesting URL  'gemini://dump.royniang.com/\r\n' Response header  '20 text/gemini\r\n' Status should return a success code (20 SUCCESS)  ✓ Received status of '20' Mime type should be "text/gemini"  ✓ 'text/gemini' Header should end with "\r\n"  ✓ '\r\n' Body should be non-empty  ✓ '!roy niang’s dump\n\n ◊...............' Body should terminate with a newline  ✓ '\n' Body should use "\r\n" line endings  x Invalid line ending '!roy niang’s dump\n' [HomepageRedirect] A URL with no trailing slash should redirect to the canonical resource Requesting URL  'gemini://dump.royniang.com\r\n' Response header  '20 text/gemini\r\n' Status should return code 31 (REDIRECT PERMANENT)  x '20' Meta should redirect to location "gemini://[hostname]/"  x 'text/gemini' Header should end with "\r\n"  ✓ '\r\n' Body should be empty  x '!roy niang’s dump\n\n ◊...............' [PageNotFound] Request a gemini URL that does not exist Requesting URL  'gemini://dump.royniang.com/09pdsakjo73hjn12id78\r\n' Response header  '51 Not found.\r\n' Status should return code 51 (NOT FOUND)  ✓ '51' Header should end with "\r\n"  ✓ '\r\n' Body should be empty  ✓ '' [RequestMissingCR] A request without a should timeout Requesting URL  'gemini://dump.royniang.com/\n' Response header  '20 text/gemini\r\n' No response should be received  x '20' [URLIncludePort] Send the URL with the port explicitly defined Requesting URL  'gemini://dump.royniang.com:1965/\r\n' Response header  '20 text/gemini\r\n' Status should return a success code (20 SUCCESS)  ✓ Received status of '20' [URLSchemeMissing] A URL without a scheme should be inferred as gemini Requesting URL  '//dump.royniang.com/\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a success code (20 SUCCESS)  x Received status of '50' [URLByIPAddress] Send the URL using the IPv4 address Requesting URL  'gemini://185.193.127.25:1965/\r\n' Response header  '50 This server does not proxy requests.\r\n' Verify that the status matches your desired behavior  '50' [URLInvalidUTF8Byte] Send a URL containing a non-UTF8 byte sequence Requesting URL  'gemini://dump.royniang.com/\udcdc\r\n' Response header  '' Connection should either drop, or return 59 (BAD REQUEST)  x None [URLMaxSize] Send a 1024 byte URL, the maximum allowed size Requesting URL  'gemini://dump.royniang.com/0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\r\n' Response header  '51 Not found.\r\n' Status should return code 51 (NOT FOUND)  ✓ '51' [URLAboveMaxSize] Send a 1025 byte URL, above the maximum allowed size Requesting URL  'gemini://dump.royniang.com/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\r\n' Response header  '51 Not found.\r\n' Connection should either drop, or return 59 (BAD REQUEST)  x '51' [URLWrongPort] A URL with an incorrect port number should be rejected Requesting URL  'gemini://dump.royniang.com:443/\r\n' Response header  '20 text/gemini\r\n' Status should return a failure code (5X PERMANENT FAILURE)  x Received status of '20' [URLWrongHost] A URL with a foreign hostname should be rejected Requesting URL  'gemini://wikipedia.org/\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '50' [URLSchemeHTTP] Send a URL with an HTTP scheme Requesting URL  'http://dump.royniang.com/\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '50' [URLSchemeHTTPS] Send a URL with an HTTPS scheme Requesting URL  'https://dump.royniang.com/\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '50' [URLSchemeGopher] Send a URL with a Gopher scheme Requesting URL  'gopher://dump.royniang.com/\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '50' [URLEmpty] Empty URLs should not be accepted by the server Requesting URL  '\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '50' [URLRelative] Relative URLs should not be accepted by the server Requesting URL  '/\r\n' Response header  '50 This server does not proxy requests.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '50' [URLDotEscape] A URL should not be able to escape the root using dot notation Requesting URL  'gemini://dump.royniang.com/../../\r\n' Response header  '51 Not found.\r\n' Status should return a failure code (5X PERMANENT FAILURE)  ✓ Received status of '51' Done!