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

Side by Side Diff: pkg/http_server/test/virtual_directory_test.dart

Issue 17582002: Add support for IfModifiedSince headers, in http_servers' VirtualDirectory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 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
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 import 'dart:io'; 5 import 'dart:io';
6 6
7 import "package:unittest/unittest.dart"; 7 import "package:unittest/unittest.dart";
8 import "package:http_server/http_server.dart"; 8 import "package:http_server/http_server.dart";
9 9
10 10
11 Future<int> getStatusCode(int port, String path) {
12 return new HttpClient().get('localhost', port, path)
13 .then((request) => request.close())
14 .then((response) => response.drain().then(
15 (_) => response.statusCode));
16 }
17
18 Future<HttpHeaders> getHeaders(int port, String path) {
19 return new HttpClient().get('localhost', port, path)
20 .then((request) => request.close())
21 .then((response) => response.drain().then(
22 (_) => response.headers));
23 }
24
25
11 void main() { 26 void main() {
12 group('serve-root', () { 27 group('serve-root', () {
13 test('dir-exists', () { 28 test('dir-exists', () {
14 expect(HttpServer.bind('localhost', 0).then((server) { 29 expect(HttpServer.bind('localhost', 0).then((server) {
15 var dir = new Directory('').createTempSync(); 30 var dir = new Directory('').createTempSync();
16 var virDir = new VirtualDirectory(dir.path); 31 var virDir = new VirtualDirectory(dir.path);
17 32
18 virDir.serve(server); 33 virDir.serve(server);
19 34
20 return new HttpClient().get('localhost', server.port, '/') 35 return getStatusCode(server.port, '/')
21 .then((request) => request.close())
22 .then((response) => response.drain().then(
23 (_) => response.statusCode))
24 .whenComplete(() { 36 .whenComplete(() {
25 server.close(); 37 server.close();
26 dir.deleteSync(); 38 dir.deleteSync();
27 }); 39 });
28 }), completion(equals(HttpStatus.NOT_FOUND))); 40 }), completion(equals(HttpStatus.NOT_FOUND)));
29 }); 41 });
30 42
31 test('dir-not-exists', () { 43 test('dir-not-exists', () {
32 expect(HttpServer.bind('localhost', 0).then((server) { 44 expect(HttpServer.bind('localhost', 0).then((server) {
33 var dir = new Directory('').createTempSync(); 45 var dir = new Directory('').createTempSync();
34 dir.deleteSync(); 46 dir.deleteSync();
35 var virDir = new VirtualDirectory(dir.path); 47 var virDir = new VirtualDirectory(dir.path);
36 48
37 virDir.serve(server); 49 virDir.serve(server);
38 50
39 return new HttpClient().get('localhost', server.port, '/') 51 return getStatusCode(server.port, '/')
40 .then((request) => request.close())
41 .then((response) => response.drain().then(
42 (_) => response.statusCode))
43 .whenComplete(() { 52 .whenComplete(() {
44 server.close(); 53 server.close();
45 }); 54 });
46 }), completion(equals(HttpStatus.NOT_FOUND))); 55 }), completion(equals(HttpStatus.NOT_FOUND)));
47 }); 56 });
48 }); 57 });
49 58
50 group('serve-file', () { 59 group('serve-file', () {
51 group('top-level', () { 60 group('top-level', () {
52 test('file-exists', () { 61 test('file-exists', () {
53 expect(HttpServer.bind('localhost', 0).then((server) { 62 expect(HttpServer.bind('localhost', 0).then((server) {
54 var dir = new Directory('').createTempSync(); 63 var dir = new Directory('').createTempSync();
55 var file = new File('${dir.path}/file')..createSync(); 64 var file = new File('${dir.path}/file')..createSync();
56 var virDir = new VirtualDirectory(dir.path); 65 var virDir = new VirtualDirectory(dir.path);
57 66
58 virDir.serve(server); 67 virDir.serve(server);
59 68
60 return new HttpClient().get('localhost', server.port, '/file') 69 return getStatusCode(server.port, '/file')
61 .then((request) => request.close())
62 .then((response) => response.drain().then(
63 (_) => response.statusCode))
64 .whenComplete(() { 70 .whenComplete(() {
65 server.close(); 71 server.close();
66 file.deleteSync(); 72 file.deleteSync();
67 dir.deleteSync(); 73 dir.deleteSync();
68 }); 74 });
69 }), completion(equals(HttpStatus.OK))); 75 }), completion(equals(HttpStatus.OK)));
70 }); 76 });
71 77
72 test('file-not-exists', () { 78 test('file-not-exists', () {
73 expect(HttpServer.bind('localhost', 0).then((server) { 79 expect(HttpServer.bind('localhost', 0).then((server) {
74 var dir = new Directory('').createTempSync(); 80 var dir = new Directory('').createTempSync();
75 var virDir = new VirtualDirectory(dir.path); 81 var virDir = new VirtualDirectory(dir.path);
76 82
77 virDir.serve(server); 83 virDir.serve(server);
78 84
79 return new HttpClient().get('localhost', server.port, '/file') 85 return getStatusCode(server.port, '/file')
80 .then((request) => request.close())
81 .then((response) => response.drain().then(
82 (_) => response.statusCode))
83 .whenComplete(() { 86 .whenComplete(() {
84 server.close(); 87 server.close();
85 dir.deleteSync(); 88 dir.deleteSync();
86 }); 89 });
87 }), completion(equals(HttpStatus.NOT_FOUND))); 90 }), completion(equals(HttpStatus.NOT_FOUND)));
88 }); 91 });
89 }); 92 });
90 93
91 group('in-dir', () { 94 group('in-dir', () {
92 test('file-exists', () { 95 test('file-exists', () {
93 expect(HttpServer.bind('localhost', 0).then((server) { 96 expect(HttpServer.bind('localhost', 0).then((server) {
94 var dir = new Directory('').createTempSync(); 97 var dir = new Directory('').createTempSync();
95 var dir2 = new Directory('${dir.path}/dir')..createSync(); 98 var dir2 = new Directory('${dir.path}/dir')..createSync();
96 var file = new File('${dir2.path}/file')..createSync(); 99 var file = new File('${dir2.path}/file')..createSync();
97 var virDir = new VirtualDirectory(dir.path); 100 var virDir = new VirtualDirectory(dir.path);
98 101
99 virDir.serve(server); 102 virDir.serve(server);
100 103
101 return new HttpClient().get('localhost', server.port, '/dir/file') 104 return getStatusCode(server.port, '/dir/file')
102 .then((request) => request.close())
103 .then((response) => response.drain().then(
104 (_) => response.statusCode))
105 .whenComplete(() { 105 .whenComplete(() {
106 server.close(); 106 server.close();
107 file.deleteSync(); 107 file.deleteSync();
108 dir2.deleteSync(); 108 dir2.deleteSync();
109 dir.deleteSync(); 109 dir.deleteSync();
110 }); 110 });
111 }), completion(equals(HttpStatus.OK))); 111 }), completion(equals(HttpStatus.OK)));
112 }); 112 });
113 113
114 test('file-not-exists', () { 114 test('file-not-exists', () {
115 expect(HttpServer.bind('localhost', 0).then((server) { 115 expect(HttpServer.bind('localhost', 0).then((server) {
116 var dir = new Directory('').createTempSync(); 116 var dir = new Directory('').createTempSync();
117 var dir2 = new Directory('${dir.path}/dir')..createSync(); 117 var dir2 = new Directory('${dir.path}/dir')..createSync();
118 var file = new File('${dir.path}/file')..createSync(); 118 var file = new File('${dir.path}/file')..createSync();
119 var virDir = new VirtualDirectory(dir.path); 119 var virDir = new VirtualDirectory(dir.path);
120 120
121 virDir.serve(server); 121 virDir.serve(server);
122 122
123 return new HttpClient().get('localhost', server.port, '/dir/file') 123 return getStatusCode(server.port, '/dir/file')
124 .then((request) => request.close())
125 .then((response) => response.drain().then(
126 (_) => response.statusCode))
127 .whenComplete(() { 124 .whenComplete(() {
128 server.close(); 125 server.close();
129 file.deleteSync(); 126 file.deleteSync();
130 dir2.deleteSync(); 127 dir2.deleteSync();
131 dir.deleteSync(); 128 dir.deleteSync();
132 }); 129 });
133 }), completion(equals(HttpStatus.NOT_FOUND))); 130 }), completion(equals(HttpStatus.NOT_FOUND)));
134 }); 131 });
135 }); 132 });
136 }); 133 });
134
135 group('last-mofidied', () {
136 group('file', () {
137 test('file-exists', () {
138 expect(HttpServer.bind('localhost', 0).then((server) {
139 var dir = new Directory('').createTempSync();
140 var file = new File('${dir.path}/file')..createSync();
141 var virDir = new VirtualDirectory(dir.path);
142
143 virDir.serve(server);
144
145 return getHeaders(server.port, '/file')
146 .then((headers) {
147 expect(headers.value(HttpHeaders.LAST_MODIFIED), isNotNull);
148 return HttpDate.parse(
149 headers.value(HttpHeaders.LAST_MODIFIED));
150 })
151 .then((lastModified) {
152 return new HttpClient().get('localhost', server.port, '/file')
153 .then((request) {
154 request.headers.ifModifiedSince = lastModified;
155 return request.close();
156 })
157 .then((response) => response.drain().then(
158 (_) => response.statusCode));
159 })
160 .whenComplete(() {
161 server.close();
162 dir.deleteSync(recursive: true);
163 });
164 }), completion(equals(HttpStatus.NOT_MODIFIED)));
165 });
166
167 test('file-changes', () {
168 expect(HttpServer.bind('localhost', 0).then((server) {
169 var dir = new Directory('').createTempSync();
170 var file = new File('${dir.path}/file')..createSync();
171 var virDir = new VirtualDirectory(dir.path);
172
173 virDir.serve(server);
174
175 return getHeaders(server.port, '/file')
176 .then((headers) {
177 expect(headers.value(HttpHeaders.LAST_MODIFIED), isNotNull);
178 return HttpDate.parse(
179 headers.value(HttpHeaders.LAST_MODIFIED));
180 })
181 .then((lastModified) {
182 // Fake file changed by moving date back in time.
183 lastModified = lastModified.subtract(
184 const Duration(seconds: 10));
185 return new HttpClient().get('localhost', server.port, '/file')
186 .then((request) {
187 request.headers.ifModifiedSince = lastModified;
188 return request.close();
189 })
190 .then((response) => response.drain().then(
191 (_) => response.statusCode));
192 })
193 .whenComplete(() {
194 server.close();
195 dir.deleteSync(recursive: true);
196 });
197 }), completion(equals(HttpStatus.OK)));
198 });
199 });
200 });
137 } 201 }
138 202
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698