commit 364f10dbcd3b053730a4ad47042e0d8222aada47 from: Omar Polo date: Sun Jan 17 11:34:06 2021 UTC add runtime tests for the server commit - 76fd55f437ac4a738419dc8d16d4aaff98b58a40 commit + 364f10dbcd3b053730a4ad47042e0d8222aada47 blob - 6301b4682fee97651d2b72dfeab8a87065f65207 blob + cf06deff85751c2096253f66008f343cb9f529f0 --- Makefile +++ Makefile @@ -27,5 +27,11 @@ clean: iri_test: iri_test.o iri.o utf8.o ${CC} iri_test.o iri.o utf8.o -o iri_test ${LDFLAGS} -test: iri_test +test: gmid iri_test + @echo "IRI tests" + @echo "==============================" ./iri_test + @echo + @echo "server tests" + @echo "==============================" + cd test && ./test.sh blob - /dev/null blob + e152c8f6939333552ec23361edb3f70897535f3b (mode 644) --- /dev/null +++ test/cert.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEpDCCAowCCQDkH9rq5++pQzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls +b2NhbGhvc3QwHhcNMjEwMTE3MTA0MzMzWhcNMjIwMTE3MTA0MzMzWjAUMRIwEAYD +VQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCp +YzeKNqZequOdFjv/YiPgTLcAA4WQZavRbej1dDqgusRcc8/zk9hwzESeI+u87GTE +knryxYHrGuW7ZVZWPgjQ8f7KZrvN0WlZo1eL2dqyOZDr+wZh7E9H8VFR/Gu6NzXX +9/pQPvIWj71hc4WhzwnS950lv7vzp92ul4NeqzTQKwcd+nwLMsOg2iAt6Ncw7uKc +36hWr/gXOvZBciqjb2r1o8Kf5rBFPexMi97IRrM1JQDV74lLTxuGSAdIpYnF9CcG +gxvzPj3ws3WW/x3rQaqJEfjm31Mvf+Rr0ZSNcLstBpj9LaRojYCneEjB8xj3ClV9 +szl5yarAItfLti/tj0SQ0rqJGyUgKZYkfIB+DbnSjYXo4YsQ+Be5q2AmHRcChFuL +zkjLpPLAgS2bXjANKntA60PC9fAhz4sNMglaWC1PnIdGsE+1RjZ64ItQPmTRGWPS +FC7GP6RQSYLStdfscl6/WGYU3ey97Q9V2Z1HpOQzxGiUhejZJeUjIUdQEkjCaMkl +RffGEQyHJVjokb7owxTmaGNG9+I7yXWXiYXaA3QIKC9nGT04kLqOeJEqljhjmhiL +coC7nZzRHWCtLU3o4mSB4DGNnzrOLichpZrB+3qP2lL4NiEoHUb+/NSZULtUt4XN +acg1T4+skXVO9W/efTvw67Sfv2L857z6rjXjOgX/ywIDAQABMA0GCSqGSIb3DQEB +CwUAA4ICAQBE1XFORAn8v16EanSHYcdep05V1ouPuI1Zpw6pgKdFkJoFt/Wz6dw4 +XyOMDxiUpXUz0rDwmL5hFnv0cHue22JECgwynpyE88GANEvE1qn9WeZI22h6+nE9 +0H02f5mq2JKifRtLvSltjrhrmoL82RH4bD16v8tybygupetIcFcmRUM98vfPTYxc ++xHdeJpfrHEn0GAuy59oypGKsa4IjHFGSCt1sFCjfVJauqrvswcbk2FABAlyYHQ6 +h8ldtvEnuDSmH5otYg7TRlJqjoK7gFlG+Yt8bcK5ZSOtx5nFk2+uqKUem7iA9cW/ +caPG6Lllv8B0hBS9dwO9oFalee2fYdzF5GjnEqkllg4DOlr/fblGSpg1U9xLn5ur ++KmYtUipeT1Oz1wbsAsI+lUNIFo60JZMEGmwpf0Hcdahtm6lZzbhvzH7SGXivzV5 +ALUf0vy8hnpWDzMBy7pHde3CSoLWSEOhPt6Tx2DOfA/ZvrOiOxpYovQGx/Gs7zLY +Luemesq7Vzd1hLFacCVnYin1b2VGjUT1ibs210WRzZ1C6XaflcB/eQUmGZXisO0k +vqWQGNykjN1V4shDRt8q3dqbcVIIAITYgh3mIq6UQZY1uzEfZYc0lJs4/n64y2jG +ORdRlwBgFCNise1UrxUsNdYw/tTClqZ36E6bntKR4pkZczqeVH66pQ== +-----END CERTIFICATE----- blob - /dev/null blob + a8d7319d2ede1b89cf6c018ddfeef7cc9d9a728a (mode 644) --- /dev/null +++ test/cgi.conf @@ -0,0 +1,10 @@ +daemon off +ipv6 off +port 10965 + +server "localhost" { + cert "cert.pem" + key "key.pem" + root "docs" + cgi "" +} blob - /dev/null blob + 2be7c65ae93b54b988416f280298b0b8b5f20385 (mode 644) --- /dev/null +++ test/docs/index.gmi @@ -0,0 +1 @@ +# hello world blob - /dev/null blob + 98b3d77b9ccb342fbc06650b40436dc25c1b61ed (mode 755) --- /dev/null +++ test/docs/script @@ -0,0 +1,4 @@ +#!/bin/sh + +printf "20 text/gemini\r\n" +printf "# hello world\n" blob - /dev/null blob + bd2de8b0c80891dbcad7a3f6eb89c3e11415da26 (mode 755) --- /dev/null +++ test/gg.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +# GeminiGet, aka gg +# USAGE: ./gg path [port] + +import os +import socket +import ssl +import urllib.parse +import sys + +hostname = 'localhost' +path = sys.argv[1] + +port = 1965 +if len(sys.argv) > 2: + port = int(sys.argv[2]) + +s = socket.create_connection((hostname, port)) +context = ssl.SSLContext() +context.check_hostname = False +context.verify_mode = ssl.CERT_NONE +s = context.wrap_socket(s, server_hostname = hostname) +s.sendall(("gemini://" + hostname + ":" + str(port) + path + "\r\n").encode('UTF-8')) + +fp = s.makefile("rb") +for line in fp.read().splitlines(): + print(line.decode('UTF-8')) blob - /dev/null blob + ad9723a1c440ca4eef62866bfd1c85bc0469397d (mode 644) --- /dev/null +++ test/key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +PqNUZ1DUexadHtagYSo/hhWDNPDt +-----END PRIVATE KEY----- blob - /dev/null blob + 9e38f0c01060135718ea7ada9b87590fcd4f1c8a (mode 644) --- /dev/null +++ test/no-cgi.conf @@ -0,0 +1,9 @@ +daemon off +ipv6 off +port 10965 + +server "localhost" { + cert "cert.pem" + key "key.pem" + root "docs" +} blob - /dev/null blob + ab85561e6a1789ed01c3beda25db1a6868c322fc (mode 755) --- /dev/null +++ test/test.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +# sha256 of "20 text/gemini\r\n# hello world\n" +ok_res=6989d9b0e082c79edb8f625ebb77ddcb07764d3dd0c7c5ae60a27a50a33f6a15 + +# sha256 of docs/script +script_res=00bf8349336a4a1896f9e98dda67c8264f70b767343351247db96b4546f8d872 + +get() { + ./gg.py "$1" 10965 +} + +# check "path" "expected-sha256" +check() { + got=`get "$1" | sha256` + if [ "$got" '!=' "$2" ]; then + echo "FAIL $1 (with_cgi: $with_cgi)" + quit + else + echo "PASS $1" + fi +} + +quit() { + pkill gmid + exit ${1:-1} +} + +with_cgi="no" +./../gmid -c no-cgi.conf 2>/dev/null & + +check "/" $ok_res +check "/index.gmi" $ok_res +check "/script" $script_res + +if ! pkill gmid; then + echo "Is gmid still running?" + exit 1 +fi + +wait + +with_cgi="yes" +./../gmid -c cgi.conf 2>/dev/null & + +check "/" $ok_res +check "/index.gmi" $ok_res +check "/script" $ok_res + +quit 0