Skip to content

Commit 8467b1d

Browse files
authored
Fix dart-lang/gcloud#144 (dart-archive/gcloud#147)
* Fix dart-lang/gcloud#144 * Remove deadcode from test * Removed unused import from test
1 parent 75bfae3 commit 8467b1d

File tree

5 files changed

+65
-36
lines changed

5 files changed

+65
-36
lines changed

pkgs/gcloud/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.8.7
2+
3+
- Fix `Bucket.write` when size is below 1MB.
4+
15
## 0.8.6
26

37
- Throttle streams piped into `Bucket.write` when the size is not known

pkgs/gcloud/lib/src/storage_impl.dart

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,8 @@ class _MediaUploadStreamSink implements StreamSink<List<int>> {
604604
if (_state == _stateProbingLength) {
605605
// As the data is already cached don't bother to wait on somebody
606606
// listening on the stream before adding the data.
607-
_startNormalUpload(Stream.value(_buffer.takeBytes()), _buffer.length);
607+
final length = _buffer.length;
608+
_startNormalUpload(Stream.value(_buffer.takeBytes()), length);
608609
} else {
609610
_resumableController.close();
610611
}
@@ -628,18 +629,22 @@ class _MediaUploadStreamSink implements StreamSink<List<int>> {
628629
_doneCompleter.completeError(e, s);
629630
}
630631

631-
void _startNormalUpload(Stream<List<int>> stream, int? length) {
632+
void _startNormalUpload(Stream<List<int>> stream, int? length) async {
632633
var contentType = _object.contentType ?? 'application/octet-stream';
633634
var media = storage_api.Media(stream, length, contentType: contentType);
634-
_api.objects
635-
.insert(_object, _bucketName,
636-
name: _objectName,
637-
predefinedAcl: _predefinedAcl,
638-
uploadMedia: media,
639-
uploadOptions: storage_api.UploadOptions.defaultOptions)
640-
.then((response) {
635+
try {
636+
final response = await _api.objects.insert(
637+
_object,
638+
_bucketName,
639+
name: _objectName,
640+
predefinedAcl: _predefinedAcl,
641+
uploadMedia: media,
642+
uploadOptions: storage_api.UploadOptions.defaultOptions,
643+
);
641644
_doneCompleter.complete(_ObjectInfoImpl(response));
642-
}, onError: _completeError);
645+
} catch (e, st) {
646+
_completeError(e, st);
647+
}
643648
}
644649

645650
void _startResumableUpload(Stream<List<int>> stream, int? length) {

pkgs/gcloud/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: gcloud
2-
version: 0.8.6
2+
version: 0.8.7
33
description: >-
44
High level idiomatic Dart API for Google Cloud Storage, Pub-Sub and Datastore.
55
repository: https://github.com/dart-lang/gcloud

pkgs/gcloud/test/db/e2e/db_test_impl.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ import 'dart:async';
4747

4848
import 'package:gcloud/db.dart' as db;
4949
import 'package:gcloud/src/datastore_impl.dart' as datastore_impl;
50-
import 'package:http/http.dart';
5150
import 'package:test/test.dart';
5251

5352
import '../../common_e2e.dart';
@@ -733,7 +732,6 @@ Future<void> waitUntilEntitiesHelper<T extends db.Model>(
733732

734733
Future main() async {
735734
late db.DatastoreDB store;
736-
BaseClient? client;
737735

738736
var scopes = datastore_impl.DatastoreImpl.scopes;
739737
await withAuthClient(scopes, (String project, httpClient) {
@@ -743,9 +741,5 @@ Future main() async {
743741
});
744742
});
745743

746-
tearDownAll(() {
747-
client?.close();
748-
});
749-
750744
runTests(store, null);
751745
}

pkgs/gcloud/test/storage/e2e_test.dart

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -113,32 +113,58 @@ void main() {
113113
group('object', () {
114114
// Run all object tests in the same bucket to try to avoid the rate-limit
115115
// for creating and deleting buckets while testing.
116-
Future withTestBucket(Future Function(Bucket bucket) function) {
117-
return function(testBucket).whenComplete(() {
116+
Future<T> withTestBucket<T>(Future<T> Function(Bucket bucket) fn) async {
117+
try {
118+
return await fn(testBucket);
119+
} finally {
118120
// TODO: Clean the bucket.
121+
}
122+
}
123+
124+
void testWithBucket(
125+
String name,
126+
FutureOr<void> Function(Bucket bucket) fn,
127+
) {
128+
test(name, () async {
129+
try {
130+
await fn(testBucket);
131+
} finally {
132+
// TODO: Clean the bucket.
133+
}
119134
});
120135
}
121136

122-
test('create-read-delete', () {
123-
Future test(name, List<int> bytes) {
124-
return withTestBucket((Bucket bucket) {
125-
return bucket.writeBytes('test', bytes).then(expectAsync1((info) {
126-
expect(info, isNotNull);
127-
return bucket.read('test').fold<List<int>>(
128-
[], (p, e) => p..addAll(e)).then(expectAsync1((result) {
129-
expect(result, bytes);
130-
return bucket.delete('test').then(expectAsync1((result) {
131-
expect(result, isNull);
132-
}));
133-
}));
134-
}));
137+
group('create-read-delete', () {
138+
void testCreateReadDelete(String name, List<int> bytes) {
139+
testWithBucket(name, (bucket) async {
140+
final info = await bucket.writeBytes('test', bytes);
141+
expect(info, isNotNull);
142+
final result = await bucket
143+
.read('test')
144+
.fold<List<int>>([], (p, e) => p..addAll(e));
145+
expect(result, bytes);
146+
await bucket.delete('test');
147+
});
148+
}
149+
150+
testCreateReadDelete('test-1', [1, 2, 3]);
151+
testCreateReadDelete('test-2', bytesResumableUpload);
152+
});
153+
154+
group('create-read-delete-streaming', () {
155+
void testCreateReadDelete(String name, List<int> bytes) {
156+
testWithBucket(name, (bucket) async {
157+
await Stream.value(bytes).pipe(bucket.write('test'));
158+
final result = await bucket
159+
.read('test')
160+
.fold<List<int>>([], (p, e) => p..addAll(e));
161+
expect(result, bytes);
162+
await bucket.delete('test');
135163
});
136164
}
137165

138-
return Future.forEach([
139-
() => test('test-1', [1, 2, 3]),
140-
() => test('test-2', bytesResumableUpload)
141-
], (Function f) => f().then(expectAsync1((_) {})));
166+
testCreateReadDelete('test-1', [1, 2, 3, 5, 6, 7, 8, 9]);
167+
testCreateReadDelete('test-2', bytesResumableUpload);
142168
});
143169

144170
test('create-with-predefined-acl-delete', () {

0 commit comments

Comments
 (0)