Diff comments:

> === modified file 'lib/lp/services/librarianserver/tests/test_web.py'
> --- lib/lp/services/librarianserver/tests/test_web.py 2018-01-02 10:54:31 
> +0000
> +++ lib/lp/services/librarianserver/tests/test_web.py 2018-11-01 18:49:40 
> +0000
> @@ -108,29 +105,34 @@
>          # displaying Ubuntu build logs in the browser.  The mimetype should 
> be
>          # "text/plain" for these files.
>          client = LibrarianClient()
> -        contents = 'Build log...'
> -        build_log = StringIO(contents)
> +        contents = b'Build log...'
> +        build_log = BytesIO()
> +        with GzipFile(mode='wb', fileobj=build_log) as f:

Sorry, I should have explained what was going on here.  I had to do this as 
part of the port to requests because, unlike urllib2, requests understands the 
Content-Encoding and tries to decode it, so without this change you get 
something like:

Error in test test_checkGzipEncoding 
(lp.services.librarianserver.tests.test_web.LibrarianWebTestCase)
Traceback (most recent call last):
_StringException: Traceback (most recent call last):
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/lib/lp/services/librarianserver/tests/test_web.py",
 line 118, in test_checkGzipEncoding
    response = requests.get(url)
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/env/local/lib/python2.7/site-packages/requests/api.py",
 line 69, in get
    return request('get', url, params=params, **kwargs)
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/env/local/lib/python2.7/site-packages/requests/api.py",
 line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/env/local/lib/python2.7/site-packages/requests/sessions.py",
 line 465, in request
    resp = self.send(prep, **send_kwargs)
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/env/local/lib/python2.7/site-packages/requests/sessions.py",
 line 605, in send
    r.content
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/env/local/lib/python2.7/site-packages/requests/models.py",
 line 750, in content
    self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or 
bytes()
  File 
"/home/cjwatson/src/canonical/launchpad/lp-branches/librarianserver-test-web-requests/env/local/lib/python2.7/site-packages/requests/models.py",
 line 678, in generate
    raise ContentDecodingError(e)
requests.exceptions.ContentDecodingError: ('Received response with 
content-encoding: gzip, but failed to decode it.', error('Error -3 while 
decompressing: incorrect header check',))

Making the allegedly-gzipped test content actually be gzipped was the path of 
least resistance here, and seems a lot less weird anyway.

> +            f.write(contents)
> +        build_log.seek(0)
>          alias_id = client.addFile(name="build_log.txt.gz",
> -                                  size=len(contents),
> +                                  size=len(build_log.getvalue()),
>                                    file=build_log,
>                                    contentType="text/plain")
>  
>          self.commit()
>  
>          url = client.getURLForAlias(alias_id)
> -        fileObj = urlopen(url)
> -        mimetype = fileObj.headers['content-type']
> -        encoding = fileObj.headers['content-encoding']
> +        response = requests.get(url)
> +        response.raise_for_status()
> +        mimetype = response.headers['content-type']
> +        encoding = response.headers['content-encoding']
>          self.assertTrue(mimetype == "text/plain; charset=utf-8",
>                          "Wrong mimetype. %s != 'text/plain'." % mimetype)
>          self.assertTrue(encoding == "gzip",
>                          "Wrong encoding. %s != 'gzip'." % encoding)
> +        self.assertEqual(contents, response.content)

I can't use StringIO here for the reasons explained above, but I suppose it's 
worth making sure that all the response headers are such that requests can 
decode the text.  Done.

>  
>      def test_checkNoEncoding(self):
>          # Other files should have no encoding.
>          client = LibrarianClient()
> -        contents = 'Build log...'
> -        build_log = StringIO(contents)
> +        contents = b'Build log...'
> +        build_log = BytesIO(contents)
>          alias_id = client.addFile(name="build_log.tgz",
>                                    size=len(contents),
>                                    file=build_log,


-- 
https://code.launchpad.net/~cjwatson/launchpad/librarianserver-test-web-requests/+merge/358189
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~cjwatson/launchpad/librarianserver-test-web-requests into lp:launchpad.

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : launchpad-reviewers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to