ecore_con: add tests case related to HTTP post and ftp upload.
authorSrivardhan Hebbar <sri.hebbar@samsung.com>
Mon, 6 Apr 2015 13:46:21 +0000 (15:46 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Mon, 6 Apr 2015 14:37:52 +0000 (16:37 +0200)
Summary:
Made http and ftp url configurable via configure and also added test cases for ftp upload and http post.

Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
Reviewers: Sergeant_Whitespace, cedric

Subscribers: Sergeant_Whitespace, cedric

Differential Revision: https://phab.enlightenment.org/D2226

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
configure.ac
src/tests/ecore/ecore_test_ecore_con_url.c

index a8948f9..e54d399 100644 (file)
@@ -136,6 +136,12 @@ case "${build_tests}" in
      ;;
 esac
 
+AC_ARG_WITH([ecore-con-http-test-url],
+   [AS_HELP_STRING([--with-ecore-con-http-test-url=http://username:password@example.com],[Url of http server for testing with username and password])],[ECORE_CON_HTTP_TEST_URL=${withval}][AC_DEFINE_UNQUOTED([ECORE_CON_HTTP_TEST_URL],["$withval"],[Http url for testing])])
+
+AC_ARG_WITH([ecore-con-ftp-test-url],
+   [AS_HELP_STRING([--with-ecore-con-ftp-test-url=ftp://username:password@ftp.example.com?file=filename&directory=dir],[Url of ftp server for testing with username, password, complete filepath for upload with optional directory])],[ECORE_CON_FTP_TEST_URL=${withval}][AC_DEFINE_UNQUOTED([ECORE_CON_FTP_TEST_URL],["$withval"],[Ftp url for testing])])
+
 dbusservicedir="${datadir}/dbus-1/services"
 AC_ARG_WITH([dbus-services],
    [AS_HELP_STRING([--with-dbus-services=DBUS_SERVICES],[specify a directory to store dbus service files.])],
index 33854a1..99554c2 100644 (file)
@@ -67,12 +67,185 @@ _url_compl_cb(void *data, int type EINA_UNUSED, void *event_info)
    return EINA_FALSE;
 }
 
+static Eina_Bool
+_parse_url(char *link, char *url, char **user, char **passwd, char **file, char **dir)
+{
+   int is_http;
+   char *temp, *temp1, *link_cpy;
+
+   if (!strncmp(link, "http://", 7))
+     is_http = EINA_TRUE;
+#ifdef ECORE_CON_FTP_TEST_URL
+   else if (!strncmp(link, "ftp://", 6))
+     is_http = EINA_FALSE;
+#endif
+   else
+     return EINA_FALSE;
+
+   link_cpy = strdup(link);
+   temp = link + 6;
+   if (is_http)
+     temp ++;
+
+   temp1 = strtok(temp, ":");
+   if (temp1)
+     *user = strdup(temp1);
+   else
+     goto error_user;
+
+   temp1 = strtok(NULL, "@");
+   if (temp1)
+     *passwd = strdup(temp1);
+   else
+     goto error_passwd;
+
+   if (is_http)
+     {
+        strcpy(url, "http://");
+        temp1 = strrchr(link_cpy, '@') + 1;
+        strcat(url, temp1);
+
+        free(link_cpy);
+        return EINA_TRUE;
+     }
+
+   strcpy(url, "ftp://");
+   temp1 = strtok(NULL, "?");
+   if (temp1)
+     strcat(url, temp1);
+   else
+     goto error_passwd;
+
+   if (strchr (link_cpy, '&'))
+     {
+        temp1 = strtok(NULL, "=");
+        if (temp1)
+          *file = strdup(strtok(NULL, "&"));
+        else
+          goto error_passwd;
+
+        temp1 = strrchr(link_cpy, '=') + 1;
+        if (temp1)
+          *dir = strdup(temp1);
+        else
+          goto error_file;
+     }
+   else
+     {
+        temp1 = strrchr(link_cpy,'=') + 1;
+        if (temp1)
+          *file = strdup(temp1);
+        else
+          goto error_passwd;
+     }
+
+   free(link_cpy);
+   return EINA_TRUE;
+
+error_file:
+   free(*file);
+
+error_passwd:
+   free(*user);
+
+error_user:
+   free(link_cpy);
+   fprintf(stderr, "Wrong URL format\n");
+   return EINA_FALSE;
+}
+
+#ifdef ECORE_CON_FTP_TEST_URL
+START_TEST(ecore_test_ecore_con_url_ftp_upload)
+{
+   Ecore_Con_Url *ec_url;
+   url_test *info;
+   int ret;
+   char link[] = ECORE_CON_FTP_TEST_URL;
+   char url[4096], *username, *password, *file = NULL, *dir = NULL;
+
+   ret = eina_init();
+   fail_if(ret != 1);
+   ret = ecore_con_url_init();
+   fail_if(ret != 1);
+
+   fail_unless(_parse_url(link, url, &username, &password, &file, &dir));
+
+   fprintf(stderr, "FTP: \n url = %s \n username = %s \n password = %s \n file = %s \n", url, username, password, file);
+   if (dir)
+      fprintf(stderr, "directory = %s\n", dir);
+
+   ec_url = ecore_con_url_new(link);
+   fail_unless (ec_url);
+
+   ecore_con_url_verbose_set(ec_url, EINA_TRUE);
+   ecore_con_url_ftp_use_epsv_set(ec_url, EINA_TRUE);
+
+   fail_unless(ecore_con_url_ftp_upload(ec_url, file, username, password, dir));
+
+   ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE,
+                           _url_compl_cb, info);
+
+   ret = ecore_con_url_shutdown();
+   fail_if(ret != 0);
+   ret = eina_shutdown();
+}
+END_TEST
+#endif
+
+#ifdef ECORE_CON_HTTP_TEST_URL
+START_TEST(ecore_test_ecore_con_url_post)
+{
+   Ecore_Con_Url *ec_url;
+   url_test *info;
+   int ret;
+   char link[] = ECORE_CON_HTTP_TEST_URL;
+   char url_data[] = "test";
+   char *username = NULL, *password = NULL;
+   char url[4096];
+
+   ret = eina_init();
+   fail_if(ret != 1);
+   ret = ecore_con_url_init();
+   fail_if(ret != 1);
+
+   fail_unless(_parse_url(link, url, &username, &password, NULL, NULL));
+
+   fprintf (stderr, "HTTP: \n url = %s \n username = %s \n password = %s \n", url, username, password);
+
+   ecore_con_url_pipeline_set(EINA_TRUE);
+   fail_unless (ecore_con_url_pipeline_get());
+
+   ec_url = ecore_con_url_custom_new(url, "POST");
+   fail_unless (ec_url);
+
+   ecore_con_url_additional_header_add(ec_url, "User-Agent", "blablabla");
+   ecore_con_url_verbose_set(ec_url, EINA_TRUE);
+
+   ecore_con_url_httpauth_set(ec_url, username, password, EINA_FALSE);
+   ecore_con_url_time(ec_url, ECORE_CON_URL_TIME_IFMODSINCE, 0);
+
+   fail_unless(ecore_con_url_post(ec_url, url_data, 4, NULL));
+
+   ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE,
+                           _url_compl_cb, info);
+
+   ret = ecore_con_url_shutdown();
+   fail_if(ret != 0);
+   ret = eina_shutdown();
+}
+END_TEST
+#endif
+
 START_TEST(ecore_test_ecore_con_url_download)
 {
    Ecore_Con_Url *url;
    url_test *info;
    int ret;
+#ifdef ECORE_CON_HTTP_TEST_URL
+   const char link[] = ECORE_CON_HTTP_TEST_URL;
+#else
    const char link[] = "www.google.com";
+#endif
    char url_data[] = "test";
 
    ret = eina_init();
@@ -150,4 +323,10 @@ void ecore_test_ecore_con_url(TCase *tc)
    tcase_add_test(tc, ecore_test_ecore_con_url_init);
    tcase_add_test(tc, ecore_test_ecore_con_url_create);
    tcase_add_test(tc, ecore_test_ecore_con_url_download);
+#ifdef ECORE_CON_HTTP_TEST_URL
+   tcase_add_test(tc, ecore_test_ecore_con_url_post);
+#endif
+#ifdef ECORE_CON_FTP_TEST_URL
+   tcase_add_test(tc, ecore_test_ecore_con_url_ftp_upload);
+#endif
 }