117 lines
3.4 KiB
Python
117 lines
3.4 KiB
Python
#!/usr/bin/env python
|
|
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import mozunit
|
|
import pytest
|
|
from mozprofile.permissions import (
|
|
BadPortLocationError,
|
|
LocationsSyntaxError,
|
|
MissingPrimaryLocationError,
|
|
MultiplePrimaryLocationsError,
|
|
ServerLocations,
|
|
)
|
|
|
|
LOCATIONS = """# This is the primary location from which tests run.
|
|
#
|
|
http://mochi.test:8888 primary,privileged
|
|
|
|
# a few test locations
|
|
http://127.0.0.1:80 privileged
|
|
http://127.0.0.1:8888 privileged
|
|
https://test:80 privileged
|
|
http://example.org:80 privileged
|
|
http://test1.example.org privileged
|
|
|
|
"""
|
|
|
|
LOCATIONS_NO_PRIMARY = """http://secondary.test:80 privileged
|
|
http://tertiary.test:8888 privileged
|
|
"""
|
|
|
|
LOCATIONS_BAD_PORT = """http://mochi.test:8888 primary,privileged
|
|
http://127.0.0.1:80 privileged
|
|
http://127.0.0.1:8888 privileged
|
|
http://test:badport privileged
|
|
http://example.org:80 privileged
|
|
"""
|
|
|
|
|
|
def compare_location(location, scheme, host, port, options):
|
|
assert location.scheme == scheme
|
|
assert location.host == host
|
|
assert location.port == port
|
|
assert location.options == options
|
|
|
|
|
|
@pytest.fixture
|
|
def create_temp_file(tmpdir):
|
|
def inner(contents):
|
|
f = tmpdir.mkdtemp().join("locations.txt")
|
|
f.write(contents)
|
|
return f.strpath
|
|
|
|
return inner
|
|
|
|
|
|
def test_server_locations(create_temp_file):
|
|
# write a permissions file
|
|
f = create_temp_file(LOCATIONS)
|
|
|
|
# read the locations
|
|
locations = ServerLocations(f)
|
|
|
|
# ensure that they're what we expect
|
|
assert len(locations) == 6
|
|
i = iter(locations)
|
|
compare_location(next(i), "http", "mochi.test", "8888", ["primary", "privileged"])
|
|
compare_location(next(i), "http", "127.0.0.1", "80", ["privileged"])
|
|
compare_location(next(i), "http", "127.0.0.1", "8888", ["privileged"])
|
|
compare_location(next(i), "https", "test", "80", ["privileged"])
|
|
compare_location(next(i), "http", "example.org", "80", ["privileged"])
|
|
compare_location(next(i), "http", "test1.example.org", "8888", ["privileged"])
|
|
|
|
locations.add_host("mozilla.org")
|
|
assert len(locations) == 7
|
|
compare_location(next(i), "http", "mozilla.org", "80", ["privileged"])
|
|
|
|
# test some errors
|
|
with pytest.raises(MultiplePrimaryLocationsError):
|
|
locations.add_host("primary.test", options="primary")
|
|
|
|
# assert we don't throw DuplicateLocationError
|
|
locations.add_host("127.0.0.1")
|
|
|
|
with pytest.raises(BadPortLocationError):
|
|
locations.add_host("127.0.0.1", port="abc")
|
|
|
|
# test some errors in locations file
|
|
f = create_temp_file(LOCATIONS_NO_PRIMARY)
|
|
|
|
exc = None
|
|
try:
|
|
ServerLocations(f)
|
|
except LocationsSyntaxError as e:
|
|
exc = e
|
|
assert exc is not None
|
|
assert exc.err.__class__ == MissingPrimaryLocationError
|
|
assert exc.lineno == 3
|
|
|
|
# test bad port in a locations file to ensure lineno calculated
|
|
# properly.
|
|
f = create_temp_file(LOCATIONS_BAD_PORT)
|
|
|
|
exc = None
|
|
try:
|
|
ServerLocations(f)
|
|
except LocationsSyntaxError as e:
|
|
exc = e
|
|
assert exc is not None
|
|
assert exc.err.__class__ == BadPortLocationError
|
|
assert exc.lineno == 4
|
|
|
|
|
|
if __name__ == "__main__":
|
|
mozunit.main()
|