Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: pkg/pubserver/test/shelf_pubserver_test.dart

Issue 917793002: Use pub_server package (Closed) Base URL: git@github.com:dart-lang/pub-dartlang-dart.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/pubserver/pubspec.yaml ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/pubserver/test/shelf_pubserver_test.dart
diff --git a/pkg/pubserver/test/shelf_pubserver_test.dart b/pkg/pubserver/test/shelf_pubserver_test.dart
deleted file mode 100644
index 036ba91bddbe0c8785b60ee692c8b210012304a0..0000000000000000000000000000000000000000
--- a/pkg/pubserver/test/shelf_pubserver_test.dart
+++ /dev/null
@@ -1,371 +0,0 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library pubserver.shelf_pubserver_test;
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'package:shelf/shelf.dart' as shelf;
-import 'package:pubserver/repository.dart';
-import 'package:pubserver/shelf_pubserver.dart';
-import 'package:unittest/unittest.dart';
-
-class RepositoryMock implements PackageRepository {
- final Function downloadFun;
- final Function downloadUrlFun;
- final Function finishAsyncUploadFun;
- final Function lookupVersionFun;
- final Function startAsyncUploadFun;
- final Function uploadFun;
- final Function versionsFun;
-
- RepositoryMock(
- {this.downloadFun, this.downloadUrlFun, this.finishAsyncUploadFun,
- this.lookupVersionFun, this.startAsyncUploadFun, this.uploadFun,
- this.versionsFun, this.supportsAsyncUpload: false,
- this.supportsDownloadUrl: false, this.supportsUpload: false});
-
- Future<Stream> download(String package, String version) async {
- if (downloadFun != null) return downloadFun(package, version);
- throw 'download';
- }
-
- Future<Uri> downloadUrl(String package, String version) async {
- if (downloadUrlFun != null) return downloadUrlFun(package, version);
- throw 'downloadUrl';
- }
-
- Future finishAsyncUpload(Uri uri) async {
- if (finishAsyncUploadFun != null) return finishAsyncUploadFun(uri);
- throw 'finishAsyncUpload';
- }
-
- Future<PackageVersion> lookupVersion(String package, String version) async {
- if (lookupVersionFun != null) return lookupVersionFun(package, version);
- throw 'lookupVersion';
- }
-
- Future<AsyncUploadInfo> startAsyncUpload(Uri redirectUrl) async {
- if (startAsyncUploadFun != null) {
- return startAsyncUploadFun(redirectUrl);
- }
- throw 'startAsyncUpload';
- }
-
- final bool supportsAsyncUpload;
-
- final bool supportsDownloadUrl;
-
- final bool supportsUpload;
-
- Future upload(Stream<List<int>> data) {
- if (uploadFun != null) return uploadFun(data);
- throw 'upload';
- }
-
- Stream<PackageVersion> versions(String package) {
- if (versionsFun != null) return versionsFun(package);
- return new Stream.fromFuture(new Future.error('versions'));
- }
-}
-
-Uri getUri(String path) => Uri.parse('http://www.example.com$path');
-
-shelf.Request getRequest(String path) {
- var url = getUri(path);
- return new shelf.Request('GET', url);
-}
-
-shelf.Request multipartRequest(Uri uri, List<int> bytes) {
- var requestBytes = [];
- String boundary = 'testboundary';
-
- requestBytes.addAll(ASCII.encode('--$boundary\r\n'));
- requestBytes.addAll(
- ASCII.encode('Content-Type: application/octet-stream\r\n'));
- requestBytes.addAll(ASCII.encode('Content-Length: ${bytes.length}\r\n'));
- requestBytes.addAll(ASCII.encode('Content-Disposition: '
- 'form-data; name="file"; '
- 'filename="package.tar.gz"\r\n\r\n'));
- requestBytes.addAll(bytes);
- requestBytes.addAll(ASCII.encode('\r\n--$boundary--\r\n'));
-
- var headers = {
- 'Content-Type' : 'multipart/form-data; boundary="$boundary"',
- 'Content-Length' : '${requestBytes.length}',
- };
-
- var body = new Stream.fromIterable([requestBytes]);
- return new shelf.Request('POST', uri, headers: headers, body: body);
-}
-
-main() {
- group('shelf_pubserver', () {
- test('invalid endpoint', () async {
- var mock = new RepositoryMock();
- var server = new ShelfPubServer(mock);
-
- testInvalidUrl(String path) async {
- var request = getRequest(path);
- var response = await server.requestHandler(request);
- await response.read().drain();
- expect(response.statusCode, equals(404));
- }
-
- await testInvalidUrl('/foobar');
- await testInvalidUrl('/api');
- await testInvalidUrl('/api/');
- await testInvalidUrl('/api/packages/analyzer/0.1.0');
- });
-
- group('/api/packages/<package>', () {
- test('does not exist', () async {
- var mock =
- new RepositoryMock(versionsFun: (_) => new Stream.fromIterable([]));
- var server = new ShelfPubServer(mock);
- var request = getRequest('/api/packages/analyzer');
-
- var response = await server.requestHandler(request);
- await response.read().drain();
- expect(response.statusCode, equals(404));
- });
-
- test('success full retrieval of version', () async {
- var mock = new RepositoryMock(versionsFun: (String package) {
- // The pubspec is invalid, but that is irrelevant for this test.
- var pubspec = JSON.encode({'foo': 1});
- var analyzer = new PackageVersion('analyzer', '0.1.0', pubspec);
- return new Stream.fromIterable([analyzer]);
- });
- var server = new ShelfPubServer(mock);
- var request = getRequest('/api/packages/analyzer');
- var response = await server.requestHandler(request);
- var body = await response.readAsString();
-
- var expectedVersionJson = {
- 'pubspec': {'foo': 1},
- 'version': '0.1.0',
- 'archive_url':
- '${getUri('/packages/analyzer/versions/0.1.0.tar.gz')}',
- };
- var expectedJson = {
- 'name': 'analyzer',
- 'latest': expectedVersionJson,
- 'versions': [expectedVersionJson],
- };
-
- expect(response.mimeType, equals('application/json'));
- expect(response.statusCode, equals(200));
- expect(JSON.decode(body), equals(expectedJson));
- });
- });
-
- group('/api/packages/<package>/versions/<version>', () {
- test('does not exist', () async {
- var mock = new RepositoryMock(lookupVersionFun: (_, __) => null);
- var server = new ShelfPubServer(mock);
- var request = getRequest('/api/packages/analyzer/versions/0.1.0');
-
- var response = await server.requestHandler(request);
- await response.read().drain();
- expect(response.statusCode, equals(404));
- });
-
- test('success full retrieval of version', () async {
- var mock = new RepositoryMock(
- lookupVersionFun: (String package, String version) {
- // The pubspec is invalid, but that is irrelevant for this test.
- var pubspec = JSON.encode({'foo': 1});
- return new PackageVersion(package, version, pubspec);
- });
- var server = new ShelfPubServer(mock);
- var request = getRequest('/api/packages/analyzer/versions/0.1.0');
- var response = await server.requestHandler(request);
- var body = await response.readAsString();
-
- var expectedJson = {
- 'pubspec': {'foo': 1},
- 'version': '0.1.0',
- 'archive_url':
- '${getUri('/packages/analyzer/versions/0.1.0.tar.gz')}',
- };
-
- expect(response.mimeType, equals('application/json'));
- expect(response.statusCode, equals(200));
- expect(JSON.decode(body), equals(expectedJson));
- });
- });
-
- group('/packages/<package>/versions/<version>.tar.gz', () {
- group('download', () {
- test('successfull redirect', () async {
- var mock = new RepositoryMock(
- downloadFun: (String package, String version) {
- return new Stream.fromIterable([[1, 2, 3]]);
- });
- var server = new ShelfPubServer(mock);
- var request = getRequest('/packages/analyzer/versions/0.1.0.tar.gz');
- var response = await server.requestHandler(request);
- var body = await response.read().fold([], (b, d) => b..addAll(d));
-
- expect(response.statusCode, equals(200));
- expect(body, equals([1, 2, 3]));
- });
- });
-
- group('download url', () {
- test('successfull redirect', () async {
- var expectedUrl =
- Uri.parse('https://blobs.com/analyzer-0.1.0.tar.gz');
- var mock = new RepositoryMock(supportsDownloadUrl: true,
- downloadUrlFun: (String package, String version) {
- return expectedUrl;
- });
- var server = new ShelfPubServer(mock);
- var request = getRequest('/packages/analyzer/versions/0.1.0.tar.gz');
- var response = await server.requestHandler(request);
- var body = await response.readAsString();
-
- expect(response.statusCode, equals(303));
- expect(response.headers['location'], equals('$expectedUrl'));
- });
- });
- });
-
- group('/api/packages/versions/new', () {
- test('async successfull', () async {
- var expectedUrl = Uri.parse('https://storage.googleapis.com');
- var foobarUrl = Uri.parse('https://foobar.com/package/done');
- var newUrl = getUri('/api/packages/versions/new');
- var finishUrl = getUri('/api/packages/versions/newUploadFinish');
- var mock = new RepositoryMock(
- supportsUpload: true,
- supportsAsyncUpload: true,
- startAsyncUploadFun: (Uri redirectUri) {
- expect(redirectUri, equals(finishUrl));
- return new Future.value(
- new AsyncUploadInfo(expectedUrl, {'a' : '$foobarUrl'}));
- }, finishAsyncUploadFun: (Uri uri) {
- expect('$uri', equals('$finishUrl'));
- });
- var server = new ShelfPubServer(mock);
-
- // Start upload
- var request = new shelf.Request('GET', newUrl);
- var response = await server.requestHandler(request);
-
- expect(response.statusCode, equals(200));
- expect(response.headers['content-type'], equals('application/json'));
-
- var jsonBody = JSON.decode(await response.readAsString());
- expect(jsonBody, equals({
- 'url' : '$expectedUrl',
- 'fields' : {
- 'a' : '$foobarUrl',
- },
- }));
-
- // We would do now a multipart POST to `expectedUrl` which would
- // redirect us back to the pub.dartlang.org app via `finishUrl`.
-
- // Call the `finishUrl`.
- request = new shelf.Request('GET', finishUrl);
- response = await server.requestHandler(request);
- jsonBody = JSON.decode(await response.readAsString());
- expect(jsonBody, equals({
- 'success' : {
- 'message' : 'Successfully uploaded package.'
- },
- }));
- });
-
- test('sync successfull', () async {
- var tarballBytes = const [1, 2, 3];
- var newUrl = getUri('/api/packages/versions/new');
- var uploadUrl = getUri('/api/packages/versions/newUpload');
- var finishUrl = getUri('/api/packages/versions/newUploadFinish');
- var mock = new RepositoryMock(
- supportsUpload: true,
- uploadFun: (Stream<List<int>> stream) {
- return stream.fold([], (b, d) => b..addAll(d)).then((List<int> data) {
- expect(data, equals(tarballBytes));
- });
- });
- var server = new ShelfPubServer(mock);
-
- // Start upload
- var request = new shelf.Request('GET', newUrl);
- var response = await server.requestHandler(request);
- expect(response.statusCode, equals(200));
- expect(response.headers['content-type'], equals('application/json'));
- var jsonBody = JSON.decode(await response.readAsString());
- expect(jsonBody, equals({
- 'url' : '$uploadUrl',
- 'fields' : {},
- }));
-
- // Post data via a multipart request.
- request = multipartRequest(uploadUrl, tarballBytes);
- response = await server.requestHandler(request);
- await response.read();
- expect(response.statusCode, equals(302));
- expect(response.headers['location'], equals('$finishUrl'));
-
- // Call the `finishUrl`.
- request = new shelf.Request('GET', finishUrl);
- response = await server.requestHandler(request);
- jsonBody = JSON.decode(await response.readAsString());
- expect(jsonBody, equals({
- 'success' : {
- 'message' : 'Successfully uploaded package.'
- },
- }));
- });
-
- test('sync failure', () async {
- var tarballBytes = const [1, 2, 3];
- var newUrl = getUri('/api/packages/versions/new');
- var uploadUrl = getUri('/api/packages/versions/newUpload');
- var finishUrl =
- getUri('/api/packages/versions/newUploadFinish?error=abc');
- var mock = new RepositoryMock(
- supportsUpload: true,
- uploadFun: (Stream<List<int>> stream) {
- return new Future.error('abc');
- });
- var server = new ShelfPubServer(mock);
-
- // Start upload - would happen here.
-
- // Post data via a multipart request.
- var request = multipartRequest(uploadUrl, tarballBytes);
- var response = await server.requestHandler(request);
- await response.read();
- expect(response.statusCode, equals(302));
- expect(response.headers['location'], equals('$finishUrl'));
-
- // Call the `finishUrl`.
- request = new shelf.Request('GET', finishUrl);
- response = await server.requestHandler(request);
- var jsonBody = JSON.decode(await response.readAsString());
- expect(jsonBody, equals({
- 'error' : {
- 'message' : 'abc'
- },
- }));
- });
-
- test('unsupported', () async {
- var newUrl = getUri('/api/packages/versions/new');
- var mock = new RepositoryMock();
- var server = new ShelfPubServer(mock);
- var request = new shelf.Request('GET', newUrl);
- var response = await server.requestHandler(request);
-
- expect(response.statusCode, equals(404));
- });
- });
- });
-}
« no previous file with comments | « pkg/pubserver/pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698