⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nth_test.c

📁 sip协议栈
💻 C
📖 第 1 页 / 共 2 页
字号:
  TEST_VOID(nth_request_destroy(NULL));  END();}static int nth_test_site(site_t *s, 			 nth_site_t *ns,			 nth_request_t *req, 			 http_t const *http,			 char const *path){  if (s == NULL || ns == NULL || req == NULL)    return 500;  TEST_1(nth_request_treply(req, s->s_status, s->s_phrase,			    TAG_NEXT(s->s_tags)) != -1);  TEST_VOID(nth_request_destroy(req));  return s->s_status;}static int site_check_all(site_t *s, 			  nth_site_t *ns,			  nth_request_t *req, 			  http_t const *http,			  char const *path){  msg_t *msg;  TEST_1(s); TEST_1(ns); TEST_1(req); TEST_1(http); TEST_1(path);  if (s == NULL || ns == NULL || req == NULL)    return 500;  TEST(nth_request_status(req), 0);  TEST(nth_request_method(req), http_method_get);  TEST_1(msg = nth_request_message(req));  msg_destroy(msg);  TEST_1(nth_request_treply(req, s->s_status, s->s_phrase,			    TAG_NEXT(s->s_tags)) != -1);  TEST_VOID(nth_request_destroy(req));  return s->s_status;}static int init_server(tester_t *t){  site_t *s = t->t_master;  BEGIN();  s->s_ns = nth_site_create(NULL, nth_test_site, s, 			    (url_string_t *)s->s_url, 			    NTHTAG_ROOT(t->t_root),			    TAG_END());  TEST_1(s->s_ns);  END();}static int send_request(tester_t *t, char const *req, size_t reqlen,			int close_socket,			char reply[], int rlen,			int *return_len){  static su_socket_t c = -1;  int m, r;  su_wait_t w[1];  BEGIN();  if (c == -1) {    c = socket(t->t_addr->su_family, SOCK_STREAM, 0); TEST_1(c != -1);    TEST_1(connect(c, &t->t_addr->su_sa, t->t_addrlen) != -1);    while (su_root_step(t->t_root, 1) == 0);  }  if (reqlen == (size_t)-1)    reqlen = strlen(req);  TEST(send(c, req, reqlen, 0), reqlen);  if (close_socket == 1)    shutdown(c, 1);  TEST(su_wait_create(w, c, SU_WAIT_IN), 0);  while (su_root_step(t->t_root, 1) == 0 || su_wait(w, 1, 0) < 0);  for (r = 0;;) {    TEST_1((m = recv(c, reply, rlen - r - 1, 0)) != -1);    r += m;    if (m == 0 || r == rlen - 1)      break;  }  reply[r] = '\0';  if (close_socket != -1)    su_close(c), c = -1;  *return_len = r;  END();}int sspace(char const *buffer) {  int m = strcspn(buffer, " ");   if (buffer[m])     m += 1 + strcspn(buffer + m + 1, " ");   return m;}#define CRLF "\r\n"static int test_requests(tester_t *t){  char buffer[4096 + 1];  int m;  BEGIN();  {    static char const get[] =       "GET / HTTP/1.1" CRLF      "Host: 127.0.0.1" CRLF      "User-Agent: Test-Tool" CRLF      "Connection: close" CRLF      CRLF;    TEST(send_request(t, get, -1, 0, buffer, sizeof(buffer), &m), 0);    m = sspace(buffer); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 200");  }  {    static char const get[] =       "GET / HTTP/1.1" CRLF      "Host: 127.0.0.1" CRLF      "User-Agent: Test-Tool" CRLF      "Connection: close" CRLF      CRLF;    TEST(send_request(t, get, -1, 0, buffer, sizeof(buffer), &m), 0);    m = strcspn(buffer, CRLF); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 200 OK");  }  {    static char const kuik[] =       "kuik" CRLF CRLF;    TEST(send_request(t, kuik, -1, 0, buffer, sizeof(buffer), &m), 0);    m = sspace(buffer); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 400");  }  {    static char const kuik[] =       "POST / HTTP/1.1" CRLF      "Host: 127.0.0.1" CRLF      "Content-Length: 4294967296" CRLF      CRLF;    TEST(send_request(t, kuik, -1, 1, buffer, sizeof(buffer), &m), 0);    m = sspace(buffer); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 400");  }  {    static char const get[] =       "GET / HTTP/10.10" CRLF      "Host: 127.0.0.1" CRLF      "User-Agent: Test-Tool" CRLF      "Connection: close" CRLF      CRLF;    TEST(send_request(t, get, -1, 0, buffer, sizeof(buffer), &m), 0);    m = sspace(buffer); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 505");  }  {    static char const get[] =       "GET /" CRLF;    TEST(send_request(t, get, -1, 1, buffer, sizeof(buffer) - 1, &m), 0);    buffer[6] = '\0';    TEST_S(buffer, "<html>");  }  if (0)  {    static char const post[] =       "POST /foo HTTP/1.1" CRLF      "Host: 127.0.0.1" CRLF      "User-Agent: Test-Tool" CRLF      "Connection: close" CRLF      "Content-Length: 7" CRLF      "Expect: 100-continue" CRLF      CRLF;    static char const body[] =      "<html/>";    TEST(send_request(t, post, -1, -1, buffer, sizeof(buffer) - 1, &m), 0);    m = sspace(buffer); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 100");    TEST(send_request(t, body, -1, 0, buffer, sizeof(buffer) - 1, &m), 0);    m = sspace(buffer); buffer[m] = '\0';    TEST_S(buffer, "HTTP/1.1 200");  }  END();}static int init_engine(tester_t *t){  BEGIN();  int s;  t->t_engine = nth_engine_create(t->t_root, 				  NTHTAG_STREAMING(0),				  TAG_END());  TEST_1(t->t_engine);  t->t_sink = s = su_socket(AF_INET, SOCK_STREAM, 0); TEST_1(s != -1);  TEST(bind(s, &t->t_sinkaddr->su_sa, 	    t->t_sinkaddrlen = (sizeof t->t_sinkaddr->su_sin)),       0);  TEST_1(getsockname(s, &t->t_sinkaddr->su_sa, &t->t_sinkaddrlen) != -1);  TEST(listen(t->t_sink, 5), 0);    TEST_1(t->t_sinkuri = (url_string_t *)	 su_sprintf(t->t_home, "HTTP://127.0.0.1:%u", 		    htons(t->t_sinkaddr->su_port)));  END();}static int response_to_client(client_t *c,			      nth_client_t *hc,			      http_t const *http){  if (http) {    c->c_status = http->http_status->st_status;  }  else {    c->c_status = nth_client_status(hc);  }  return 0;}static int test_client(tester_t *t){  BEGIN();  nth_client_t *hc;  char *uri;  client_t client[1];  memset(client, 0, sizeof client);  TEST_1(uri = su_strcat(NULL, t->t_master->s_url->us_str, "/"));  TEST_1(hc = nth_client_tcreate(t->t_engine,				 response_to_client, client,				 HTTP_METHOD_GET,				 URL_STRING_MAKE(uri),				 TAG_END()));  while (client->c_status == 0) su_root_step(t->t_root, 1);  TEST(client->c_status, 200);  nth_client_destroy(hc);  su_free(NULL, uri);  memset(client, 0, sizeof client);  TEST_1(hc = nth_client_tcreate(t->t_engine,				 response_to_client, client,				 HTTP_METHOD_GET,				 URL_STRING_MAKE(t->t_sinkuri),				 NTHTAG_EXPIRES(1000),				 TAG_END()));  while (client->c_status == 0) su_root_step(t->t_root, 1);  TEST(client->c_status, 408);  nth_client_destroy(hc);	   END();}#if HAVE_ALARMstatic RETSIGTYPE sig_alarm(int s){  fprintf(stderr, "%s: FAIL! test timeout!\n", name);  exit(1);}#endifvoid usage(void){  fprintf(stderr, "usage: %s [-v|-q] [-p proxy-uri]\n", name);  exit(1);}int main(int argc, char **argv){  int i;  int retval = 0;  int o_alarm = 1;  tester_t t[1] = {{{ SU_HOME_INIT(t) }}};  char const *srcdir = getenv("srcdir");  if (srcdir == NULL)    srcdir = ".";  for (i = 1; argv[i]; i++) {    if (strcmp(argv[i], "-v") == 0)      tstflags |= tst_verbatim;    else if (strcmp(argv[i], "-q") == 0)      tstflags &= ~tst_verbatim;    else if (strcmp(argv[i], "-p") == 0 && argv[i + 1])      t->t_proxy = (url_string_t *)argv[++i];    else if (strcmp(argv[i], "-s") == 0 && argv[i + 1])      srcdir = argv[++i];    else if (strcmp(argv[i], "--no-alarm") == 0) {      o_alarm = 0;    }    else if (strcmp(argv[i], "-") == 0) {      i++; break;    }    else if (argv[i][0] != '-') {      break;    }    else      usage();  }  t->t_srcdir = srcdir;#if HAVE_ALARM  if (o_alarm) {    alarm(60);    signal(SIGALRM, sig_alarm);  }#endif  su_init();  retval |= init_test(t);  retval |= test_nth_client_api(t);  retval |= test_nth_server_api(t);  retval |= init_server(t);  retval |= test_requests(t);  retval |= init_engine(t);  retval |= test_client(t);  retval |= deinit_test(t);   su_deinit();  return retval;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -