def test_data_uri_stripping(self, b64decode): for uri in ("data:abc;def,foo", "data:def,foo", "data:foo"): appbase.try_get_resource( self.err, None, uri, "webapp.manifest", "icon") eq_(b64decode.call_args[0][0], "foo")
def test_eventual_404(self, r_g): error_response = Mock() error_response.raw.read.side_effect = ["x" * 100, ""] error_response.status_code = 404 r_g.return_value = error_response appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True)
def test_too_big(self, r_g): big_response_object = Mock() big_response_object.raw.read.return_value = "x" * 100 big_response_object.status_code = 200 r_g.return_value = big_response_object appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True)
def test_bad_url_MissingSchema_normalized(self): self.err.save_resource("manifest_url", "ftp://test.com/manifest.webapp") with patch("appvalidator.testcases.webappbase." "requests.get") as requests_get: requests_get.side_effect = DummyException try: appbase.try_get_resource(self.err, None, "/zip/zap", "") except DummyException: requests_get.assert_called_once_with( "ftp://test.com/zip/zap", stream=True, allow_redirects=True, timeout=3, headers=appbase.HEADERS ) else: raise AssertionError("Should have gotten DummyException")
def test_decode_gzip(self, r_g): def compressed_gzip_body(): stream = cStringIO.StringIO() compressor = gzip.GzipFile(fileobj=stream, mode='w') compressor.write(u"é".encode('utf-8') * 100) compressor.close() stream.seek(0) return stream normal_response_object = Mock() # Build an HTTPResponse object like the one requests uses, with # a gzip compressed body. `decode_content` needs to be False to # properly emulate requests behaviour : it's the caller's # responsability to decode, since it's supposed to be a raw stream. body = compressed_gzip_body() normal_response_object.raw = HTTPResponse( status=200, preload_content=False, headers={ 'content-encoding': 'gzip', 'content-type': 'application/blah; charset=utf-8' }, body=body, decode_content=False) normal_response_object.encoding = 'UTF-8' normal_response_object.status_code = 200 r_g.return_value = normal_response_object eq_(appbase.try_get_resource(self.err, None, "http://foo.bar/", ""), u"é" * 100) self.assert_silent()
def test_bad_url_MissingSchema_normalized(self): self.err.save_resource("manifest_url", "ftp://test.com/manifest.webapp") with patch("appvalidator.testcases.webappbase." "requests.get") as requests_get: requests_get.side_effect = DummyException try: appbase.try_get_resource(self.err, None, "/zip/zap", "") except DummyException: requests_get.assert_called_once_with("ftp://test.com/zip/zap", prefetch=False, allow_redirects=True, timeout=3, headers=appbase.HEADERS) else: raise AssertionError("Should have gotten DummyException")
def test_empty(self, r_g): empty_response = Mock() empty_response.raw.read.return_value = "" empty_response.status_code = 200 r_g.return_value = empty_response eq_(appbase.try_get_resource(self.err, None, "http://foo.bar/", ""), "") self.assert_failed(with_errors=True)
def test_just_right(self, r_g): normal_response_object = Mock() normal_response_object.raw.read.side_effect = ["x" * 100, ""] normal_response_object.status_code = 200 r_g.return_value = normal_response_object eq_(appbase.try_get_resource(self.err, None, "http://foo.bar/", ""), "x" * 100) self.assert_silent()
def test_unicodeness(self, r_g): normal_response_object = Mock() normal_response_object.raw.read.side_effect = [u"é".encode('utf-8') * 100, ""] normal_response_object.encoding = "UTF-8" normal_response_object.status_code = 200 r_g.return_value = normal_response_object eq_(appbase.try_get_resource(self.err, None, "http://foo.bar/", ""), u"é" * 100) self.assert_silent()
def test_unicodeness(self, r_g): normal_response_object = Mock() normal_response_object.raw.read.side_effect = [ u"é".encode('utf-8') * 100, "" ] normal_response_object.encoding = "UTF-8" normal_response_object.status_code = 200 r_g.return_value = normal_response_object eq_(appbase.try_get_resource(self.err, None, "http://foo.bar/", ""), u"é" * 100) self.assert_silent()
def test_unicode_binary(self, r_g): normal_response_object = Mock() # The u"é" is *not* encoded in UTF-8 this time, so it would throw an # UnicodeEncodeError if we'd try to decode it. normal_response_object.raw.read.side_effect = [u"é" * 100, ""] normal_response_object.encoding = "UTF-8" normal_response_object.status_code = 200 r_g.return_value = normal_response_object eq_(appbase.try_get_resource(self.err, None, "http://foo.bar/", "", binary=True), u"é" * 100) self.assert_silent()
def test_unicode_binary(self, r_g): normal_response_object = Mock() # The u"é" is *not* encoded in UTF-8 this time, so it would throw an # UnicodeEncodeError if we'd try to decode it. normal_response_object.raw.read.side_effect = [u"é" * 100, ""] normal_response_object.encoding = "UTF-8" normal_response_object.status_code = 200 r_g.return_value = normal_response_object eq_( appbase.try_get_resource(self.err, None, "http://foo.bar/", "", binary=True), u"é" * 100) self.assert_silent()
def test_TooManyRedirects(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True)
def test_not_duplicated(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True) appbase.try_get_resource(self.err, None, "http://foo.bar/", "") assert len(self.err.errors) == 1, ( "HTTP errors should not be duplicated.")
def test_absolute_url(self, requests_get): requests_get.side_effect = ValueError("Whoops!") appbase.try_get_resource(self.err, self.package, "http://foo.bar/", "")
def test_local_not_found(self): self.package.read.side_effect = Exception("read error") appbase.try_get_resource(self.err, self.package, "local.txt", "") self.package.read.assert_called_once_with("local.txt") self.assert_failed(with_errors=True)
def test_bad_url_URLRequired(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True)
def test_data_uri_when_appropriate(self, tgdu): assert appbase.try_get_resource( self.err, None, "data:foobar", "webapp.manifest", "icon") assert tgdu.called
def test_not_duplicated(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True) appbase.try_get_resource(self.err, None, "http://foo.bar/", "") assert len( self.err.errors) == 1, ("HTTP errors should not be duplicated.")
def test_data_uri_when_appropriate(self, tgdu): assert appbase.try_get_resource(self.err, None, "data:foobar", "webapp.manifest", "icon") assert tgdu.called
def test_data_uri_stripping(self, b64decode): for uri in ("data:abc;def,foo", "data:def,foo", "data:foo"): appbase.try_get_resource(self.err, None, uri, "webapp.manifest", "icon") eq_(b64decode.call_args[0][0], "foo")
def test_local_url_relative(self): eq_(appbase.try_get_resource(self.err, self.package, "local.txt", ""), "read") self.package.read.assert_called_once_with("local.txt")
def test_bad_url_MissingSchema(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_warnings=True)
def test_HTTPError(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True)
def test_Timeout(self): appbase.try_get_resource(self.err, None, "http://foo.bar/", "") self.assert_failed(with_errors=True, with_warnings=False)
def test_local_url_relative(self): eq_(appbase.try_get_resource( self.err, self.package, "local.txt", ""), "read") self.package.read.assert_called_once_with("local.txt")