fix tests failing with server name warnings

After pallets/werkzeug#1577, mismatched configured and real server
names will show a warning in addition to raising 404. This caused
tests that did this deliberately to fail.

This patch removes the pytest fixture we were using to fail on
warnings, instead using the standard `-Werror` option. This speeds
up the tests by ~3x.
This commit is contained in:
David Lord 2019-06-07 13:23:13 -07:00
parent 6369537a49
commit dbd4520ccb
No known key found for this signature in database
GPG key ID: 7A1C87E3F5BC42A8
5 changed files with 37 additions and 63 deletions

View file

@ -196,10 +196,3 @@ def purge_module(request):
request.addfinalizer(lambda: sys.modules.pop(name, None)) request.addfinalizer(lambda: sys.modules.pop(name, None))
return inner return inner
@pytest.fixture(autouse=True)
def catch_deprecation_warnings(recwarn):
yield
gc.collect()
assert not recwarn.list, '\n'.join(str(w.message) for w in recwarn.list)

View file

@ -1442,62 +1442,46 @@ def test_request_locals():
assert not flask.g assert not flask.g
def test_test_app_proper_environ(): def test_server_name_subdomain():
app = flask.Flask(__name__, subdomain_matching=True) app = flask.Flask(__name__, subdomain_matching=True)
app.config.update(
SERVER_NAME='localhost.localdomain:5000'
)
client = app.test_client() client = app.test_client()
@app.route('/') @app.route("/")
def index(): def index():
return 'Foo' return "default"
@app.route('/', subdomain='foo') @app.route("/", subdomain="foo")
def subdomain(): def subdomain():
return 'Foo SubDomain' return "subdomain"
rv = client.get('/') app.config["SERVER_NAME"] = "dev.local:5000"
assert rv.data == b'Foo' rv = client.get("/")
assert rv.data == b"default"
rv = client.get('/', 'http://localhost.localdomain:5000') rv = client.get("/", "http://dev.local:5000")
assert rv.data == b'Foo' assert rv.data == b"default"
rv = client.get('/', 'https://localhost.localdomain:5000') rv = client.get("/", "https://dev.local:5000")
assert rv.data == b'Foo' assert rv.data == b"default"
app.config.update(SERVER_NAME='localhost.localdomain') app.config["SERVER_NAME"] = "dev.local:443"
rv = client.get('/', 'https://localhost.localdomain') rv = client.get("/", "https://dev.local")
assert rv.data == b'Foo'
try: # Werkzeug 1.0 fixes matching https scheme with 443 port
app.config.update(SERVER_NAME='localhost.localdomain:443') if rv.status_code != 404:
rv = client.get('/', 'https://localhost.localdomain') assert rv.data == b"default"
# Werkzeug 0.8
app.config["SERVER_NAME"] = "dev.local"
rv = client.get("/", "https://dev.local")
assert rv.data == b"default"
# suppress Werkzeug 1.0 warning about name mismatch
with pytest.warns(None):
rv = client.get("/", "http://foo.localhost")
assert rv.status_code == 404 assert rv.status_code == 404
except ValueError as e:
# Werkzeug 0.7
assert str(e) == (
"the server name provided "
"('localhost.localdomain:443') does not match the "
"server name from the WSGI environment ('localhost.localdomain')"
)
try: rv = client.get("/", "http://foo.dev.local")
app.config.update(SERVER_NAME='localhost.localdomain') assert rv.data == b"subdomain"
rv = client.get('/', 'http://foo.localhost')
# Werkzeug 0.8
assert rv.status_code == 404
except ValueError as e:
# Werkzeug 0.7
assert str(e) == (
"the server name provided "
"('localhost.localdomain') does not match the "
"server name from the WSGI environment ('foo.localhost')"
)
rv = client.get('/', 'http://foo.localhost.localdomain')
assert rv.data == b'Foo SubDomain'
def test_exception_propagation(app, client): def test_exception_propagation(app, client):
@ -1854,9 +1838,11 @@ def test_subdomain_matching_other_name(matching):
def index(): def index():
return '', 204 return '', 204
# ip address can't match name # suppress Werkzeug 0.15 warning about name mismatch
rv = client.get('/', 'http://127.0.0.1:3000/') with pytest.warns(None):
assert rv.status_code == 404 if matching else 204 # ip address can't match name
rv = client.get('/', 'http://127.0.0.1:3000/')
assert rv.status_code == 404 if matching else 204
# allow all subdomains if matching is disabled # allow all subdomains if matching is disabled
rv = client.get('/', 'http://www.localhost.localdomain:3000/') rv = client.get('/', 'http://www.localhost.localdomain:3000/')

View file

@ -443,7 +443,7 @@ class TestSendfile(object):
assert rv.data == f.read() assert rv.data == f.read()
rv.close() rv.close()
def test_send_file_xsendfile(self, app, req_ctx, catch_deprecation_warnings): def test_send_file_xsendfile(self, app, req_ctx):
app.use_x_sendfile = True app.use_x_sendfile = True
rv = flask.send_file('static/index.html') rv = flask.send_file('static/index.html')
assert rv.direct_passthrough assert rv.direct_passthrough

View file

@ -88,15 +88,10 @@ def test_proper_test_request_context(app):
assert flask.url_for('sub', _external=True) == \ assert flask.url_for('sub', _external=True) == \
'http://foo.localhost.localdomain:5000/' 'http://foo.localhost.localdomain:5000/'
try: # suppress Werkzeug 0.15 warning about name mismatch
with pytest.warns(None):
with app.test_request_context('/', environ_overrides={'HTTP_HOST': 'localhost'}): with app.test_request_context('/', environ_overrides={'HTTP_HOST': 'localhost'}):
pass pass
except ValueError as e:
assert str(e) == (
"the server name provided "
"('localhost.localdomain:5000') does not match the "
"server name from the WSGI environment ('localhost')"
)
app.config.update(SERVER_NAME='localhost') app.config.update(SERVER_NAME='localhost')
with app.test_request_context('/', environ_overrides={'SERVER_NAME': 'localhost'}): with app.test_request_context('/', environ_overrides={'SERVER_NAME': 'localhost'}):

View file

@ -33,7 +33,7 @@ commands =
pip install -q -e examples/javascript[test] pip install -q -e examples/javascript[test]
# pytest-cov doesn't seem to play nice with -p # pytest-cov doesn't seem to play nice with -p
coverage run -p -m pytest --tb=short {posargs:tests examples} coverage run -p -m pytest --tb=short -Werror {posargs:tests examples}
[testenv:nightly] [testenv:nightly]
# courtesy Python nightly test, don't fail the build in CI # courtesy Python nightly test, don't fail the build in CI
@ -41,7 +41,7 @@ ignore_outcome = true
commands = commands =
pip install -q -e examples/tutorial[test] pip install -q -e examples/tutorial[test]
pip install -q -e examples/javascript[test] pip install -q -e examples/javascript[test]
coverage run -p -m pytest --tb=short --junitxml=test-results.xml {posargs:tests examples} coverage run -p -m pytest --tb=short -Werror --junitxml=test-results.xml {posargs:tests examples}
[testenv:stylecheck] [testenv:stylecheck]
deps = pre-commit deps = pre-commit