test_headers.c
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:4k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * test_headers.c - test wsp header packing and unpacking.
  3.  *
  4.  * Richard Braakman <dark@wapit.com>
  5.  */
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <signal.h>
  9. #include "gwlib/gwlib.h"
  10. #include "wap/wsp_headers.h"
  11. #include "wap/wsp_strings.h"
  12. /* Test the http_header_combine function. */
  13. static void test_header_combine(void)
  14. {
  15.     List *old;
  16.     List *new;
  17.     List *tmp;
  18.     old = http_create_empty_headers();
  19.     new = http_create_empty_headers();
  20.     tmp = http_create_empty_headers();
  21.     http_header_add(old, "Accept", "text/html");
  22.     http_header_add(old, "Accept", "text/plain");
  23.     http_header_add(old, "Accept-Language", "en");
  24.     http_header_add(old, "Accept", "image/jpeg");
  25.     http_header_combine(tmp, old);
  26.     if (list_len(tmp) != 4) {
  27.         error(0, "http_combine_header with an empty 'old' did not just append.");
  28.     }
  29.     http_header_combine(old, new);
  30.     if (list_len(old) != 4) {
  31.         error(0, "http_combine_header with an empty 'new' changed 'old'.");
  32.     }
  33.     http_header_add(new, "Accept", "text/html");
  34.     http_header_add(new, "Accept", "text/plain");
  35.     
  36.     http_header_combine(old, new);
  37.     if (list_len(old) != 3 ||
  38.         octstr_compare(list_get(old, 0),
  39.                        octstr_imm("Accept-Language: en")) != 0 ||
  40.         octstr_compare(list_get(old, 1),
  41.                        octstr_imm("Accept: text/html")) != 0 ||
  42.         octstr_compare(list_get(old, 2),
  43.                        octstr_imm("Accept: text/plain")) != 0) {
  44.         error(0, "http_header_combine failed.");
  45.     }
  46.     http_destroy_headers(old);
  47.     http_destroy_headers(new);
  48.     http_destroy_headers(tmp);
  49. }
  50.  
  51. static void split_headers(Octstr *headers, List **split, List **expected)
  52. {
  53.     long start;
  54.     long pos;
  55.     *split = list_create();
  56.     *expected = list_create();
  57.     start = 0;
  58.     for (pos = 0; pos < octstr_len(headers); pos++) {
  59.         if (octstr_get_char(headers, pos) == 'n') {
  60.             int c;
  61.             Octstr *line;
  62.             if (pos == start) {
  63.                 /* Skip empty lines */
  64.                 start = pos + 1;
  65.                 continue;
  66.             }
  67.             line = octstr_copy(headers, start, pos - start);
  68.             start = pos + 1;
  69.             c = octstr_get_char(line, 0);
  70.             octstr_delete(line, 0, 2);
  71.             if (c == '|') {
  72.                 list_append(*split, line);
  73.                 list_append(*expected, octstr_duplicate(line));
  74.             } else if (c == '<') {
  75.                 list_append(*split, line);
  76.             } else if (c == '>') {
  77.                 list_append(*expected, line);
  78.             } else if (c == '#') {
  79.                 /* comment */
  80.                 octstr_destroy(line);
  81.             } else {
  82.                 warning(0, "Bad line in test headers file");
  83.                 octstr_destroy(line);
  84.             }
  85.         }
  86.     }
  87. }
  88. int main(int argc, char **argv)
  89. {
  90.     Octstr *headers;
  91.     List *expected;
  92.     List *split;
  93.     Octstr *packed;
  94.     List *unpacked;
  95.     long i;
  96.     gwlib_init();
  97.     wsp_strings_init();
  98.     get_and_set_debugs(argc, argv, NULL);
  99.     headers = octstr_read_file("test/header_test");
  100.     split_headers(headers, &split, &expected);
  101.     packed = wsp_headers_pack(split, 0);
  102.     unpacked = wsp_headers_unpack(packed, 0);
  103.     if (list_len(unpacked) != list_len(expected)) {
  104.         error(0, "Expected %ld headers, generated %ld.n",
  105.               list_len(expected), list_len(unpacked));
  106.     } else {
  107.         for (i = 0; i < list_len(unpacked); i++) {
  108.             Octstr *got, *exp;
  109.             got = list_get(unpacked, i);
  110.             exp = list_get(expected, i);
  111.             if (octstr_compare(got, exp) != 0) {
  112.                 error(0, "Exp: %s", octstr_get_cstr(exp));
  113.                 error(0, "Got: %s", octstr_get_cstr(got));
  114.             }
  115.         }
  116.     }
  117.     test_header_combine();
  118.     octstr_destroy(headers);
  119.     list_destroy(split, octstr_destroy_item);
  120.     list_destroy(expected, octstr_destroy_item);
  121.     octstr_destroy(packed);
  122.     list_destroy(unpacked, octstr_destroy_item);
  123.     wsp_strings_shutdown();
  124.     gwlib_shutdown();
  125.     return 0;
  126. }