def test_put(client, db, bucket, permissions, multipart, multipart_url, get_md5, get_json): """Test part upload.""" cases = [ (None, 404), ('auth', 404), ('objects', 404), # TODO - use 403 instead ('bucket', 200), ('location', 200), ] for user, expected in cases: login_user(client, permissions[user]) data = b'a' * multipart.chunk_size res = client.put( multipart_url + '&partNumber={0}'.format(1), input_stream=BytesIO(data), ) assert res.status_code == expected if res.status_code == 200: assert res.get_etag()[0] == get_md5(data) # Assert content with open(multipart.file.uri, 'rb') as fp: fp.seek(multipart.chunk_size) content = fp.read(multipart.chunk_size) assert content == data assert Part.count(multipart) == 1 assert Part.get_or_none(multipart, 1).checksum == get_md5(data)
def test_put(client, db, bucket, permissions, multipart, multipart_url, get_md5, get_json): """Test part upload.""" cases = [ (None, 404), ('auth', 404), ('objects', 404), # TODO - use 403 instead ('bucket', 200), ('location', 200), ] for user, expected in cases: login_user(client, permissions[user]) data = b'a' * multipart.chunk_size res = client.put( multipart_url + '&partNumber={0}'.format(1), input_stream=BytesIO(data), ) assert res.status_code == expected if res.status_code == 200: assert res.get_etag()[0] == get_md5(data) # Assert content with open(multipart.file.uri, 'rb') as fp: fp.seek(multipart.chunk_size) content = fp.read(multipart.chunk_size) assert content == data assert Part.count(multipart) == 1 assert Part.get_or_none(multipart, 1).checksum == get_md5(data)
def test_part_creation(app, db, bucket, get_sha256): """Test part creation.""" assert bucket.size == 0 mp = MultipartObject.create(bucket, 'test.txt', 5, 2) db.session.commit() assert bucket.size == 5 Part.create(mp, 2, stream=BytesIO(b'p')) Part.create(mp, 0, stream=BytesIO(b'p1')) Part.create(mp, 1, stream=BytesIO(b'p2')) db.session.commit() assert bucket.size == 5 mp.complete() db.session.commit() assert bucket.size == 5 # Assert checksum of part. m = hashlib.sha256() m.update(b'p2') assert "sha256:{0}".format(m.hexdigest()) == \ Part.get_or_none(mp, 1).checksum obj = mp.merge_parts() db.session.commit() assert bucket.size == 5 assert MultipartObject.query.count() == 0 assert Part.query.count() == 0 assert obj.file.size == 5 assert obj.file.checksum == get_sha256(b'p1p2p') assert obj.file.storage().open().read() == b'p1p2p' assert obj.file.writable is False assert obj.file.readable is True assert obj.version_id == ObjectVersion.get(bucket, 'test.txt').version_id
def test_part_creation(app, db, bucket, get_md5): """Test part creation.""" assert bucket.size == 0 mp = MultipartObject.create(bucket, 'test.txt', 5, 2) db.session.commit() assert bucket.size == 5 Part.create(mp, 2, stream=BytesIO(b'p')) Part.create(mp, 0, stream=BytesIO(b'p1')) Part.create(mp, 1, stream=BytesIO(b'p2')) db.session.commit() assert bucket.size == 5 mp.complete() db.session.commit() assert bucket.size == 5 # Assert checksum of part. m = hashlib.md5() m.update(b'p2') assert "md5:{0}".format(m.hexdigest()) == Part.get_or_none(mp, 1).checksum obj = mp.merge_parts() db.session.commit() assert bucket.size == 5 assert MultipartObject.query.count() == 0 assert Part.query.count() == 0 assert obj.file.size == 5 assert obj.file.checksum == get_md5(b'p1p2p') assert obj.file.storage().open().read() == b'p1p2p' assert obj.file.writable is False assert obj.file.readable is True assert obj.version_id == ObjectVersion.get(bucket, 'test.txt').version_id