diff options
Diffstat (limited to 'test/unittest/.svn/text-base/libunit.c.svn-base')
-rw-r--r-- | test/unittest/.svn/text-base/libunit.c.svn-base | 615 |
1 files changed, 0 insertions, 615 deletions
diff --git a/test/unittest/.svn/text-base/libunit.c.svn-base b/test/unittest/.svn/text-base/libunit.c.svn-base deleted file mode 100644 index b0be673..0000000 --- a/test/unittest/.svn/text-base/libunit.c.svn-base +++ /dev/null @@ -1,615 +0,0 @@ -/* vim: set textwidth=80 tabstop=4: */ - -/* -// libunit.c -// -// Copyright 2010 Michael Rasmussen <mir@datanom.net> -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -// MA 02110-1301, USA. -*/ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include "caldav.h" -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <glib.h> -#include <string.h> -#include <sys/time.h> -#include <string.h> - -static const char* usage[] = { -"unittest is part of libcaldav for claws-mails " -"vcalendar plugin.\nCopyright (C) Michael Rasmussen, 2008.\n" -"This program is free software; you can redistribute it and/or modify\n" -"it under the terms of the GNU General Public License as published by\n" -"the Free Software Foundation; either version 3 of the License, or\n" -"(at your option) any later version.\n" -"\nusage:\n\tunittest [Options]\n" -"\n\tOptions:\n" -"\t\t-h|-?\tusage\n" -"\t\t-a\tURL\n" -"\t\t-d\tEnable debug\n" -"\t\t-l\tDebug library\n" -"\t\t-p\tpassword\n" -"\t\t-u\tusername\n" -}; - -/* - * Options can be given in one of three ways: - * 1) Entered as options on the command line - * 2) Stored in environment variables: - * - LIBCALDAV_UID -> username to use when connection to server - * - LIBCALDAV_PWD -> password, if any, to use when connection to server - * - LIBCALDAV_URL -> complete URL to server. prefixed with either - * http:// or https:// - * 3) Stored in a file found in the same directory as the program: - * [server] - * password=Big secret - * username=username - * url=http[s]://bar.tld/foo - */ - -#define CONFFILE "caldav-unit-settings.conf" - -typedef struct { - gchar* uid; - gchar* pwd; - gchar* url; -} settings; - -typedef enum { - PWD, - UID, - URL -} CONFIG; - -static settings* SETTING = NULL; -gboolean DEBUG = FALSE; -gboolean DEBUG_LIB = FALSE; - -void settings_free(settings** setting) { - settings* s; - - if (! *setting) - return; - s = *setting; - g_free(s->url); - g_free(s->uid); - g_free(s->pwd); - g_free(s); - *setting = s = NULL; -} - -settings* parse_cmdline(int argc, char** argv) { - char c; - settings* setting; - - setting = g_new0(settings, 1); - while ((c = getopt(argc, argv, "ha:dlp:u:?")) != -1) { - switch (c) { - case 'h': - case '?': - fprintf(stdout, "%s", usage[0]); - return 0; - case 'a': - setting->url = g_strdup(optarg); - break; - case 'd': - DEBUG = TRUE; - break; - case 'l': - DEBUG_LIB = TRUE; - break; - case 'p': - setting->pwd = g_strdup(optarg); - break; - case 'u': - setting->uid = g_strdup(optarg); - break; - } - } - if (argv[optind]) { - fprintf(stderr, "No arguments after options expected\n"); - fprintf(stderr, "%s", usage[0]); - settings_free(&setting); - return NULL; - } - - return setting; -} - -void read_file(const gchar* file) { - GKeyFile* keyfile; - - if (! SETTING) { - SETTING = g_new0(settings, 1); - keyfile = g_key_file_new(); - if (g_key_file_load_from_file(keyfile, - file, - G_KEY_FILE_KEEP_COMMENTS, - NULL)) { - SETTING->pwd = g_key_file_get_string(keyfile, - "server", - "password", - NULL); - SETTING->uid = g_key_file_get_string(keyfile, - "server", - "username", - NULL); - SETTING->url = g_key_file_get_string(keyfile, - "server", - "url", - NULL); - } - g_key_file_free(keyfile); - } -} - -const gchar* get_setting_from_file(CONFIG config) { - gchar* cwd; - gchar* path; - gchar* pos; - gchar* setting = NULL; - int step; - - gchar* filename = g_get_prgname(); - if (filename[0] == '/') { - /* absolute path */ - cwd = g_path_get_dirname(filename); - } - else if ((pos = strchr(filename, '/')) != NULL) { - /* relative path */ - if (filename[0] == '.') { - char* tmp = pos; - while (tmp) { - if (strncmp(tmp, "..", 2) == 0) - step = 2; - else - step = 1; - tmp = strchr(pos + step, '/'); - if (tmp) - pos = tmp; - } - if (pos == NULL) { - pos = strchr(filename, '/'); - } - } - path = g_get_current_dir(); - cwd = g_build_filename(path, pos + 1, NULL); - g_free(path); - if (g_file_test(cwd, G_FILE_TEST_IS_REGULAR)) { - pos = strrchr(cwd, '/'); - if (pos) { - path = g_strndup(cwd, pos - cwd); - g_free(cwd); - cwd = g_strdup(path); - g_free(path); - } - } - } - else { - /* find cwd in PATH */ - cwd = g_find_program_in_path(filename); - } - path = g_build_filename(cwd, CONFFILE, NULL); - g_free(cwd); - if (g_file_test(path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { - read_file(path); - switch (config) { - case UID: setting = SETTING->uid; break; - case PWD: setting = SETTING->pwd; break; - case URL: setting = SETTING->url; break; - } - } - g_free(path); - return setting; -} - -gboolean find_missing(settings** setting) { - settings* s = *setting; - const char* env; - gboolean error = FALSE; - - if (! s) - return TRUE; - - if (! s->uid) { - if ((env = getenv("LIBCALDAV_UID")) == NULL) { - env = get_setting_from_file(UID); - if (env == NULL) - error = TRUE; - } - s->uid = g_strdup(env); - } - if (! s->pwd) { - if ((env = getenv("LIBCALDAV_PWD")) == NULL) { - env = get_setting_from_file(PWD); - if (env == NULL) - error = TRUE; - } - s->pwd = g_strdup(env); - } - if (! s->url) { - if ((env = getenv("LIBCALDAV_URL")) == NULL) { - env = get_setting_from_file(URL); - if (env == NULL) - error = TRUE; - } - s->url = g_strdup(env); - } - settings_free(&SETTING); - return error; -} - -time_t make_time_t(const char* time_elem) { - struct tm datetime = {0,0,0,0,0,0,0,0,0,0,NULL}; - struct tm* tmp; - gchar** elem; - time_t t; - - t = time(NULL); - tmp = localtime(&t); - elem = g_strsplit(time_elem, "/", 3); - datetime.tm_year = atoi(elem[0]) - 1900; - datetime.tm_mon = atoi(elem[1]) - 1; - datetime.tm_mday = atoi(elem[2]); - g_strfreev(elem); - t = mktime(&datetime); - return t; -} - -gboolean compare_freebusy(const gchar* s1, const gchar* s2) { - const char* TOKEN = "FREEBUSY:"; - gchar* pos1; - gchar* pos2; - gchar* id1; - - if (! s1 && ! s2) - return TRUE; - if (! s1 || ! s2) - return FALSE; - pos1 = strstr(s2, TOKEN); - if (! pos1) - return FALSE; - pos1 += strlen(TOKEN); - pos2 = strchr(pos1, '\n'); - if (! pos2) - return FALSE; - if (*(pos2 - 1) == '\r') - pos2--; - id1 = g_strndup(pos1, pos2 - pos1); - int res = strcmp(s1, id1); - g_free(id1); - return (res == 0); -} - -gboolean compare_object(const gchar* TOKEN, const gchar* s1, const gchar* s2) { - gchar* pos1; - gchar* pos2; - gchar* id1; - gchar* id2; - - if (! s1 && ! s2) - return TRUE; - if (! s1 || ! s2) - return FALSE; - pos1 = strstr(s1, TOKEN); - if (! pos1) - return FALSE; - pos1 += strlen(TOKEN) + 1; - pos2 = strchr(pos1, '\n'); - if (! pos2) - return FALSE; - if (*(pos2 - 1) == '\r') - pos2--; - id1 = g_strndup(pos1, pos2 - pos1); - pos2 = strstr(s2, TOKEN); - if (! pos2) { - g_free(id1); - return FALSE; - } - pos2 += strlen(TOKEN) + 1; - pos1 = strchr(pos2, '\n'); - if (! pos1) { - g_free(id1); - return FALSE; - } - if (*(pos1 - 1) == '\r') - pos1--; - id2 = g_strndup(pos2, pos1 - pos2); - int res = strcmp(id1, id2); - g_free(id1); - g_free(id2); - return (res == 0); -} - -void run_tests(settings* s) { - runtime_info* info = caldav_get_runtime_info(); - response* resp = caldav_get_response(); - gchar** parts; - gchar* url; - gchar* object; - - if (DEBUG_LIB) { - info->options->debug = 1; - info->options->trace_ascii = 1; - } - parts = g_strsplit(s->url, "//", 2); - url = g_strconcat( - parts[0], "//", s->uid, ":", s->pwd, "@", parts[1], NULL); - g_strfreev(parts); - fprintf(stdout, "Test caldav_enabled_resource:\t\t\t"); - if (caldav_enabled_resource(url, info)) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "caldav enabled server\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test caldav_get_displayname:\t\t\t"); - if (caldav_get_displayname(resp, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Display Name: %s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL; - fprintf(stdout, "Test caldav_get_server_options:\t\t\t"); - if ((parts = caldav_get_server_options(url, info)) != NULL) { - fprintf(stdout, "OK\n"); - if (DEBUG) { - char** tmp = parts; - while (*tmp) { - fprintf(stdout, "--> %s\n", *tmp++); - } - } - g_strfreev(parts); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_file_get_contents("../ics/add.ics", &object, NULL, NULL); - fprintf(stdout, "Test caldav_add_object:\t\t\t\t"); - if (caldav_add_object(object, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Added successfully\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object was added:\t\t\t"); - if (caldav_get_object(resp, make_time_t("2008/04/15"), - make_time_t("2008/04/16"), url, info) == OK) { - if (compare_object("UID", object, resp->msg)) - fprintf(stdout, "OK\n"); - else - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL; - g_free(object); - fprintf(stdout, "Test FREEBUSY search the same day:\t\t"); - if (caldav_get_freebusy(resp, make_time_t("2008/04/15"), - make_time_t("2008/04/16"), url, info) == OK) { - if (compare_freebusy("20080415T151500Z/20080415T162500", resp->msg)) - fprintf(stdout, "OK\n"); - else - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL; - g_file_get_contents("../ics/modify.ics", &object, NULL, NULL); - fprintf(stdout, "Test caldav_modify_object:\t\t\t"); - if (caldav_modify_object(object, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Modified successfully\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object was modified:\t\t\t"); - if (caldav_get_object(resp, make_time_t("2008/04/16"), - make_time_t("2008/04/17"), url, info) == OK) { - if (compare_object("DTEND", object, resp->msg)) - fprintf(stdout, "OK\n"); - else - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL; - fprintf(stdout, "Test caldav_getall_object:\t\t\t"); - if (caldav_getall_object(resp, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object exists:\t\t\t\t"); - if (compare_object("UID", object, resp->msg)) - fprintf(stdout, "FAIL\n"); - else - fprintf(stdout, "OK\n"); - g_free(resp->msg); - resp->msg = NULL; - g_free(object); - g_file_get_contents("../ics/delete.ics", &object, NULL, NULL); - fprintf(stdout, "Test caldav_delete_object:\t\t\t"); - if (caldav_delete_object(object, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Deleted successfully\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object was deleted:\t\t\t"); - if (caldav_get_object(resp, make_time_t("2008/04/16"), - make_time_t("2008/04/17"), url, info) == OK) { - if (compare_object("UID", object, resp->msg)) - fprintf(stdout, "FAIL\n"); - else - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "%s\n", (resp->msg) ? resp->msg : "No object found"); - g_free(resp->msg); - resp->msg = NULL; - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(object); - fprintf(stdout, "\nTesting without using locks\n"); - info->options->use_locking = 0; - g_file_get_contents("../ics/add.ics", &object, NULL, NULL); - fprintf(stdout, "Test caldav_add_object:\t\t\t\t"); - if (caldav_add_object(object, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Added successfully\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object was added:\t\t\t"); - if (caldav_get_object(resp, make_time_t("2008/04/15"), - make_time_t("2008/04/16"), url, info) == OK) { - if (compare_object("UID", object, resp->msg)) - fprintf(stdout, "OK\n"); - else - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL; - g_free(object); -/* fprintf(stdout, "Test FREEBUSY search the same day:\t\t"); - if (caldav_get_freebusy(resp, make_time_t("2008/04/15"), - make_time_t("2008/04/16"), url, info) == OK) { - if (compare_freebusy("20080415T151500Z/20080415T162500", resp->msg)) - fprintf(stdout, "OK\n"); - else - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL;*/ - g_file_get_contents("../ics/modify.ics", &object, NULL, NULL); - fprintf(stdout, "Test caldav_modify_object:\t\t\t"); - if (caldav_modify_object(object, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Modified successfully\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object was modified:\t\t\t"); - if (caldav_get_object(resp, make_time_t("2008/04/16"), - make_time_t("2008/04/17"), url, info) == OK) { - if (compare_object("DTEND", object, resp->msg)) - fprintf(stdout, "OK\n"); - else - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%s\n", resp->msg); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(resp->msg); - resp->msg = NULL; - g_free(object); - g_file_get_contents("../ics/delete.ics", &object, NULL, NULL); - fprintf(stdout, "Test caldav_delete_object:\t\t\t"); - if (caldav_delete_object(object, url, info) == OK) { - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "Deleted successfully\n"); - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - fprintf(stdout, "Test if object was deleted:\t\t\t"); - if (caldav_get_object(resp, make_time_t("2008/04/16"), - make_time_t("2008/04/17"), url, info) == OK) { - if (compare_object("UID", object, resp->msg)) - fprintf(stdout, "FAIL\n"); - else - fprintf(stdout, "OK\n"); - if (DEBUG) fprintf(stdout, "%s\n", (resp->msg) ? resp->msg : "No object found"); - g_free(resp->msg); - resp->msg = NULL; - } - else { - fprintf(stdout, "FAIL\n"); - if (DEBUG) fprintf(stdout, "%ld: %s\n", info->error->code, info->error->str); - } - g_free(url); - caldav_free_response(&resp); - caldav_free_runtime_info(&info); -} - -int main(int argc, char** argv) { - settings* setting; - - g_set_prgname(argv[0]); - setting = parse_cmdline(argc, argv); - if (find_missing(&setting)) { - fprintf(stderr, "missing required information\n"); - fprintf(stdout, "%s", usage[0]); - settings_free(&setting); - return 1; - } - run_tests(setting); - settings_free(&setting); - return 0; -} |