diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f0565fa00..a1e3cb867 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -61,7 +61,10 @@ jobs: cargo build --verbose - name: Test Prequisites run: | - pip3 install Flask && cd integration && python3 server.py >server.log 2>&1 & + pip3 install Flask + cd integration + python3 server.py >server.log 2>&1 & + python3 ssl/server.py >server-ssl.log 2>&1 & wget https://snapshots.mitmproxy.org/5.2/mitmproxy-5.2-linux.tar.gz -O - | tar -xz && ./mitmdump -p 8888 --modify-header "/From-Proxy/Hello" & - name: Run Tests run: | @@ -76,7 +79,9 @@ jobs: if: ${{ always() }} with: name: tests-ubuntu-${{ matrix.rust }}-artifacts - path: integration/server.log + path: | + integration/server.log + integration/server-ssl.log test-osx: runs-on: macos-latest @@ -101,7 +106,10 @@ jobs: cargo build --verbose - name: Test Prequisites run: | - pip3 install Flask && cd integration && python3 server.py >server.log 2>&1 & + pip3 install Flask + cd integration + python3 server.py >server.log 2>&1 & + python3 ssl/server.py >server-ssl.log 2>&1 & wget https://snapshots.mitmproxy.org/5.2/mitmproxy-5.2-osx.tar.gz -O - | tar -xz && ./mitmdump -p 8888 --modify-header "/From-Proxy/Hello" & - name: Run Tests run: | @@ -116,4 +124,6 @@ jobs: if: ${{ always() }} with: name: tests-osx-${{ matrix.rust }}-artifacts - path: integration/server.log + path: | + integration/server.log + integration/server-ssl.log diff --git a/integration/integration.py b/integration/integration.py index 577d42dfd..6b26d0a25 100755 --- a/integration/integration.py +++ b/integration/integration.py @@ -15,7 +15,7 @@ def main(): [test_hurl.test(f) for f in sorted(glob.glob('tests_error_parser/*.hurl'))] # Dynamic run (with server) - [test_hurl.test(f) for f in sorted(glob.glob('tests/*.hurl'))] + [test_hurl.test(f) for f in sorted(glob.glob('tests/*.hurl')) + sorted(glob.glob('ssl/*.hurl'))] print('test integration ok!') diff --git a/integration/ssl/cert.pem b/integration/ssl/cert.pem new file mode 100644 index 000000000..d74b19a1f --- /dev/null +++ b/integration/ssl/cert.pem @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFlzCCA3+gAwIBAgIUMzQ1cLyRXQ4YmOr7+CMtbrgFF58wDQYJKoZIhvcNAQEL +BQAwWzELMAkGA1UEBhMCRlIxGzAZBgNVBAgMEk5vdXZlbGxlIEFxdWl0YWluZTER +MA8GA1UEBwwIQm9yZGVhdXgxDTALBgNVBAoMBEh1cmwxDTALBgNVBAMMBEh1cmww +HhcNMjEwMjA2MTExNDI3WhcNMjEwMjA3MTExNDI3WjBbMQswCQYDVQQGEwJGUjEb +MBkGA1UECAwSTm91dmVsbGUgQXF1aXRhaW5lMREwDwYDVQQHDAhCb3JkZWF1eDEN +MAsGA1UECgwESHVybDENMAsGA1UEAwwESHVybDCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1RGgD11WTmg1SK83K6VewWpXayKoVMnuPl+vGh/gxXuW5g +Fv8dvXr/UbQDkNE8yBNPUEShN+0q/MKNilbRurcb8YMybSYVb2rE8p7WLiUMspEw +cnB3saZfbqOncWAPhdVY9+zyudaFCEinAPj1NlYC9q/wh9f+aBig7Sr+VfHP+yl4 +0IDxb8AqLkKOQ6uY1qmWebIo67f0SQG3fMwk7P3U0gbOFlY9S+7W//LYnk/QPJBY +2md4UkFQTCFJ2S81mKlacPyClV9GycmIXiSK6xJErxXJ58r+AUpbz4N/5kTOPvvv +Abazey9hk9ez3wSgAXl25z2DPVEPVzNtbdLhB7laRyxrZTd+MYGMUIvBc+cApcXy +sEYaUAQV2FOmY3vK5m8PgXocOCISeV8mRUzBLUDK3PXhzpuUV0hg8PwTBwDu6p+A +2e+ARNAC9L7lXNHQmW5hkOgq+oJ8m07eAN4SKeYm3bV+/CI5XWwCqvGrKKNlXF2Q +ZBMPouJABynu/BQHyYsmR8DnoYRthXgFkSxl+PsBEH0XOp3WlBooOBM/5kw5yzL7 +a3PNUQlFJN+dLaiwEgdUbG071ZOXBnb5AcALKRGA6EqMvYJH2D2PKnM9Q9g0VxkC +iYNUQN4RP5wDu4fcdS+rYTxdzhFpbALOFPWeJZeNXpgoZobufp2NWDqdSjBVAgMB +AAGjUzBRMB0GA1UdDgQWBBR57wK6If8NG47sJ4d6OPcawKBX4zAfBgNVHSMEGDAW +gBR57wK6If8NG47sJ4d6OPcawKBX4zAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4ICAQCH4iJiL3RENaX5rREOJ3cbXkxbOljo77dcjBPu0/VLty/KJMOW +EFNVQlLYPqGV856a8dLmxtpj6nukCj3reY8CdXo/pDzWSOjZq8LbFRcFfK+NORTG +ammhtIbBExL9LbtE7RNxOHjz9vM2Z+87ZokNcg0pQgrTk58Yk2sXogmzhd44cpr9 +M67SqrC+y3IoqLgFmYvPLZZbcrzUPMQjBYaJtIU33xboN0d8mB7T/xLvs1DI9P09 +i0AbuV5U92WQTcb5Ds7XVlcQGbxONqwQd63fSipla09sOisuXzrrf00ZxnMuoIYB +qOSqMIcmvXeNiccFzCP5N+G8YUb3dPuPf+BHpsLzzRfzsMYdJKyePuMFia1pwNvF +Uqfe27C951/92tBUNLRIuLh4paShJPkH1uNQx+JIrvOg/RDdx6iYUrJ/9+MvTAp0 +GJg2WYjy8eXa76LImq3rzmgFoa9Gkha9K4BaOy2Z+eDrSlUrJkLLDNYdhIO/q+BO +Dlp3Yv1ZHsvAiSK6iRHFnvG9AxzxoDiVyn6tS6KIDgv9ZjiNCzAsv62hrobid/iD +Bwii2vE0MAPHMJ7180/likbT1xg/C4OVn/J5tijrTPjv8vYK3RLrwjjP+1mZq0VF +Qf/IiADrKPlYfOyioWJnB3QjQowjeEIFw5cLl7O1GwCKBsFPapkW0KO/WA== +-----END CERTIFICATE----- diff --git a/integration/ssl/error_self_signed_certificate.err b/integration/ssl/error_self_signed_certificate.err new file mode 100644 index 000000000..9c8e3f938 --- /dev/null +++ b/integration/ssl/error_self_signed_certificate.err @@ -0,0 +1,7 @@ +error: Http Connection + --> ssl/error_self_signed_certificate.hurl:1:5 + | + 1 | GET https://localhost:8001/hello + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SSL certificate problem + | + diff --git a/integration/ssl/error_self_signed_certificate.exit b/integration/ssl/error_self_signed_certificate.exit new file mode 100644 index 000000000..8148ef7a0 --- /dev/null +++ b/integration/ssl/error_self_signed_certificate.exit @@ -0,0 +1,2 @@ +3 + diff --git a/integration/ssl/error_self_signed_certificate.hurl b/integration/ssl/error_self_signed_certificate.hurl new file mode 100644 index 000000000..5123d69c8 --- /dev/null +++ b/integration/ssl/error_self_signed_certificate.hurl @@ -0,0 +1,4 @@ +GET https://localhost:8001/hello + +HTTP/1.0 200 +```Hello World!``` diff --git a/integration/ssl/insecure.exit b/integration/ssl/insecure.exit new file mode 100644 index 000000000..77ac542d4 --- /dev/null +++ b/integration/ssl/insecure.exit @@ -0,0 +1,2 @@ +0 + diff --git a/integration/ssl/insecure.hurl b/integration/ssl/insecure.hurl new file mode 100644 index 000000000..5123d69c8 --- /dev/null +++ b/integration/ssl/insecure.hurl @@ -0,0 +1,4 @@ +GET https://localhost:8001/hello + +HTTP/1.0 200 +```Hello World!``` diff --git a/integration/ssl/insecure.options b/integration/ssl/insecure.options new file mode 100644 index 000000000..a94e3f5eb --- /dev/null +++ b/integration/ssl/insecure.options @@ -0,0 +1 @@ +--insecure diff --git a/integration/ssl/key.pem b/integration/ssl/key.pem new file mode 100644 index 000000000..611593426 --- /dev/null +++ b/integration/ssl/key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +d7k8yuCVBMAC0K15osckSqHwcxyAKUQ= +-----END PRIVATE KEY----- diff --git a/integration/ssl/server.py b/integration/ssl/server.py new file mode 100755 index 000000000..7644f70e4 --- /dev/null +++ b/integration/ssl/server.py @@ -0,0 +1,14 @@ +#!/usr/bin/python +from flask import Flask +import os + +app = Flask(__name__) + +@app.route("/hello") +def hello(): + return "Hello World!" + +if __name__ == "__main__": + ssl_dir = os.path.dirname(os.path.realpath(__file__)) + app.run(port=8001, ssl_context=(ssl_dir + '/cert.pem', ssl_dir + '/key.pem')) +