CCL: split-list deals with multiple use attr YAZ-844
[yaz-moved-to-github.git] / test / test_comstack.c
index aa816df..381ecb8 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2013 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 #if HAVE_CONFIG_H
@@ -173,6 +173,20 @@ static void tst_http_response(void)
         YAZ_CHECK_EQ(cs_complete_auto(http_buf, 24), 0);
     }
     {
+        /* no content, no headers */
+        const char *http_buf =
+            /*123456789012345678 */
+            "HTTP/1.1 204 OK\r\n"
+            "\r\n"
+            "HTTP/1.1 200 OK\r\n";
+
+        YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0);
+        YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0);
+        YAZ_CHECK_EQ(cs_complete_auto(http_buf, 18), 0);
+        YAZ_CHECK_EQ(cs_complete_auto(http_buf, 19), 19);
+        YAZ_CHECK_EQ(cs_complete_auto(http_buf, 24), 19);
+    }
+    {
         /* response, content  */
         const char *http_buf =
             /*123456789012345678 */
@@ -209,18 +223,23 @@ static int comstack_example(const char *server_address_str)
     }
 
     server_address_ip = cs_straddr(stack, server_address_str);
-    if (!server_address_ip)
-    {
+    if (!server_address_ip) {
         fprintf(stderr, "cs_straddr: address could not be resolved\n");
         return -1;
     }
 
     status = cs_connect(stack, server_address_ip);
-    if (status != 0) {
+    if (status) {
         fprintf(stderr, "cs_connect: %s\n", cs_strerror(stack));
         return -1;
     }
 
+    status = cs_rcvconnect(stack);
+    if (status) {
+        fprintf(stderr, "cs_rcvconnect: %s\n", cs_strerror(stack));
+        return -1;
+    }
+
     status = cs_put(stack, protocol_package, protocol_package_length);
     if (status) {
         fprintf(stderr, "cs_put: %s\n", cs_strerror(stack));
@@ -228,7 +247,6 @@ static int comstack_example(const char *server_address_str)
     }
 
     /* Now get a response */
-
     length_incoming = cs_get(stack, &buf, &size);
     if (!length_incoming) {
         fprintf(stderr, "Connection closed\n");
@@ -244,10 +262,37 @@ static int comstack_example(const char *server_address_str)
     /* clean up */
     cs_close(stack);
     if (buf)
-        free(buf);
+        xfree(buf);
     return 0;
 }
 
+static void tst_cs_get_host_args(void)
+{
+    const char *arg = 0;
+
+    cs_get_host_args("http://localhost:9999", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, ""));
+    cs_get_host_args("http://localhost:9999/x", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "x"));
+    cs_get_host_args("http://localhost:9999?x", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, ""));
+    cs_get_host_args("localhost:9999", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, ""));
+    cs_get_host_args("localhost:9999/", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, ""));
+    cs_get_host_args("localhost:9999/x&url=http://some.host", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "x&url=http://some.host"));
+    cs_get_host_args("http://localhost:9999/x&url=http://some.host", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "x&url=http://some.host"));
+    cs_get_host_args("http:/localhost:9999/x", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "localhost:9999/x"));
+    cs_get_host_args("http//localhost:9999/x", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "/localhost:9999/x"));
+    cs_get_host_args("http://y/x", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "x"));
+    cs_get_host_args("http:///x", &arg);
+    YAZ_CHECK(arg && !strcmp(arg, "x"));
+}
 
 int main (int argc, char **argv)
 {
@@ -257,6 +302,7 @@ int main (int argc, char **argv)
        comstack_example(argv[1]);
     tst_http_request();
     tst_http_response();
+    tst_cs_get_host_args();
     YAZ_CHECK_TERM;
 }