async def _create_blob(self, stream): blob_stream = streams.JSONStream({ 'encoding': 'base64', 'content': streams.Base64EncodeStream(stream), }) sha1_calculator = streams.HashStreamWriter(hashlib.sha1) stream.add_writer('sha1', sha1_calculator) git_blob_header = 'blob {}\0'.format(str(stream.size)) sha1_calculator.write(git_blob_header.encode('utf-8')) resp = await self.make_request( 'POST', self.build_repo_url('git', 'blobs'), data=blob_stream, headers={ 'Content-Type': 'application/json', 'Content-Length': str(blob_stream.size), }, expects=(201, ), throws=exceptions.UploadError, ) blob_metadata = await resp.json() if stream.writers['sha1'].hexdigest != blob_metadata['sha']: raise exceptions.UploadChecksumMismatchError() return blob_metadata
def test_read(self): data = b'this is a test' expected = base64.b64encode(data) stream = streams.Base64EncodeStream(streams.StringStream(data)) actual = yield from stream.read() assert expected == actual
def test_github_at_once(self): stream = streams.JSONStream({ 'encoding': 'base64', 'content': streams.Base64EncodeStream(streams.StringStream('These are some words')), }) buffer = yield from stream.read() assert json.loads(buffer.decode('utf-8')) == { 'encoding': 'base64', 'content': 'VGhlc2UgYXJlIHNvbWUgd29yZHM=' }
def test_chunking(self): for chunk_size in range(1, 10): data = b'the ode to carp' expected = streams.StringStream(base64.b64encode(data)) stream = streams.Base64EncodeStream(streams.StringStream(data)) hoped = yield from expected.read(chunk_size) while hoped: actual = yield from stream.read(chunk_size) assert actual == hoped hoped = yield from expected.read(chunk_size) left_overs = yield from stream.read() assert left_overs == b''
async def test_github(self): stream = streams.JSONStream({ 'encoding': 'base64', 'content': streams.Base64EncodeStream(streams.StringStream('These are some words')), }) buffer = b'' chunk = await stream.read(1) while chunk: buffer += chunk chunk = await stream.read(1) assert json.loads(buffer.decode('utf-8')) == { 'encoding': 'base64', 'content': 'VGhlc2UgYXJlIHNvbWUgd29yZHM=' }
def _create_blob(self, stream): blob_stream = streams.JSONStream({ 'encoding': 'base64', 'content': streams.Base64EncodeStream(stream), }) resp = yield from self.make_request( 'POST', self.build_repo_url('git', 'blobs'), data=blob_stream, headers={ 'Content-Type': 'application/json', 'Content-Length': str(blob_stream.size), }, expects=(201, ), throws=exceptions.UploadError, ) return (yield from resp.json())
def test_size(self): data = b'the ode to carp' expected = base64.b64encode(data) stream = streams.Base64EncodeStream(streams.StringStream(data)) assert len(expected) == int(stream.size)
def test_doesnt_crash_with_none(self): stream = streams.Base64EncodeStream(streams.StringStream(b'')) data = yield from stream.read() assert data == b''