From daa5e5ebd47f5142d7ddaad9290ed496f67ed17e Mon Sep 17 00:00:00 2001 From: jcamiel Date: Thu, 16 Feb 2023 13:04:41 +0100 Subject: [PATCH] Update werkzeug from 2.0.3 to 2.2.3 This update solves security issue but bumps HTTP Flask version from HTTP/1.0 to HTTP/1.1. --- bin/requirements-frozen.txt | 16 ++--- bin/requirements.txt | 2 +- .../tests_failed/assert_http_version.err | 2 +- .../assert_match_utf8.out.pattern | 2 +- .../tests_failed/assert_status.out.pattern | 2 +- ...rt_template_variable_not_found.out.pattern | 2 +- .../assert_value_error.out.pattern | 2 +- .../tests_failed/option_retry.err.pattern | 36 ++++++---- .../query_header_not_found.out.pattern | 2 +- integration/tests_failed/retry.err.pattern | 72 +++++++++++-------- .../tests_ok/assert_header.out.pattern | 2 +- integration/tests_ok/assert_status_code.html | 4 +- integration/tests_ok/assert_status_code.hurl | 4 +- integration/tests_ok/assert_status_code.json | 2 +- integration/tests_ok/include.out.pattern | 6 +- integration/tests_ok/json_output.out.pattern | 2 +- integration/tests_ok/option_retry.err.pattern | 48 ++++++++----- integration/tests_ok/option_retry.out.pattern | 2 +- .../tests_ok/option_verbose.err.pattern | 13 ++-- integration/tests_ok/retry.err.pattern | 48 ++++++++----- integration/tests_ok/retry.out.pattern | 2 +- integration/tests_ok/verbose.err.pattern | 6 +- integration/tests_ok/very_verbose.err.pattern | 51 +++++++------ packages/hurl/src/runner/hurl_file.rs | 2 +- packages/hurl/tests/libcurl.rs | 10 +-- 25 files changed, 202 insertions(+), 138 deletions(-) diff --git a/bin/requirements-frozen.txt b/bin/requirements-frozen.txt index df54df5c6..53ccbcb80 100644 --- a/bin/requirements-frozen.txt +++ b/bin/requirements-frozen.txt @@ -19,14 +19,14 @@ Jinja2==3.1.2 kaitaistruct==0.9 ldap3==2.9.1 lxml==4.9.1 -MarkupSafe==2.1.1 +MarkupSafe==2.1.2 mitmproxy==8.0.0 msgpack==1.0.4 mypy==0.971 -mypy-extensions==0.4.3 +mypy-extensions==1.0.0 passlib==1.7.4 -pathspec==0.10.1 -platformdirs==2.5.2 +pathspec==0.11.0 +platformdirs==3.0.0 protobuf==3.19.6 publicsuffix2==2.20191221 pyasn1==0.4.8 @@ -38,12 +38,12 @@ requests==2.28.1 ruamel.yaml==0.17.21 ruamel.yaml.clib==0.2.7 sortedcontainers==2.4.0 -soupsieve==2.3.2.post1 +soupsieve==2.4 tomli==2.0.1 tornado==6.2 -typing_extensions==4.4.0 -urllib3==1.26.12 +typing_extensions==4.5.0 +urllib3==1.26.14 urwid==2.1.2 -Werkzeug==2.0.3 +Werkzeug==2.2.3 wsproto==1.1.0 zstandard==0.17.0 diff --git a/bin/requirements.txt b/bin/requirements.txt index fb8dcca46..f09e8d269 100644 --- a/bin/requirements.txt +++ b/bin/requirements.txt @@ -5,4 +5,4 @@ lxml==4.9.1 mitmproxy==8.0.0 mypy==0.971 requests==2.28.1 -Werkzeug==2.0.3 +Werkzeug==2.2.3 diff --git a/integration/tests_failed/assert_http_version.err b/integration/tests_failed/assert_http_version.err index 2dead58ce..12f0a88ae 100644 --- a/integration/tests_failed/assert_http_version.err +++ b/integration/tests_failed/assert_http_version.err @@ -2,6 +2,6 @@ error: Assert HTTP version --> tests_failed/assert_http_version.hurl:2:1 | 2 | HTTP/2 200 - | ^^^^^^ actual value is + | ^^^^^^ actual value is | diff --git a/integration/tests_failed/assert_match_utf8.out.pattern b/integration/tests_failed/assert_match_utf8.out.pattern index b5b617006..169aa3a6a 100644 --- a/integration/tests_failed/assert_match_utf8.out.pattern +++ b/integration/tests_failed/assert_match_utf8.out.pattern @@ -1 +1 @@ -{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":4,"message":"Invalid decoding\n --> tests_failed/assert_match_utf8.hurl:4:1\n |\n 4 | body matches \".*\"\n | ^^^^ the body can not be decoded with charset 'utf-8'\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-assert/match-utf8"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"1"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_match_utf8.hurl","success":false,"time":~~~} +{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":4,"message":"Invalid decoding\n --> tests_failed/assert_match_utf8.hurl:4:1\n |\n 4 | body matches \".*\"\n | ^^^^ the body can not be decoded with charset 'utf-8'\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-assert/match-utf8"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"1"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_match_utf8.hurl","success":false,"time":~~~} diff --git a/integration/tests_failed/assert_status.out.pattern b/integration/tests_failed/assert_status.out.pattern index 6db9bf607..17f7f5644 100644 --- a/integration/tests_failed/assert_status.out.pattern +++ b/integration/tests_failed/assert_status.out.pattern @@ -1 +1 @@ -{"cookies":[],"entries":[{"asserts":[{"line":9,"success":true},{"line":9,"message":"Assert status code\n --> tests_failed/assert_status.hurl:9:6\n |\n 9 | HTTP 200\n | ^^^ actual value is <404>\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/not_found"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"232"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":404}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_status.hurl","success":false,"time":~~~} +{"cookies":[],"entries":[{"asserts":[{"line":9,"success":true},{"line":9,"message":"Assert status code\n --> tests_failed/assert_status.hurl:9:6\n |\n 9 | HTTP 200\n | ^^^ actual value is <404>\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/not_found"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"207"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":404}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_status.hurl","success":false,"time":~~~} diff --git a/integration/tests_failed/assert_template_variable_not_found.out.pattern b/integration/tests_failed/assert_template_variable_not_found.out.pattern index 7b9a04d9e..5add68c39 100644 --- a/integration/tests_failed/assert_template_variable_not_found.out.pattern +++ b/integration/tests_failed/assert_template_variable_not_found.out.pattern @@ -1 +1 @@ -{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":4,"message":"Undefined variable\n --> tests_failed/assert_template_variable_not_found.hurl:4:33\n |\n 4 | header \"content-type\" equals \"{{content_type}}\"\n | ^^^^^^^^^^^^ you must set the variable content_type\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-assert-template-variable-not-found"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"0"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_template_variable_not_found.hurl","success":false,"time":~~~} +{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":4,"message":"Undefined variable\n --> tests_failed/assert_template_variable_not_found.hurl:4:33\n |\n 4 | header \"content-type\" equals \"{{content_type}}\"\n | ^^^^^^^^^^^^ you must set the variable content_type\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-assert-template-variable-not-found"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"0"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_template_variable_not_found.hurl","success":false,"time":~~~} diff --git a/integration/tests_failed/assert_value_error.out.pattern b/integration/tests_failed/assert_value_error.out.pattern index 627dd7a21..550c52bc5 100644 --- a/integration/tests_failed/assert_value_error.out.pattern +++ b/integration/tests_failed/assert_value_error.out.pattern @@ -1 +1 @@ -{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":4,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:4:0\n |\n 4 | header \"content-type\" equals \"XXX\"\n | actual: string \n | expected: string \n |","success":false},{"line":5,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:5:0\n |\n 5 | header \"content-type\" notEquals \"text/html; charset=utf-8\"\n | actual: string \n | expected: string \n |","success":false},{"line":6,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:6:0\n |\n 6 | jsonpath \"$.id\" equals \"000001\"\n | actual: none\n | expected: string <000001>\n |","success":false},{"line":7,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:7:0\n |\n 7 | jsonpath \"$.values\" includes 100\n | actual: [int <1>, int <2>, int <3>]\n | expected: includes int <100>\n |","success":false},{"line":8,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:8:0\n |\n 8 | jsonpath \"$.values\" not contains \"Hello\"\n | actual: [int <1>, int <2>, int <3>]\n | expected: not contains string \n | >>> types between actual and expected are not consistent\n |","success":false},{"line":9,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:9:0\n |\n 9 | jsonpath \"$.count\" greaterThan 5\n | actual: int <2>\n | expected: greater than int <5>\n |","success":false},{"line":10,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:10:0\n |\n10 | jsonpath \"$.count\" isFloat\n | actual: int <2>\n | expected: float\n |","success":false},{"line":11,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:11:0\n |\n11 | bytes contains hex,00;\n | actual: byte array <7b202276616c756573223a205b312c322c335d2c2022636f756e74223a20327d>\n | expected: contains byte array <00>\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-assert-value"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"32"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_value_error.hurl","success":false,"time":~~~} +{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":4,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:4:0\n |\n 4 | header \"content-type\" equals \"XXX\"\n | actual: string \n | expected: string \n |","success":false},{"line":5,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:5:0\n |\n 5 | header \"content-type\" notEquals \"text/html; charset=utf-8\"\n | actual: string \n | expected: string \n |","success":false},{"line":6,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:6:0\n |\n 6 | jsonpath \"$.id\" equals \"000001\"\n | actual: none\n | expected: string <000001>\n |","success":false},{"line":7,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:7:0\n |\n 7 | jsonpath \"$.values\" includes 100\n | actual: [int <1>, int <2>, int <3>]\n | expected: includes int <100>\n |","success":false},{"line":8,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:8:0\n |\n 8 | jsonpath \"$.values\" not contains \"Hello\"\n | actual: [int <1>, int <2>, int <3>]\n | expected: not contains string \n | >>> types between actual and expected are not consistent\n |","success":false},{"line":9,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:9:0\n |\n 9 | jsonpath \"$.count\" greaterThan 5\n | actual: int <2>\n | expected: greater than int <5>\n |","success":false},{"line":10,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:10:0\n |\n10 | jsonpath \"$.count\" isFloat\n | actual: int <2>\n | expected: float\n |","success":false},{"line":11,"message":"Assert failure\n --> tests_failed/assert_value_error.hurl:11:0\n |\n11 | bytes contains hex,00;\n | actual: byte array <7b202276616c756573223a205b312c322c335d2c2022636f756e74223a20327d>\n | expected: contains byte array <00>\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-assert-value"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"32"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/assert_value_error.hurl","success":false,"time":~~~} diff --git a/integration/tests_failed/option_retry.err.pattern b/integration/tests_failed/option_retry.err.pattern index e8367daf4..6130b187e 100644 --- a/integration/tests_failed/option_retry.err.pattern +++ b/integration/tests_failed/option_retry.err.pattern @@ -26,13 +26,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -64,13 +66,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -102,13 +106,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * diff --git a/integration/tests_failed/query_header_not_found.out.pattern b/integration/tests_failed/query_header_not_found.out.pattern index 7bd52b68e..189b03a97 100644 --- a/integration/tests_failed/query_header_not_found.out.pattern +++ b/integration/tests_failed/query_header_not_found.out.pattern @@ -1 +1 @@ -{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":3,"message":"Header not found\n --> tests_failed/query_header_not_found.hurl:3:1\n |\n 3 | Custom: XXX\n | ^^^^^^ this header has not been found in the response\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-query-header-not-found"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/query_header_not_found.hurl","success":false,"time":~~~} +{"cookies":[],"entries":[{"asserts":[{"line":2,"success":true},{"line":2,"success":true},{"line":3,"message":"Header not found\n --> tests_failed/query_header_not_found.hurl:3:1\n |\n 3 | Custom: XXX\n | ^^^^^^ this header has not been found in the response\n |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/error-query-header-not-found"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_failed/query_header_not_found.hurl","success":false,"time":~~~} diff --git a/integration/tests_failed/retry.err.pattern b/integration/tests_failed/retry.err.pattern index dc68448d4..942ce1bd0 100644 --- a/integration/tests_failed/retry.err.pattern +++ b/integration/tests_failed/retry.err.pattern @@ -21,13 +21,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -54,13 +56,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -87,13 +91,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -120,13 +126,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -153,13 +161,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~~ ms) +* Response: (received 207 bytes in ~~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * Assert status code @@ -186,13 +196,15 @@ > Accept: */* > User-Agent: hurl/~~~ > -* Response: (received 232 bytes in ~~ ms) +* Response: (received 207 bytes in ~~ ms) * -< HTTP/1.0 404 NOT FOUND -< Content-Type: text/html; charset=utf-8 -< Content-Length: 232 -< Server: Flask Server +< HTTP/1.1 404 NOT FOUND +< Server: Werkzeug/~~~ Python/~~~ < Date: ~~~ +< Content-Type: text/html; charset=utf-8 +< Content-Length: 207 +< Server: Flask Server +< Connection: close < * * diff --git a/integration/tests_ok/assert_header.out.pattern b/integration/tests_ok/assert_header.out.pattern index 34783361d..56835549d 100644 --- a/integration/tests_ok/assert_header.out.pattern +++ b/integration/tests_ok/assert_header.out.pattern @@ -1 +1 @@ -{"cookies":[{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie1","path":"/","value":"value1"},{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie2","path":"/","value":"value2"},{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie3","path":"/","value":"value3"}],"entries":[{"asserts":[{"line":3,"success":true},{"line":3,"success":true},{"line":4,"success":true},{"line":5,"success":true},{"line":6,"success":true},{"line":8,"success":true},{"line":9,"success":true},{"line":10,"success":true},{"line":11,"success":true},{"line":12,"success":true},{"line":13,"success":true},{"line":14,"success":true},{"line":15,"success":true},{"line":16,"success":true},{"line":17,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/2.1.0-SNAPSHOT"}],"method":"GET","queryString":[],"url":"http://localhost:8000/assert-header"},"response":{"cookies":[{"name":"cookie1","path":"/","value":"value1"},{"name":"cookie2","path":"/","value":"value2"},{"name":"cookie3","path":"/","value":"value3"}],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Header1","value":"value1"},{"name":"ETag","value":"\"33a64df551425fcc55e4d42a148795d9f25f89d4\""},{"name":"Expires","value":"Wed, 21 Oct 2015 07:28:00 GMT"},{"name":"Set-Cookie","value":"cookie1=value1; Path=/"},{"name":"Set-Cookie","value":"cookie2=value2; Path=/"},{"name":"Set-Cookie","value":"cookie3=value3; Path=/"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_ok/assert_header.hurl","success":true,"time":~~~} +{"cookies":[{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie1","path":"/","value":"value1"},{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie2","path":"/","value":"value2"},{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie3","path":"/","value":"value3"}],"entries":[{"asserts":[{"line":3,"success":true},{"line":3,"success":true},{"line":4,"success":true},{"line":5,"success":true},{"line":6,"success":true},{"line":8,"success":true},{"line":9,"success":true},{"line":10,"success":true},{"line":11,"success":true},{"line":12,"success":true},{"line":13,"success":true},{"line":14,"success":true},{"line":15,"success":true},{"line":16,"success":true},{"line":17,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/assert-header"},"response":{"cookies":[{"name":"cookie1","path":"/","value":"value1"},{"name":"cookie2","path":"/","value":"value2"},{"name":"cookie3","path":"/","value":"value3"}],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Header1","value":"value1"},{"name":"ETag","value":"\"33a64df551425fcc55e4d42a148795d9f25f89d4\""},{"name":"Expires","value":"~~~"},{"name":"Set-Cookie","value":"cookie1=value1; Path=/"},{"name":"Set-Cookie","value":"cookie2=value2; Path=/"},{"name":"Set-Cookie","value":"cookie3=value3; Path=/"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":1,"time":~~~}],"filename":"tests_ok/assert_header.hurl","success":true,"time":~~~} diff --git a/integration/tests_ok/assert_status_code.html b/integration/tests_ok/assert_status_code.html index c1ed3fc2e..4b92e56fe 100644 --- a/integration/tests_ok/assert_status_code.html +++ b/integration/tests_ok/assert_status_code.html @@ -1,9 +1,9 @@
GET http://localhost:8000/assert-status-code
 HTTP 201
 
-# Assert HTTP 1.0
+# Assert HTTP 1.1
 GET http://localhost:8000/assert-status-code
-HTTP/1.0 201
+HTTP/1.1 201
 
 # Simply check that the status code is not 200
 # Do not run implicit assert of HTTP response version and code
diff --git a/integration/tests_ok/assert_status_code.hurl b/integration/tests_ok/assert_status_code.hurl
index 83f4cda00..bf35f05bb 100644
--- a/integration/tests_ok/assert_status_code.hurl
+++ b/integration/tests_ok/assert_status_code.hurl
@@ -1,9 +1,9 @@
 GET http://localhost:8000/assert-status-code
 HTTP 201
 
-# Assert HTTP 1.0
+# Assert HTTP 1.1
 GET http://localhost:8000/assert-status-code
-HTTP/1.0 201
+HTTP/1.1 201
 
 # Simply check that the status code is not 200
 # Do not run implicit assert of HTTP response version and code
diff --git a/integration/tests_ok/assert_status_code.json b/integration/tests_ok/assert_status_code.json
index a968cf44f..c21f6fe41 100644
--- a/integration/tests_ok/assert_status_code.json
+++ b/integration/tests_ok/assert_status_code.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"status":201}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"version":"HTTP/1.0","status":201}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"not-equal","value":200}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"greater-or-equal","value":200}},{"query":{"type":"status"},"predicate":{"type":"less","value":300}}]}}]}
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"status":201}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"version":"HTTP/1.1","status":201}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"not-equal","value":200}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"greater-or-equal","value":200}},{"query":{"type":"status"},"predicate":{"type":"less","value":300}}]}}]}
diff --git a/integration/tests_ok/include.out.pattern b/integration/tests_ok/include.out.pattern
index bee67ba8e..42046c91a 100644
--- a/integration/tests_ok/include.out.pattern
+++ b/integration/tests_ok/include.out.pattern
@@ -1,7 +1,9 @@
-HTTP/1.0 200
+HTTP/1.1 200
+Server: Werkzeug/~~~ Python/~~~
+Date: ~~~
 Content-Type: text/html; charset=utf-8
 Content-Length: 5
 Server: Flask Server
-Date: ~~~
+Connection: close
 
 Hello
\ No newline at end of file
diff --git a/integration/tests_ok/json_output.out.pattern b/integration/tests_ok/json_output.out.pattern
index cba46c5f7..f3131fa12 100644
--- a/integration/tests_ok/json_output.out.pattern
+++ b/integration/tests_ok/json_output.out.pattern
@@ -1 +1 @@
-{"cookies":[{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie2","path":"/","value":"valueA"}],"entries":[{"asserts":[{"line":7,"success":true},{"line":7,"success":true},{"line":8,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/hello"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":1,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/cookies/set-session-cookie2-valueA"},"response":{"cookies":[{"name":"cookie2","path":"/","value":"valueA"}],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Set-Cookie","value":"cookie2=valueA; Path=/"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":22,"success":true},{"line":22,"success":true},{"line":24,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/follow-redirect"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"286"},{"name":"Location","value":"http://localhost:8000/following-redirect"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":302}}],"captures":[],"index":3,"time":~~~},{"asserts":[{"line":32,"success":true},{"line":32,"success":true},{"line":35,"success":true},{"line":34,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/follow-redirect"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"286"},{"name":"Location","value":"http://localhost:8000/following-redirect"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":302}},{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/following-redirect"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"70"},{"name":"location","value":"http://localhost:8000/followed-redirect"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":302}},{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/followed-redirect"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"18"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":4,"time":~~~},{"asserts":[{"line":41,"success":true},{"line":41,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/captures"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Header1","value":"value1"},{"name":"Header2","value":"Hello Bob!"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[{"name":"param1","value":"value1"},{"name":"param2","value":"Bob"},{"name":"param3","value":"Bob"},{"name":"data1","value":"Hello world!"},{"name":"data2","value":"Hello world!"}],"index":5,"time":~~~},{"asserts":[{"line":53,"success":true},{"line":53,"success":true},{"line":55,"success":true},{"line":56,"success":true},{"line":57,"success":true},{"line":58,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/assert-json"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"186"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":6,"time":~~~}],"filename":"tests_ok/json_output.hurl","success":true,"time":~~~}
+{"cookies":[{"domain":"localhost","expires":"0","https":"FALSE","include_subdomain":"FALSE","name":"cookie2","path":"/","value":"valueA"}],"entries":[{"asserts":[{"line":7,"success":true},{"line":7,"success":true},{"line":8,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/hello"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":1,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/cookies/set-session-cookie2-valueA"},"response":{"cookies":[{"name":"cookie2","path":"/","value":"valueA"}],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Set-Cookie","value":"cookie2=valueA; Path=/"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":22,"success":true},{"line":22,"success":true},{"line":24,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/follow-redirect"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"267"},{"name":"Location","value":"http://localhost:8000/following-redirect"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":302}}],"captures":[],"index":3,"time":~~~},{"asserts":[{"line":32,"success":true},{"line":32,"success":true},{"line":35,"success":true},{"line":34,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/follow-redirect"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"267"},{"name":"Location","value":"http://localhost:8000/following-redirect"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":302}},{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/following-redirect"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"70"},{"name":"location","value":"http://localhost:8000/followed-redirect"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":302}},{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/followed-redirect"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"18"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":4,"time":~~~},{"asserts":[{"line":41,"success":true},{"line":41,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/captures"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Header1","value":"value1"},{"name":"Header2","value":"Hello Bob!"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[{"name":"param1","value":"value1"},{"name":"param2","value":"Bob"},{"name":"param3","value":"Bob"},{"name":"data1","value":"Hello world!"},{"name":"data2","value":"Hello world!"}],"index":5,"time":~~~},{"asserts":[{"line":53,"success":true},{"line":53,"success":true},{"line":55,"success":true},{"line":56,"success":true},{"line":57,"success":true},{"line":58,"success":true}],"calls":[{"request":{"cookies":[{"name":"cookie2","value":"valueA"}],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"Cookie","value":"cookie2=valueA"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/assert-json"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"186"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":6,"time":~~~}],"filename":"tests_ok/json_output.hurl","success":true,"time":~~~}
diff --git a/integration/tests_ok/option_retry.err.pattern b/integration/tests_ok/option_retry.err.pattern
index a91a0ca73..e29da9043 100644
--- a/integration/tests_ok/option_retry.err.pattern
+++ b/integration/tests_ok/option_retry.err.pattern
@@ -23,11 +23,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 201 CREATED
+< HTTP/1.1 201 CREATED
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Captures:
 * job_id: ~~~
@@ -54,11 +56,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -92,11 +96,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -130,11 +136,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -168,11 +176,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -206,11 +216,13 @@
 >
 * Response: (received 62 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 62
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * ------------------------------------------------------------------------------
@@ -231,11 +243,13 @@
 >
 * Response: (received 0 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Server: Flask Server
 < Content-Length: 0
-< Date: ~~~
+< Connection: close
 <
 *
 * ------------------------------------------------------------------------------
@@ -256,10 +270,12 @@
 >
 * Response: (received 42 bytes in ~~~ ms)
 *
-< HTTP/1.0 404 NOT FOUND
+< HTTP/1.1 404 NOT FOUND
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 42
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
diff --git a/integration/tests_ok/option_retry.out.pattern b/integration/tests_ok/option_retry.out.pattern
index 6c2521d3d..08065c24a 100644
--- a/integration/tests_ok/option_retry.out.pattern
+++ b/integration/tests_ok/option_retry.out.pattern
@@ -1 +1 @@
-{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":8,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"POST","queryString":[],"url":"http://localhost:8000/jobs"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":201}}],"captures":[{"name":"job_id","value":"~~~"}],"index":1,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"62"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":24,"success":true},{"line":24,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"DELETE","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":3,"time":~~~},{"asserts":[{"line":27,"success":true},{"line":27,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"42"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":404}}],"captures":[],"index":4,"time":~~~}],"filename":"tests_ok/option_retry.hurl","success":true,"time":~~~}
+{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":8,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"POST","queryString":[],"url":"http://localhost:8000/jobs"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":201}}],"captures":[{"name":"job_id","value":"~~~"}],"index":1,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"message":"Assert failure\n  --> tests_ok/option_retry.hurl:19:0\n   |\n19 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":17,"success":true},{"line":17,"success":true},{"line":19,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"62"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":24,"success":true},{"line":24,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"DELETE","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":3,"time":~~~},{"asserts":[{"line":27,"success":true},{"line":27,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"42"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":404}}],"captures":[],"index":4,"time":~~~}],"filename":"tests_ok/option_retry.hurl","success":true,"time":~~~}
diff --git a/integration/tests_ok/option_verbose.err.pattern b/integration/tests_ok/option_verbose.err.pattern
index be5190052..198db7a1a 100644
--- a/integration/tests_ok/option_verbose.err.pattern
+++ b/integration/tests_ok/option_verbose.err.pattern
@@ -19,11 +19,13 @@
 >
 * Response: (received 12 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 12
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * ------------------------------------------------------------------------------
@@ -51,15 +53,16 @@
 * Request body:
 *
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 3
 * Response: (received 12 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 12
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * Hello World!
diff --git a/integration/tests_ok/retry.err.pattern b/integration/tests_ok/retry.err.pattern
index 45b31fdca..115bab4c6 100644
--- a/integration/tests_ok/retry.err.pattern
+++ b/integration/tests_ok/retry.err.pattern
@@ -23,11 +23,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 201 CREATED
+< HTTP/1.1 201 CREATED
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Captures:
 * job_id: ~~~
@@ -50,11 +52,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -84,11 +88,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -118,11 +124,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -152,11 +160,13 @@
 >
 * Response: (received 60 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 60
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * Assert failure
@@ -186,11 +196,13 @@
 >
 * Response: (received 62 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 62
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
 * ------------------------------------------------------------------------------
@@ -211,11 +223,13 @@
 >
 * Response: (received 0 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Server: Flask Server
 < Content-Length: 0
-< Date: ~~~
+< Connection: close
 <
 *
 * ------------------------------------------------------------------------------
@@ -236,10 +250,12 @@
 >
 * Response: (received 42 bytes in ~~~ ms)
 *
-< HTTP/1.0 404 NOT FOUND
+< HTTP/1.1 404 NOT FOUND
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: application/json
 < Content-Length: 42
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
diff --git a/integration/tests_ok/retry.out.pattern b/integration/tests_ok/retry.out.pattern
index 480f9251d..2d631bbe1 100644
--- a/integration/tests_ok/retry.out.pattern
+++ b/integration/tests_ok/retry.out.pattern
@@ -1 +1 @@
-{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":8,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"POST","queryString":[],"url":"http://localhost:8000/jobs"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":201}}],"captures":[{"name":"job_id","value":"~~~"}],"index":1,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"62"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":21,"success":true},{"line":21,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"DELETE","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":200}}],"captures":[],"index":3,"time":~~~},{"asserts":[{"line":24,"success":true},{"line":24,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"42"},{"name":"Server","value":"Flask Server"},{"name":"Date","value":"~~~"}],"httpVersion":"HTTP/1.0","status":404}}],"captures":[],"index":4,"time":~~~}],"filename":"tests_ok/retry.hurl","success":true,"time":~~~}
+{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":8,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"POST","queryString":[],"url":"http://localhost:8000/jobs"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":201}}],"captures":[{"name":"job_id","value":"~~~"}],"index":1,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"message":"Assert failure\n  --> tests_ok/retry.hurl:16:0\n   |\n16 | jsonpath \"$.state\" == \"COMPLETED\"\n   |   actual:   string \n   |   expected: string \n   |","success":false}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"60"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":14,"success":true},{"line":14,"success":true},{"line":16,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"62"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":2,"time":~~~},{"asserts":[{"line":21,"success":true},{"line":21,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"DELETE","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Server","value":"Flask Server"},{"name":"Content-Length","value":"0"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":200}}],"captures":[],"index":3,"time":~~~},{"asserts":[{"line":24,"success":true},{"line":24,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8000"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/~~~"}],"method":"GET","queryString":[],"url":"http://localhost:8000/jobs/~~~"},"response":{"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/~~~ Python/~~~"},{"name":"Date","value":"~~~"},{"name":"Content-Type","value":"application/json"},{"name":"Content-Length","value":"42"},{"name":"Server","value":"Flask Server"},{"name":"Connection","value":"close"}],"httpVersion":"HTTP/1.1","status":404}}],"captures":[],"index":4,"time":~~~}],"filename":"tests_ok/retry.hurl","success":true,"time":~~~}
diff --git a/integration/tests_ok/verbose.err.pattern b/integration/tests_ok/verbose.err.pattern
index d72945155..cd49cdbe3 100644
--- a/integration/tests_ok/verbose.err.pattern
+++ b/integration/tests_ok/verbose.err.pattern
@@ -23,10 +23,12 @@
 >
 * Response: (received 12 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 12
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 *
diff --git a/integration/tests_ok/very_verbose.err.pattern b/integration/tests_ok/very_verbose.err.pattern
index 0e7b7a6cb..d8e644fbb 100644
--- a/integration/tests_ok/very_verbose.err.pattern
+++ b/integration/tests_ok/very_verbose.err.pattern
@@ -26,16 +26,17 @@
 * Request body:
 *
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 0
 * Response: (received 205 bytes in ~~~ ms)
 *
-< HTTP/1.0 301 MOVED PERMANENTLY
+< HTTP/1.1 301 MOVED PERMANENTLY
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 205
-< Location: http://localhost:8000/very-verbose/redirected
+< Location: /very-verbose/redirected
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * 
@@ -63,15 +64,16 @@
 * Request body:
 *
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 1
 * Response: (received 11 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 11
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * Redirected.
@@ -98,15 +100,16 @@
 * Request body:
 *
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 2
 * Response: (received 4 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=ISO-8859-1
 < Content-Length: 4
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * café
@@ -143,16 +146,17 @@
 * }
 ** We are completely uploaded and fine
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 3
 * Response: (received 17 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 17
 < Content-Encoding: br
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * Hello World!
@@ -179,15 +183,16 @@
 * Request body:
 *
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 4
 * Response: (received 25992 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: image/jpeg
 < Content-Length: 25992
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * Bytes 
@@ -221,15 +226,16 @@
 * Bytes <~~~~~...>
 ** We are completely uploaded and fine
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 5
 * Response: (received 0 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 0
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 *
@@ -258,15 +264,16 @@
 * Request body:
 *
 ** Mark bundle as not supporting multiuse
-** HTTP 1.0, assume close after body
 ** Closing connection 6
 * Response: (received 4 bytes in ~~~ ms)
 *
-< HTTP/1.0 200 OK
+< HTTP/1.1 200 OK
+< Server: Werkzeug/~~~ Python/~~~
+< Date: ~~~
 < Content-Type: text/html; charset=utf-8
 < Content-Length: 4
 < Server: Flask Server
-< Date: ~~~
+< Connection: close
 <
 * Response body:
 * Done
diff --git a/packages/hurl/src/runner/hurl_file.rs b/packages/hurl/src/runner/hurl_file.rs
index 99c2d8d69..c15e43116 100644
--- a/packages/hurl/src/runner/hurl_file.rs
+++ b/packages/hurl/src/runner/hurl_file.rs
@@ -54,7 +54,7 @@ use super::entry;
 /// let filename = "sample.hurl";
 /// let s = r#"
 /// GET http://localhost:8000/hello
-/// HTTP/1.0 200
+/// HTTP/1.1 200
 /// "#;
 /// let hurl_file = parser::parse_hurl_file(s).unwrap();
 ///
diff --git a/packages/hurl/tests/libcurl.rs b/packages/hurl/tests/libcurl.rs
index d97608cc4..fa94970ac 100644
--- a/packages/hurl/tests/libcurl.rs
+++ b/packages/hurl/tests/libcurl.rs
@@ -63,11 +63,11 @@ fn test_hello() {
         value: "*/*".to_string(),
     }));
 
