1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2010 Index Data
3 * See the file LICENSE for details.
10 #include <yaz/comstack.h>
12 static void tst_http_request(void)
15 /* no content, no headers */
16 const char *http_buf =
17 /*123456789012345678 */
22 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
23 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
24 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 16), 0);
25 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 17), 0);
26 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 18), 18);
27 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 19), 18);
30 /* one header, no content */
31 const char *http_buf =
32 /*123456789012345678 */
38 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
39 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
40 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 34), 0);
41 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 35), 35);
42 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 36), 35);
45 /* one content-length header, length 0 */
46 const char *http_buf =
47 /*123456789012345678 */
49 "Content-Length: 0\r\n"
53 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
54 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
55 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 35), 0);
56 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 37), 37);
57 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 38), 37);
60 /* one content-length header, length 5 */
61 const char *http_buf =
62 /*123456789012345678 */
64 "Content-Length: 5\r\n"
69 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
70 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
71 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 0);
72 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 42), 42);
73 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 43), 42);
76 /* LF only in GET, one content-length header, length 5 */
77 const char *http_buf =
78 /*123456789012345678 */
80 "Content-Length: 5\r\n"
85 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
86 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
87 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 0);
88 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 41);
89 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 42), 41);
92 /* LF only in all places, one content-length header, length 5 */
93 const char *http_buf =
94 /*123456789012345678 */
101 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
102 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
103 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 38), 0);
104 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 39), 39);
105 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 39);
109 /* one header, unknown transfer-encoding (no content) */
110 const char *http_buf =
111 /*12345678901234567890123456789 */
113 "Transfer-Encoding: chunke_\r\n"
115 "GET / HTTP/1.0\r\n";
117 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 45), 0);
118 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 46), 46);
122 /* one header, one chunk */
123 const char *http_buf =
124 /*12345678901234567890123456789 */
126 "Transfer-Encoding: chunked\r\n"
131 "GET / HTTP/1.0\r\n";
133 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 58), 0);
134 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 59), 59);
138 /* one header, two chunks */
139 const char *http_buf =
140 /*12345678901234567890123456789 */
142 "Transfer-Encoding: chunked\r\n"
149 "GET / HTTP/1.0\r\n";
151 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 64), 0);
152 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 65), 65);
156 static void tst_http_response(void)
159 /* unlimited content, no headers */
160 const char *http_buf =
161 /*123456789012345678 */
162 "HTTP/1.1 200 OK\r\n"
164 "HTTP/1.1 200 OK\r\n";
166 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
167 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
168 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 24), 0);
171 /* response, content */
172 const char *http_buf =
173 /*123456789012345678 */
174 "HTTP/1.1 200 OK\r\n"
175 "Content-Length: 2\r\n"
178 "HTTP/1.1 200 OK\r\n";
180 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
181 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
182 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 39), 0);
183 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 40);
184 YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 40);
189 int main (int argc, char **argv)
191 YAZ_CHECK_INIT(argc, argv);
201 * c-file-style: "Stroustrup"
202 * indent-tabs-mode: nil
204 * vim: shiftwidth=4 tabstop=8 expandtab