From 6b935ff7e9bbf6cadd2d04dea0913ff81f382406 Mon Sep 17 00:00:00 2001 From: xuty <xty50337@hotmail.com> Date: Tue, 4 Jan 2022 22:45:51 +0800 Subject: [PATCH] Add tests --- lib/src/minio_client.dart | 28 +++++++++++++++++----------- lib/src/minio_uploader.dart | 2 +- test/minio_test.dart | 25 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/lib/src/minio_client.dart b/lib/src/minio_client.dart index 40ca29a..af0d2ef 100644 --- a/lib/src/minio_client.dart +++ b/lib/src/minio_client.dart @@ -20,29 +20,35 @@ class MinioRequest extends BaseRequest { ByteStream finalize() { super.finalize(); - late final ByteStream byteStream; + if (body == null) { + return const ByteStream(Stream.empty()); + } + + if (body is Stream<Uint8List>) { + return ByteStream(body); + } + + late Stream<Uint8List> stream; if (body is String) { - final data = utf8.encode(body); + final data = Utf8Encoder().convert(body); headers['content-length'] = data.length.toString(); - byteStream = ByteStream.fromBytes(utf8.encode(body)); - } else if (body is List<int>) { + stream = Stream<Uint8List>.value(data); + } else if (body is Uint8List) { + stream = Stream<Uint8List>.value(body); headers['content-length'] = body.length.toString(); - byteStream = ByteStream.fromBytes(body); - } else if (body is Stream<List<int>>) { - byteStream = ByteStream(body); - } else { - throw UnsupportedError('unsupported body type: ${body.runtimeType}'); } + stream = stream.transform(BlockStream(1 << 16)); + if (onProgress == null) { - return byteStream; + return ByteStream(stream); } var bytesRead = 0; return ByteStream( - byteStream.transform( + stream.transform( StreamTransformer.fromHandlers( handleData: (data, sink) { sink.add(data); diff --git a/lib/src/minio_uploader.dart b/lib/src/minio_uploader.dart index ae74afa..6926a8c 100644 --- a/lib/src/minio_uploader.dart +++ b/lib/src/minio_uploader.dart @@ -118,7 +118,7 @@ class MinioUploader implements StreamConsumer<Uint8List> { queries: queries, bucket: bucket, object: object, - payload: Stream.value(chunk).transform(BlockStream(1 << 16)), + payload: chunk, onProgress: _updateProgress, ); diff --git a/test/minio_test.dart b/test/minio_test.dart index 550e42c..3d0d0c2 100644 --- a/test/minio_test.dart +++ b/test/minio_test.dart @@ -398,8 +398,33 @@ void testPutObject() { Stream.value(objectData), onProgress: (bytes) => progress = bytes, ); + await minio.removeObject(bucketName, objectName); expect(progress, equals(objectData.length)); + }); + + test('medium size file upload works', () async { + final objectName = uniqueName(); + final dataLength = 1024 * 1024; + final data = Uint8List.fromList(List<int>.generate(dataLength, (i) => i)); + await minio.putObject(bucketName, objectName, Stream.value(data)); + final stat = await minio.statObject(bucketName, objectName); + await minio.removeObject(bucketName, objectName); + expect(stat.size, equals(dataLength)); + }); + + test('large file upload works', () async { + final objectName = uniqueName(); + final dataLength = 12 * 1024 * 1024; + final data = Uint8List.fromList(List<int>.generate(dataLength, (i) => i)); + await minio.putObject( + bucketName, + objectName, + Stream.value(data), + chunkSize: 5 * 1024 * 1024, + ); + final stat = await minio.statObject(bucketName, objectName); await minio.removeObject(bucketName, objectName); + expect(stat.size, equals(dataLength)); }); }); } -- GitLab