| # -*- coding: utf-8 -*- |
| """ |
| test_config |
| ~~~~~~~~~~~ |
| |
| Test the configuration object. |
| """ |
| import logging |
| import pytest |
| |
| import h2.config |
| |
| |
| class TestH2Config(object): |
| """ |
| Tests of the H2 config object. |
| """ |
| def test_defaults(self): |
| """ |
| The default values of the HTTP/2 config object are sensible. |
| """ |
| config = h2.config.H2Configuration() |
| assert config.client_side |
| assert config.header_encoding is None |
| assert isinstance(config.logger, h2.config.DummyLogger) |
| |
| boolean_config_options = [ |
| 'client_side', |
| 'validate_outbound_headers', |
| 'normalize_outbound_headers', |
| 'validate_inbound_headers', |
| 'normalize_inbound_headers', |
| ] |
| |
| @pytest.mark.parametrize('option_name', boolean_config_options) |
| @pytest.mark.parametrize('value', [None, 'False', 1]) |
| def test_boolean_config_options_reject_non_bools_init( |
| self, option_name, value |
| ): |
| """ |
| The boolean config options raise an error if you try to set a value |
| that isn't a boolean via the initializer. |
| """ |
| with pytest.raises(ValueError): |
| h2.config.H2Configuration(**{option_name: value}) |
| |
| @pytest.mark.parametrize('option_name', boolean_config_options) |
| @pytest.mark.parametrize('value', [None, 'False', 1]) |
| def test_boolean_config_options_reject_non_bools_attr( |
| self, option_name, value |
| ): |
| """ |
| The boolean config options raise an error if you try to set a value |
| that isn't a boolean via attribute setter. |
| """ |
| config = h2.config.H2Configuration() |
| with pytest.raises(ValueError): |
| setattr(config, option_name, value) |
| |
| @pytest.mark.parametrize('option_name', boolean_config_options) |
| @pytest.mark.parametrize('value', [True, False]) |
| def test_boolean_config_option_is_reflected_init(self, option_name, value): |
| """ |
| The value of the boolean config options, when set, is reflected |
| in the value via the initializer. |
| """ |
| config = h2.config.H2Configuration(**{option_name: value}) |
| assert getattr(config, option_name) == value |
| |
| @pytest.mark.parametrize('option_name', boolean_config_options) |
| @pytest.mark.parametrize('value', [True, False]) |
| def test_boolean_config_option_is_reflected_attr(self, option_name, value): |
| """ |
| The value of the boolean config options, when set, is reflected |
| in the value via attribute setter. |
| """ |
| config = h2.config.H2Configuration() |
| setattr(config, option_name, value) |
| assert getattr(config, option_name) == value |
| |
| @pytest.mark.parametrize('header_encoding', [True, 1, object()]) |
| def test_header_encoding_must_be_false_str_none_init( |
| self, header_encoding |
| ): |
| """ |
| The value of the ``header_encoding`` setting must be False, a string, |
| or None via the initializer. |
| """ |
| with pytest.raises(ValueError): |
| h2.config.H2Configuration(header_encoding=header_encoding) |
| |
| @pytest.mark.parametrize('header_encoding', [True, 1, object()]) |
| def test_header_encoding_must_be_false_str_none_attr( |
| self, header_encoding |
| ): |
| """ |
| The value of the ``header_encoding`` setting must be False, a string, |
| or None via attribute setter. |
| """ |
| config = h2.config.H2Configuration() |
| with pytest.raises(ValueError): |
| config.header_encoding = header_encoding |
| |
| @pytest.mark.parametrize('header_encoding', [False, 'ascii', None]) |
| def test_header_encoding_is_reflected_init(self, header_encoding): |
| """ |
| The value of ``header_encoding``, when set, is reflected in the value |
| via the initializer. |
| """ |
| config = h2.config.H2Configuration(header_encoding=header_encoding) |
| assert config.header_encoding == header_encoding |
| |
| @pytest.mark.parametrize('header_encoding', [False, 'ascii', None]) |
| def test_header_encoding_is_reflected_attr(self, header_encoding): |
| """ |
| The value of ``header_encoding``, when set, is reflected in the value |
| via the attribute setter. |
| """ |
| config = h2.config.H2Configuration() |
| config.header_encoding = header_encoding |
| assert config.header_encoding == header_encoding |
| |
| def test_logger_instance_is_reflected(self): |
| """ |
| The value of ``logger``, when set, is reflected in the value. |
| """ |
| logger = logging.Logger('hyper-h2.test') |
| config = h2.config.H2Configuration() |
| config.logger = logger |
| assert config.logger is logger |