Files
reelbox/test/download_capabilities_test.dart
T

59 lines
1.9 KiB
Dart

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:reelbox/media/media_files_io.dart' as files;
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
test(
'parallel optimization requires a successful HEAD with size and ranges',
() async {
final previous = HttpOverrides.current;
HttpOverrides.global = null;
addTearDown(() => HttpOverrides.global = previous);
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
addTearDown(() => server.close(force: true));
final methods = <String>[];
server.listen((request) async {
methods.add(request.method);
switch (request.uri.path) {
case '/capable':
request.response.contentLength = 524288;
request.response.headers.set('accept-ranges', 'bytes');
case '/no-head':
request.response.statusCode = HttpStatus.methodNotAllowed;
case '/no-ranges':
request.response.contentLength = 524288;
case '/unknown-size':
request.response.headers.set('accept-ranges', 'bytes');
case '/forbidden':
request.response.statusCode = HttpStatus.forbidden;
default:
request.response.statusCode = HttpStatus.notFound;
}
await request.response.close();
});
String url(String path) => 'http://127.0.0.1:${server.port}$path';
expect(await files.supportsParallelDownload(url('/capable')), isTrue);
for (final path in [
'/no-head',
'/no-ranges',
'/unknown-size',
'/forbidden',
]) {
expect(
await files.supportsParallelDownload(url(path)),
isFalse,
reason: path,
);
}
expect(methods, List.filled(5, 'HEAD'));
expect(
await files.supportsParallelDownload('file:///private.mp4'),
isFalse,
);
},
);
}