-    assert_eq!(response.version, Version::Http10);
+    assert_eq!(response.version, Version::Http11);
     assert_eq!(response.status, 200);
     assert_eq!(response.body, b"Hello World!".to_vec());
 
-    assert_eq!(response.headers.len(), 4);
+    assert_eq!(response.headers.len(), 6);
     assert!(response.headers.contains(&Header {
         name: "Content-Length".to_string(),
         value: "12".to_string(),
@@ -565,7 +565,7 @@ fn test_expect() {
         value: "100-continue".to_string(),
     }));
     assert_eq!(response.status, 200);
-    assert_eq!(response.version, Version::Http10);
+    assert_eq!(response.version, Version::Http11);
     assert!(response.body.is_empty());
 }
 
@@ -592,7 +592,7 @@ fn test_basic_authentication() {
         value: "Basic Ym9iQGVtYWlsLmNvbTpzZWNyZXQ=".to_string(),
     }));
     assert_eq!(response.status, 200);
-    assert_eq!(response.version, Version::Http10);
+    assert_eq!(response.version, Version::Http11);
     assert_eq!(response.body, b"You are authenticated".to_vec());
 
     let options = ClientOptions::default();
@@ -609,7 +609,7 @@ fn test_basic_authentication() {
         value: "Basic Ym9iQGVtYWlsLmNvbTpzZWNyZXQ=".to_string(),
     }));
     assert_eq!(response.status, 200);
-    assert_eq!(response.version, Version::Http10);
+    assert_eq!(response.version, Version::Http11);
     assert_eq!(response.body, b"You are authenticated".to_vec());
 }