@@ -21,9 +21,10 @@ import (
21
21
)
22
22
23
23
type respTest struct {
24
- Raw string
25
- Resp Response
26
- Body string
24
+ Raw string
25
+ RawOut string
26
+ Resp Response
27
+ Body string
27
28
}
28
29
29
30
func dummyReq (method string ) * Request {
@@ -42,6 +43,11 @@ var respTests = []respTest{
42
43
"\r \n " +
43
44
"Body here\n " ,
44
45
46
+ "HTTP/1.0 200 OK\r \n " +
47
+ "Connection: close\r \n " +
48
+ "\r \n " +
49
+ "Body here\n " ,
50
+
45
51
Response {
46
52
Status : "200 OK" ,
47
53
StatusCode : 200 ,
@@ -66,6 +72,11 @@ var respTests = []respTest{
66
72
"\r \n " +
67
73
"Body here\n " ,
68
74
75
+ "HTTP/1.1 200 OK\r \n " +
76
+ "Connection: close\r \n " +
77
+ "\r \n " +
78
+ "Body here\n " ,
79
+
69
80
Response {
70
81
Status : "200 OK" ,
71
82
StatusCode : 200 ,
@@ -87,6 +98,9 @@ var respTests = []respTest{
87
98
"\r \n " +
88
99
"Body should not be read!\n " ,
89
100
101
+ "HTTP/1.1 204 No Content\r \n " +
102
+ "\r \n " ,
103
+
90
104
Response {
91
105
Status : "204 No Content" ,
92
106
StatusCode : 204 ,
@@ -110,6 +124,12 @@ var respTests = []respTest{
110
124
"\r \n " +
111
125
"Body here\n " ,
112
126
127
+ "HTTP/1.0 200 OK\r \n " +
128
+ "Content-Length: 10\r \n " +
129
+ "Connection: close\r \n " +
130
+ "\r \n " +
131
+ "Body here\n " ,
132
+
113
133
Response {
114
134
Status : "200 OK" ,
115
135
StatusCode : 200 ,
@@ -140,6 +160,14 @@ var respTests = []respTest{
140
160
"0\r \n " +
141
161
"\r \n " ,
142
162
163
+ "HTTP/1.1 200 OK\r \n " +
164
+ "Transfer-Encoding: chunked\r \n " +
165
+ "\r \n " +
166
+ "13\r \n " +
167
+ "Body here\n continued\r \n " +
168
+ "0\r \n " +
169
+ "\r \n " ,
170
+
143
171
Response {
144
172
Status : "200 OK" ,
145
173
StatusCode : 200 ,
@@ -165,6 +193,12 @@ var respTests = []respTest{
165
193
"\r \n " +
166
194
"Body here\n " ,
167
195
196
+ "HTTP/1.0 200 OK\r \n " +
197
+ "Content-Length: 10\r \n " +
198
+ "Connection: close\r \n " +
199
+ "\r \n " +
200
+ "Body here\n " ,
201
+
168
202
Response {
169
203
Status : "200 OK" ,
170
204
StatusCode : 200 ,
@@ -195,6 +229,14 @@ var respTests = []respTest{
195
229
"0\r \n " +
196
230
"\r \n " ,
197
231
232
+ "HTTP/1.1 200 OK\r \n " +
233
+ "Transfer-Encoding: chunked\r \n " +
234
+ "\r \n " +
235
+ "a\r \n " +
236
+ "Body here\n \r \n " +
237
+ "0\r \n " +
238
+ "\r \n " ,
239
+
198
240
Response {
199
241
Status : "200 OK" ,
200
242
StatusCode : 200 ,
@@ -217,6 +259,10 @@ var respTests = []respTest{
217
259
"Transfer-Encoding: chunked\r \n " +
218
260
"\r \n " ,
219
261
262
+ "HTTP/1.1 200 OK\r \n " +
263
+ "Transfer-Encoding: chunked\r \n " +
264
+ "\r \n " ,
265
+
220
266
Response {
221
267
Status : "200 OK" ,
222
268
StatusCode : 200 ,
@@ -239,6 +285,11 @@ var respTests = []respTest{
239
285
"Content-Length: 256\r \n " +
240
286
"\r \n " ,
241
287
288
+ "HTTP/1.0 200 OK\r \n " +
289
+ "Connection: close\r \n " +
290
+ "Content-Length: 256\r \n " +
291
+ "\r \n " ,
292
+
242
293
Response {
243
294
Status : "200 OK" ,
244
295
StatusCode : 200 ,
@@ -261,6 +312,10 @@ var respTests = []respTest{
261
312
"Content-Length: 256\r \n " +
262
313
"\r \n " ,
263
314
315
+ "HTTP/1.1 200 OK\r \n " +
316
+ "Content-Length: 256\r \n " +
317
+ "\r \n " ,
318
+
264
319
Response {
265
320
Status : "200 OK" ,
266
321
StatusCode : 200 ,
@@ -282,6 +337,10 @@ var respTests = []respTest{
282
337
"HTTP/1.0 200 OK\r \n " +
283
338
"\r \n " ,
284
339
340
+ "HTTP/1.0 200 OK\r \n " +
341
+ "Connection: close\r \n " +
342
+ "\r \n " ,
343
+
285
344
Response {
286
345
Status : "200 OK" ,
287
346
StatusCode : 200 ,
@@ -304,6 +363,10 @@ var respTests = []respTest{
304
363
"Content-Length: 0\r \n " +
305
364
"\r \n " ,
306
365
366
+ "HTTP/1.1 200 OK\r \n " +
367
+ "Content-Length: 0\r \n " +
368
+ "\r \n " ,
369
+
307
370
Response {
308
371
Status : "200 OK" ,
309
372
StatusCode : 200 ,
@@ -325,6 +388,11 @@ var respTests = []respTest{
325
388
// (permitted by RFC 7230, section 3.1.2)
326
389
{
327
390
"HTTP/1.0 303 \r \n \r \n " ,
391
+
392
+ "HTTP/1.0 303 \r \n " +
393
+ "Connection: close\r \n " +
394
+ "\r \n " ,
395
+
328
396
Response {
329
397
Status : "303 " ,
330
398
StatusCode : 303 ,
@@ -344,6 +412,11 @@ var respTests = []respTest{
344
412
// (not permitted by RFC 7230, but we'll accept it anyway)
345
413
{
346
414
"HTTP/1.0 303\r \n \r \n " ,
415
+
416
+ "HTTP/1.0 303 303\r \n " +
417
+ "Connection: close\r \n " +
418
+ "\r \n " ,
419
+
347
420
Response {
348
421
Status : "303" ,
349
422
StatusCode : 303 ,
@@ -366,6 +439,13 @@ Connection: close
366
439
Content-Type: multipart/byteranges; boundary=18a75608c8f47cef
367
440
368
441
some body` ,
442
+
443
+ "HTTP/1.1 206 Partial Content\r \n " +
444
+ "Connection: close\r \n " +
445
+ "Content-Type: multipart/byteranges; boundary=18a75608c8f47cef\r \n " +
446
+ "\r \n " +
447
+ "some body" ,
448
+
369
449
Response {
370
450
Status : "206 Partial Content" ,
371
451
StatusCode : 206 ,
@@ -390,6 +470,11 @@ some body`,
390
470
"\r \n " +
391
471
"Body here\n " ,
392
472
473
+ "HTTP/1.0 200 OK\r \n " +
474
+ "Connection: close\r \n " +
475
+ "\r \n " +
476
+ "Body here\n " ,
477
+
393
478
Response {
394
479
Status : "200 OK" ,
395
480
StatusCode : 200 ,
@@ -415,6 +500,14 @@ some body`,
415
500
"Content-Length: 6\r \n \r \n " +
416
501
"foobar" ,
417
502
503
+ "HTTP/1.1 206 Partial Content\r \n " +
504
+ "Content-Length: 6\r \n " +
505
+ "Accept-Ranges: bytes\r \n " +
506
+ "Content-Range: bytes 0-5/1862\r \n " +
507
+ "Content-Type: text/plain; charset=utf-8\r \n " +
508
+ "\r \n " +
509
+ "foobar" ,
510
+
418
511
Response {
419
512
Status : "206 Partial Content" ,
420
513
StatusCode : 206 ,
@@ -441,6 +534,11 @@ some body`,
441
534
"Connection: keep-alive, close\r \n " +
442
535
"\r \n " ,
443
536
537
+ "HTTP/1.1 200 OK\r \n " +
538
+ "Connection: close\r \n " +
539
+ "Content-Length: 256\r \n " +
540
+ "\r \n " ,
541
+
444
542
Response {
445
543
Status : "200 OK" ,
446
544
StatusCode : 200 ,
@@ -467,6 +565,11 @@ some body`,
467
565
"Connection: close\r \n " +
468
566
"\r \n " ,
469
567
568
+ "HTTP/1.1 200 OK\r \n " +
569
+ "Connection: close\r \n " +
570
+ "Content-Length: 256\r \n " +
571
+ "\r \n " ,
572
+
470
573
Response {
471
574
Status : "200 OK" ,
472
575
StatusCode : 200 ,
@@ -493,6 +596,11 @@ some body`,
493
596
"\r \n " +
494
597
"Body here\n " ,
495
598
599
+ "HTTP/1.0 200 OK\r \n " +
600
+ "Connection: close\r \n " +
601
+ "\r \n " +
602
+ "Body here\n " ,
603
+
496
604
Response {
497
605
Status : "200 OK" ,
498
606
StatusCode : 200 ,
@@ -517,6 +625,12 @@ some body`,
517
625
"\r \n " +
518
626
"Body here\n " ,
519
627
628
+ "HTTP/1.0 200 OK\r \n " +
629
+ "Connection: close\r \n " +
630
+ "Content-Length: 10\r \n " +
631
+ "\r \n " +
632
+ "Body here\n " ,
633
+
520
634
Response {
521
635
Status : "200 OK" ,
522
636
StatusCode : 200 ,
@@ -541,6 +655,14 @@ some body`,
541
655
"Connection: keep-alive\r \n " +
542
656
"Keep-Alive: timeout=7200\r \n \r \n " +
543
657
"\x1f \x8b \b \x00 \x00 \x00 \x00 \x00 \x00 \x00 s\xf3 \xf7 \a \x00 \xab '\xd4 \x1a \x03 \x00 \x00 \x00 " ,
658
+
659
+ "HTTP/1.1 200 OK\r \n " +
660
+ "Content-Length: 23\r \n " +
661
+ "Connection: keep-alive\r \n " +
662
+ "Content-Encoding: gzip\r \n " +
663
+ "Keep-Alive: timeout=7200\r \n \r \n " +
664
+ "\x1f \x8b \b \x00 \x00 \x00 \x00 \x00 \x00 \x00 s\xf3 \xf7 \a \x00 \xab '\xd4 \x1a \x03 \x00 \x00 \x00 " ,
665
+
544
666
Response {
545
667
Status : "200 OK" ,
546
668
StatusCode : 200 ,
@@ -566,6 +688,14 @@ some body`,
566
688
"Content-type: text/html\r \n " +
567
689
"WWW-Authenticate: Basic realm=\" \" \r \n \r \n " +
568
690
"Your Authentication failed.\r \n " ,
691
+
692
+ "HTTP/1.0 401 Unauthorized\r \n " +
693
+ "Connection: close\r \n " +
694
+ "Content-Type: text/html\r \n " +
695
+ "Www-Authenticate: Basic realm=\" \" \r \n " +
696
+ "\r \n " +
697
+ "Your Authentication failed.\r \n " ,
698
+
569
699
Response {
570
700
Status : "401 Unauthorized" ,
571
701
StatusCode : 401 ,
@@ -619,11 +749,18 @@ func TestWriteResponse(t *testing.T) {
619
749
t .Errorf ("#%d: %v" , i , err )
620
750
continue
621
751
}
622
- err = resp .Write (io .Discard )
752
+ var buf bytes.Buffer
753
+ err = resp .Write (& buf )
623
754
if err != nil {
624
755
t .Errorf ("#%d: %v" , i , err )
625
756
continue
626
757
}
758
+ if got , want := buf .String (), tt .RawOut ; got != want {
759
+ t .Errorf ("#%d: response differs; got:\n ----\n %v\n ----\n want:\n ----\n %v\n ----\n " ,
760
+ i ,
761
+ strings .ReplaceAll (got , "\r " , "\\ r" ),
762
+ strings .ReplaceAll (want , "\r " , "\\ r" ))
763
+ }
627
764
}
628
765
}
629
766
0 commit comments