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

Side by Side Diff: sdk/lib/_internal/pub/test/pub_uploader_test.dart

Issue 216373004: Use shelf handlers in ScheduledServer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/_internal/pub/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library pub_uploader_test; 5 library pub_uploader_test;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:scheduled_test/scheduled_process.dart'; 10 import 'package:scheduled_test/scheduled_process.dart';
11 import 'package:scheduled_test/scheduled_server.dart'; 11 import 'package:scheduled_test/scheduled_server.dart';
12 import 'package:scheduled_test/scheduled_test.dart'; 12 import 'package:scheduled_test/scheduled_test.dart';
13 import 'package:shelf/shelf.dart' as shelf;
13 14
14 import '../lib/src/exit_codes.dart' as exit_codes; 15 import '../lib/src/exit_codes.dart' as exit_codes;
15 import '../lib/src/io.dart'; 16 import '../lib/src/io.dart';
16 import '../lib/src/utils.dart'; 17 import '../lib/src/utils.dart';
17 import 'descriptor.dart' as d; 18 import 'descriptor.dart' as d;
18 import 'test_pub.dart'; 19 import 'test_pub.dart';
19 20
20 final USAGE_STRING = ''' 21 final USAGE_STRING = '''
21 Manage uploaders for a package on pub.dartlang.org. 22 Manage uploaders for a package on pub.dartlang.org.
22 23
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 output: USAGE_STRING, exitCode: exit_codes.USAGE); 55 output: USAGE_STRING, exitCode: exit_codes.USAGE);
55 }); 56 });
56 }); 57 });
57 58
58 integration('adds an uploader', () { 59 integration('adds an uploader', () {
59 var server = new ScheduledServer(); 60 var server = new ScheduledServer();
60 d.credentialsFile(server, 'access token').create(); 61 d.credentialsFile(server, 'access token').create();
61 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); 62 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
62 63
63 server.handle('POST', '/api/packages/pkg/uploaders', (request) { 64 server.handle('POST', '/api/packages/pkg/uploaders', (request) {
64 expect(new ByteStream(request).toBytes().then((bodyBytes) { 65 return request.readAsString().then((body) {
65 expect(new String.fromCharCodes(bodyBytes), equals('email=email')); 66 expect(body, equals('email=email'));
66 67
67 request.response.headers.contentType = 68 return new shelf.Response.ok(JSON.encode({
68 new ContentType("application", "json");
69 request.response.write(JSON.encode({
70 'success': {'message': 'Good job!'} 69 'success': {'message': 'Good job!'}
71 })); 70 }), headers: {'content-type': 'application/json'});
72 request.response.close(); 71 });
73 }), completes);
74 }); 72 });
75 73
76 pub.stdout.expect('Good job!'); 74 pub.stdout.expect('Good job!');
77 pub.shouldExit(exit_codes.SUCCESS); 75 pub.shouldExit(exit_codes.SUCCESS);
78 }); 76 });
79 77
80 integration('removes an uploader', () { 78 integration('removes an uploader', () {
81 var server = new ScheduledServer(); 79 var server = new ScheduledServer();
82 d.credentialsFile(server, 'access token').create(); 80 d.credentialsFile(server, 'access token').create();
83 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); 81 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
84 82
85 server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) { 83 server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) {
86 request.response.headers.contentType = 84 return new shelf.Response.ok(JSON.encode({
87 new ContentType("application", "json");
88 request.response.write(JSON.encode({
89 'success': {'message': 'Good job!'} 85 'success': {'message': 'Good job!'}
90 })); 86 }), headers: {'content-type': 'application/json'});
91 request.response.close();
92 }); 87 });
93 88
94 pub.stdout.expect('Good job!'); 89 pub.stdout.expect('Good job!');
95 pub.shouldExit(exit_codes.SUCCESS); 90 pub.shouldExit(exit_codes.SUCCESS);
96 }); 91 });
97 92
98 integration('defaults to the current package', () { 93 integration('defaults to the current package', () {
99 d.validPackage.create(); 94 d.validPackage.create();
100 95
101 var server = new ScheduledServer(); 96 var server = new ScheduledServer();
102 d.credentialsFile(server, 'access token').create(); 97 d.credentialsFile(server, 'access token').create();
103 var pub = startPubUploader(server, ['add', 'email']); 98 var pub = startPubUploader(server, ['add', 'email']);
104 99
105 server.handle('POST', '/api/packages/test_pkg/uploaders', (request) { 100 server.handle('POST', '/api/packages/test_pkg/uploaders', (request) {
106 request.response.headers.contentType = 101 return new shelf.Response.ok(JSON.encode({
107 new ContentType("application", "json");
108 request.response.write(JSON.encode({
109 'success': {'message': 'Good job!'} 102 'success': {'message': 'Good job!'}
110 })); 103 }), headers: {'content-type': 'application/json'});
111 request.response.close(); 104 request.response.close();
112 }); 105 });
113 106
114 pub.stdout.expect('Good job!'); 107 pub.stdout.expect('Good job!');
115 pub.shouldExit(exit_codes.SUCCESS); 108 pub.shouldExit(exit_codes.SUCCESS);
116 }); 109 });
117 110
118 integration('add provides an error', () { 111 integration('add provides an error', () {
119 var server = new ScheduledServer(); 112 var server = new ScheduledServer();
120 d.credentialsFile(server, 'access token').create(); 113 d.credentialsFile(server, 'access token').create();
121 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); 114 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
122 115
123 server.handle('POST', '/api/packages/pkg/uploaders', (request) { 116 server.handle('POST', '/api/packages/pkg/uploaders', (request) {
124 request.response.statusCode = 400; 117 return new shelf.Response(400,
125 request.response.headers.contentType = 118 body: JSON.encode({'error': {'message': 'Bad job!'}}),
126 new ContentType("application", "json"); 119 headers: {'content-type': 'application/json'});
127 request.response.write(JSON.encode({
128 'error': {'message': 'Bad job!'}
129 }));
130 request.response.close();
131 }); 120 });
132 121
133 pub.stderr.expect('Bad job!'); 122 pub.stderr.expect('Bad job!');
134 pub.shouldExit(1); 123 pub.shouldExit(1);
135 }); 124 });
136 125
137 integration('remove provides an error', () { 126 integration('remove provides an error', () {
138 var server = new ScheduledServer(); 127 var server = new ScheduledServer();
139 d.credentialsFile(server, 'access token').create(); 128 d.credentialsFile(server, 'access token').create();
140 var pub = startPubUploader(server, 129 var pub = startPubUploader(server,
141 ['--package', 'pkg', 'remove', 'e/mail']); 130 ['--package', 'pkg', 'remove', 'e/mail']);
142 131
143 server.handle('DELETE', '/api/packages/pkg/uploaders/e%2Fmail', (request) { 132 server.handle('DELETE', '/api/packages/pkg/uploaders/e%2Fmail', (request) {
144 request.response.statusCode = 400; 133 return new shelf.Response(400,
145 request.response.headers.contentType = 134 body: JSON.encode({'error': {'message': 'Bad job!'}}),
146 new ContentType("application", "json"); 135 headers: {'content-type': 'application/json'});
147 request.response.write(JSON.encode({
148 'error': {'message': 'Bad job!'}
149 }));
150 request.response.close();
151 }); 136 });
152 137
153 pub.stderr.expect('Bad job!'); 138 pub.stderr.expect('Bad job!');
154 pub.shouldExit(1); 139 pub.shouldExit(1);
155 }); 140 });
156 141
157 integration('add provides invalid JSON', () { 142 integration('add provides invalid JSON', () {
158 var server = new ScheduledServer(); 143 var server = new ScheduledServer();
159 d.credentialsFile(server, 'access token').create(); 144 d.credentialsFile(server, 'access token').create();
160 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); 145 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
161 146
162 server.handle('POST', '/api/packages/pkg/uploaders', (request) { 147 server.handle('POST', '/api/packages/pkg/uploaders',
163 request.response.write("{not json"); 148 (request) => new shelf.Response.ok("{not json"));
164 request.response.close();
165 });
166 149
167 pub.stderr.expect(emitsLines( 150 pub.stderr.expect(emitsLines(
168 'Invalid server response:\n' 151 'Invalid server response:\n'
169 '{not json')); 152 '{not json'));
170 pub.shouldExit(1); 153 pub.shouldExit(1);
171 }); 154 });
172 155
173 integration('remove provides invalid JSON', () { 156 integration('remove provides invalid JSON', () {
174 var server = new ScheduledServer(); 157 var server = new ScheduledServer();
175 d.credentialsFile(server, 'access token').create(); 158 d.credentialsFile(server, 'access token').create();
176 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); 159 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
177 160
178 server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) { 161 server.handle('DELETE', '/api/packages/pkg/uploaders/email',
179 request.response.write("{not json"); 162 (request) => new shelf.Response.ok("{not json"));
180 request.response.close();
181 });
182 163
183 pub.stderr.expect(emitsLines( 164 pub.stderr.expect(emitsLines(
184 'Invalid server response:\n' 165 'Invalid server response:\n'
185 '{not json')); 166 '{not json'));
186 pub.shouldExit(1); 167 pub.shouldExit(1);
187 }); 168 });
188 } 169 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/pub/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698