diff --git a/tests/unit/test_stubs.py b/tests/unit/test_stubs.py new file mode 100644 index 0000000..7e51450 --- /dev/null +++ b/tests/unit/test_stubs.py @@ -0,0 +1,7 @@ +from vcr.stubs import VCRHTTPSConnection + +class TestVCRConnection(object): + def test_setting_of_attributes_get_propogated_to_real_connection(self): + vcr_connection = VCRHTTPSConnection('www.examplehost.com') + vcr_connection.ssl_version = 'example_ssl_version' + assert vcr_connection.real_connection.ssl_version == 'example_ssl_version' diff --git a/vcr/stubs/__init__.py b/vcr/stubs/__init__.py index 19d57f1..0d9af5d 100644 --- a/vcr/stubs/__init__.py +++ b/vcr/stubs/__init__.py @@ -315,6 +315,27 @@ class VCRConnection(object): with force_reset(): self.real_connection = self._baseclass(*args, **kwargs) + def __setattr__(self, name, value): + """ + We need to define this because any attributes that are set on the + VCRConnection need to be propogated to the real connection. + + For example, urllib3 will set certain attributes on the connection, + such as 'ssl_version'. These attributes need to get set on the real + connection to have the correct and expected behavior. + + TODO: Separately setting the attribute on the two instances is not + ideal. We should switch to a proxying implementation. + """ + try: + setattr(self.real_connection, name, value) + except AttributeError: + # raised if real_connection has not been set yet, such as when + # we're setting the real_connection itself for the first time + pass + + super(VCRConnection, self).__setattr__(name, value) + class VCRHTTPConnection(VCRConnection): '''A Mocked class for HTTP requests'''