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

Side by Side Diff: pkg/appengine/test/assets_test.dart

Issue 804973002: Add appengine/gcloud/mustache dependencies. (Closed) Base URL: git@github.com:dart-lang/pub-dartlang-dart.git@master
Patch Set: Added AUTHORS/LICENSE/PATENTS files Created 6 years 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
OLDNEW
(Empty)
1 import 'dart:async';
2 import 'dart:convert';
3 import 'dart:io';
4
5 import 'package:appengine/src/appengine_context.dart';
6 import 'package:appengine/src/client_context.dart';
7 import 'package:appengine/src/server/assets.dart';
8 import 'package:unittest/unittest.dart';
9
10
11 class _AssetError extends TypeMatcher {
12 const _AssetError() : super("AssetError");
13 bool matches(item, Map matchState) => item is AssetError;
14 }
15
16 const isAssetError = const _AssetError();
17
18 // HTTP client which requests /test and completes with the binary
19 // body.
20 Future<List<int>> getAsset(int port, String path,
21 [int expectedStatusCode = 200]) {
22 var client;
23 client = new HttpClient();
24 return client.get('127.0.0.1', port, path)
25 .then((request) {
26 return request.close();
27 })
28 .then((response) {
29 expect(response.statusCode, expectedStatusCode);
30 return response
31 .fold([], (buf, data) => buf..addAll(data));
32 })
33 .whenComplete(() {
34 client.close();
35 });
36 }
37
38 void main() {
39 if (!FileSystemEntity.isDirectorySync(AssetsManager.root)) {
40 throw new StateError('The directory "${AssetsManager.root}" does not '
41 'exist in the current directory – "${Directory.current.path}". '
42 'Try running from the "test" directory.');
43 }
44
45 test('use pub serve', () {
46 var uri = Uri.parse("http://localhost:9090");
47 var context;
48
49 context = new AppengineContext(
50 'dev', null, null, null, null, uri);
51 expect(context.isDevelopmentEnvironment, isTrue);
52 expect(context.assets.usePubServe, isTrue);
53
54 context = new AppengineContext(
55 's', null, null, null, null, uri);
56 expect(context.isDevelopmentEnvironment, isFalse);
57 expect(context.assets.usePubServe, isFalse);
58
59 context = new AppengineContext(
60 'dev', null, null, null, null, null);
61 expect(context.isDevelopmentEnvironment, isTrue);
62 expect(context.assets.usePubServe, isFalse);
63
64 context = new AppengineContext(
65 's', null, null, null, null, null);
66 expect(context.isDevelopmentEnvironment, isFalse);
67 expect(context.assets.usePubServe, isFalse);
68 });
69
70 group('pub serve proxy', () {
71 var pubServe;
72 var appServer;
73 var appServerPort;
74 var pubServeUri;
75
76 // 'pub serve' mock which expects /test request and returns a
77 // fixed body.
78 Future startPubServeMock() {
79 return HttpServer.bind('127.0.0.1', 0).then((server) {
80 server.listen(expectAsync((request) {
81 if (request.uri.path == '/test') {
82 request.response.statusCode = HttpStatus.NOT_FOUND;
83 } else if (request.uri.path == '/test.html') {
84 request.response.write('pub serve html');
85 } else {
86 expect(request.uri.path, '/test.css');
87 request.response.write('pub serve css');
88 }
89 request.response.close();
90 }));
91 return server;
92 });
93 }
94
95 // Mock application server which passes the Assets instance to the
96 // request handler.
97 Future startAppServer(mockRequestHandler) {
98 assert(appServer == null);
99 return HttpServer.bind('127.0.0.1', 0).then((server) {
100 var appengineContext = new AppengineContext(
101 'dev', null, null, null, null, pubServeUri);
102 appServer = server;
103 appServerPort = server.port;
104 server.listen((request) {
105 var assets = new AssetsImpl(request, appengineContext);
106 mockRequestHandler(request, assets);
107 });
108 return server;
109 });
110 }
111
112 setUp(() {
113 return startPubServeMock().then((server) {
114 pubServe = server;
115 pubServeUri =
116 new Uri.http('${server.address.address}:${server.port}', '');
117 });
118 });
119
120 tearDown(() {
121 return pubServe.close().then((_) {
122 pubServe = null;
123 return appServer.close().then((_) {
124 appServer = null;
125 });
126 });
127 });
128
129 test('test not found serve', () {
130 void requestHandler(HttpRequest request, Assets assets) {
131 assets.serve();
132 }
133
134 return startAppServer(requestHandler).then((_) {
135 return getAsset(
136 appServerPort, '/test', HttpStatus.NOT_FOUND).then((body) {
137 expect(body, isEmpty);
138 });
139 });
140 });
141
142 test('test not found read', () {
143 void requestHandler(HttpRequest request, Assets assets) {
144 assets.read('/test').then((stream) {
145 fail('Unexpected');
146 }).catchError((e) {
147 expect(e, isAssetError);
148 request.response
149 ..statusCode = HttpStatus.NOT_FOUND
150 ..close();
151 });
152 }
153
154 return startAppServer(requestHandler).then((_) {
155 return getAsset(
156 appServerPort, '/test', HttpStatus.NOT_FOUND).then((body) {
157 expect(body, isEmpty);
158 });
159 });
160 });
161
162 test('test serve', () {
163 void requestHandler(HttpRequest request, Assets assets) {
164 assets.serve();
165 }
166
167 return startAppServer(requestHandler).then((_) {
168 return getAsset(appServerPort, '/test.html').then((body) {
169 expect(LATIN1.decode(body), 'pub serve html');
170 });
171 });
172 });
173
174 test('test serve path', () {
175 void requestHandler(HttpRequest request, Assets assets) {
176 assets.serve('/test.css');
177 }
178
179 return startAppServer(requestHandler).then((_) {
180 return getAsset(appServerPort, '/test.css').then((body) {
181 expect(LATIN1.decode(body), 'pub serve css');
182 });
183 });
184 });
185
186 test('test read', () {
187 void requestHandler(HttpRequest request, Assets assets) {
188 assets.read('/test.html').then((stream) {
189 return stream.pipe(request.response);
190 });
191 }
192
193 return startAppServer(requestHandler).then((_) {
194 return getAsset(appServerPort, '/test.html').then((body) {
195 expect(LATIN1.decode(body), 'pub serve html');
196 });
197 });
198 });
199 });
200
201 group('no pub serve proxy', () {
202 var appServer;
203 var appServerPort;
204
205 // Mock application server which passes the Assets instance to the
206 // request handler.
207 Future startAppServer(mockRequestHandler) {
208 assert(appServer == null);
209 return HttpServer.bind('127.0.0.1', 0).then((server) {
210 var appengineContext = new AppengineContext(
211 null, null, null, null, null, null);
212 appServer = server;
213 appServerPort = server.port;
214 server.listen((request) {
215 var assets = new AssetsImpl(request, appengineContext);
216 mockRequestHandler(request, assets);
217 });
218 return server;
219 });
220 }
221
222 tearDown(() {
223 return appServer.close().then((_) {
224 appServer = null;
225 });
226 });
227
228 test('test not found serve', () {
229 void requestHandler(HttpRequest request, Assets assets) {
230 assets.serve();
231 }
232
233 return startAppServer(requestHandler).then((_) {
234 return getAsset(
235 appServerPort, '/test', HttpStatus.NOT_FOUND).then((body) {
236 expect(body, isEmpty);
237 });
238 });
239 });
240
241 test('test not found read', () {
242 void requestHandler(HttpRequest request, Assets assets) {
243 assets.read('/test').then((stream) {
244 fail('Unexpected');
245 }).catchError((e) {
246 expect(e, isAssetError);
247 request.response
248 ..statusCode = HttpStatus.NOT_FOUND
249 ..close();
250 });
251 }
252
253 return startAppServer(requestHandler).then((_) {
254 return getAsset(
255 appServerPort, '/test', HttpStatus.NOT_FOUND).then((body) {
256 expect(body, isEmpty);
257 });
258 });
259 });
260
261 test('test serve', () {
262 void requestHandler(HttpRequest request, Assets assets) {
263 assets.serve();
264 }
265
266 return startAppServer(requestHandler).then((_) {
267 return getAsset(appServerPort, '/test.html').then((body) {
268 expect(LATIN1.decode(body), 'from build html');
269 });
270 });
271 });
272
273 test('test serve path', () {
274 void requestHandler(HttpRequest request, Assets assets) {
275 assets.serve('/test.css');
276 }
277
278 return startAppServer(requestHandler).then((_) {
279 return getAsset(appServerPort, '/test.html').then((body) {
280 expect(LATIN1.decode(body), 'from build css');
281 });
282 });
283 });
284
285 test('test read', () {
286 void requestHandler(HttpRequest request, Assets assets) {
287 assets.read('/test.html').then((stream) {
288 return stream.pipe(request.response);
289 });
290 }
291
292 return startAppServer(requestHandler).then((_) {
293 return getAsset(appServerPort, '/test.html').then((body) {
294 expect(LATIN1.decode(body), 'from build html');
295 });
296 });
297 });
298 });
299 }
OLDNEW
« no previous file with comments | « pkg/appengine/pubspec.yaml ('k') | pkg/appengine/test/dart-python--datastore-compatibility/dart/app.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698