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