1 | #!/usr/bin/python |
---|
2 | |
---|
3 | from subprocess import Popen, PIPE |
---|
4 | |
---|
5 | |
---|
6 | # Make test.html in this directory available at this url: |
---|
7 | URL = "http://cberzan.scripts.mit.edu/static-cat.cgi/test.html" |
---|
8 | |
---|
9 | |
---|
10 | def test_all(): |
---|
11 | truth =\ |
---|
12 | r"""HTTP/1.1 200 OK |
---|
13 | Date: Sun, 12 Jun 2011 02:59:36 GMT |
---|
14 | Server: Apache |
---|
15 | Last-Modified: Sat, 11 Jun 2011 21:55:23 GMT |
---|
16 | ETag: "823818c-2c6-4a576be3968c0" |
---|
17 | Accept-Ranges: bytes |
---|
18 | Content-Length: 710 |
---|
19 | Vary: Accept-Encoding |
---|
20 | Content-Type: text/html |
---|
21 | |
---|
22 | Sunt autem quidam e nostris, qui haec subtilius velint tradere et negent satis esse, quid bonum sit aut quid malum, sensu iudicari, sed animo etiam ac ratione intellegi posse et voluptatem ipsam per se esse expetendam et dolorem ipsum per se esse fugiendum. itaque aiunt hanc quasi naturalem atque insitam in animis nostris inesse notionem, ut alterum esse appetendum, alterum aspernandum sentiamus. Alii autem, quibus ego assentior, cum a philosophis compluribus permulta dicantur, cur nec voluptas in bonis sit numeranda nec in malis dolor, non existimant oportere nimium nos causae confidere, sed et argumentandum et accurate disserendum et rationibus conquisitis de voluptate et dolore disputandum putant.""" |
---|
23 | p = Popen(["curl", URL, "-s", "-D", "-"], stdout=PIPE) |
---|
24 | result = p.communicate()[0] |
---|
25 | print "TODO finish test..." |
---|
26 | # LEFT TODO: use mimeheaders or something (http://stackoverflow.com/questions/4685217/parse-raw-http-headers) |
---|
27 | # to parse headers and make sure they're OK; compare content and make sure it matches byte-for-byte. |
---|
28 | |
---|
29 | |
---|
30 | def test_one_range(): |
---|
31 | truth =\ |
---|
32 | r"""HTTP/1.1 206 Partial Content |
---|
33 | Date: Sun, 12 Jun 2011 03:05:41 GMT |
---|
34 | Server: Apache |
---|
35 | Last-Modified: Sat, 11 Jun 2011 21:55:23 GMT |
---|
36 | ETag: "823818c-2c6-4a576be3968c0" |
---|
37 | Accept-Ranges: bytes |
---|
38 | Content-Length: 101 |
---|
39 | Vary: Accept-Encoding |
---|
40 | Content-Range: bytes 100-200/710 |
---|
41 | Content-Type: text/html |
---|
42 | |
---|
43 | aut quid malum, sensu iudicari, sed animo etiam ac ratione intellegi posse et voluptatem ipsam per se""" |
---|
44 | p = Popen(["curl", "-r", "100-200", URL, "-s", "-D", "-"], stdout=PIPE) |
---|
45 | result = p.communicate()[0] |
---|
46 | print "TODO finish test..." |
---|
47 | # LEFT TODO: see above |
---|
48 | |
---|
49 | |
---|
50 | def test_overlapping_ranges(): |
---|
51 | truth =\ |
---|
52 | r"""HTTP/1.1 206 Partial Content |
---|
53 | Date: Sun, 12 Jun 2011 03:07:02 GMT |
---|
54 | Server: Apache |
---|
55 | Last-Modified: Sat, 11 Jun 2011 21:55:23 GMT |
---|
56 | ETag: "823818c-2c6-4a576be3968c0" |
---|
57 | Accept-Ranges: bytes |
---|
58 | Content-Length: 395 |
---|
59 | Vary: Accept-Encoding |
---|
60 | Content-Type: multipart/byteranges; boundary=4a57b18cf808c49ff |
---|
61 | |
---|
62 | |
---|
63 | --4a57b18cf808c49ff |
---|
64 | Content-type: text/html |
---|
65 | Content-range: bytes 100-200/710 |
---|
66 | |
---|
67 | aut quid malum, sensu iudicari, sed animo etiam ac ratione intellegi posse et voluptatem ipsam per se |
---|
68 | --4a57b18cf808c49ff |
---|
69 | Content-type: text/html |
---|
70 | Content-range: bytes 150-250/710 |
---|
71 | |
---|
72 | ratione intellegi posse et voluptatem ipsam per se esse expetendam et dolorem ipsum per se esse fugi |
---|
73 | --4a57b18cf808c49ff-- |
---|
74 | """ |
---|
75 | p = Popen(["curl", "-r", "100-200,150-250", URL, "-s", "-D", "-"], stdout=PIPE) |
---|
76 | result = p.communicate()[0] |
---|
77 | print "TODO finish test..." |
---|
78 | # LEFT TODO: see above, with the additional complication that the separating string varies. |
---|
79 | |
---|
80 | |
---|
81 | def test_nonoverlapping_ranges(): |
---|
82 | truth =\ |
---|
83 | r"""HTTP/1.1 206 Partial Content |
---|
84 | Date: Sun, 12 Jun 2011 03:08:19 GMT |
---|
85 | Server: Apache |
---|
86 | Last-Modified: Sat, 11 Jun 2011 21:55:23 GMT |
---|
87 | ETag: "823818c-2c6-4a576be3968c0" |
---|
88 | Accept-Ranges: bytes |
---|
89 | Content-Length: 429 |
---|
90 | Vary: Accept-Encoding |
---|
91 | Content-Type: multipart/byteranges; boundary=4a57b1d5f1d8949fd |
---|
92 | |
---|
93 | |
---|
94 | --4a57b1d5f1d8949fd |
---|
95 | Content-type: text/html |
---|
96 | Content-range: bytes 50-100/710 |
---|
97 | |
---|
98 | lint tradere et negent satis esse, quid bonum sit a |
---|
99 | --4a57b1d5f1d8949fd |
---|
100 | Content-type: text/html |
---|
101 | Content-range: bytes 150-200/710 |
---|
102 | |
---|
103 | ratione intellegi posse et voluptatem ipsam per se |
---|
104 | --4a57b1d5f1d8949fd |
---|
105 | Content-type: text/html |
---|
106 | Content-range: bytes 250-300/710 |
---|
107 | |
---|
108 | iendum. itaque aiunt hanc quasi naturalem atque ins |
---|
109 | --4a57b1d5f1d8949fd-- |
---|
110 | """ |
---|
111 | p = Popen(["curl", "-r", "50-100,150-200,250-300", URL, "-s", "-D", "-"], stdout=PIPE) |
---|
112 | result = p.communicate()[0] |
---|
113 | print "TODO finish test..." |
---|
114 | # LEFT TODO: see above, with the additional complication that the separating string varies. |
---|
115 | |
---|
116 | |
---|
117 | if __name__ == "__main__": |
---|
118 | print "Unfinished tests! Read the source." |
---|
119 | test_all() |
---|
120 | test_one_range() |
---|
121 | test_overlapping_ranges() |
---|
122 | test_nonoverlapping_ranges() |
---|
123 | print "Test passed." |
---|