/* * This file Copyright (C) 2013-2014 Mnemosyne LLC * * It may be used under the GNU GPL versions 2 or 3 * or any future license endorsed by Mnemosyne LLC. * */ #include #include #include #include "transmission.h" #include "session.h" #include "session-id.h" #include "utils.h" #include "version.h" #undef VERBOSE #include "libtransmission-test.h" static int testPeerId(void) { int i; uint8_t peer_id[PEER_ID_LEN + 1]; for (i = 0; i < 100000; ++i) { int j; int val = 0; tr_peerIdInit(peer_id); check(strlen((char*)peer_id) == PEER_ID_LEN); check(memcmp(peer_id, PEERID_PREFIX, 8) == 0); for (j = 8; j < PEER_ID_LEN; ++j) { char tmp[2] = { (char)peer_id[j], '\0' }; val += strtoul(tmp, NULL, 36); } check(val % 36 == 0); } return 0; } static int test_session_id(void) { tr_session_id_t session_id; char const* session_id_str_1 = NULL; char const* session_id_str_2 = NULL; char const* session_id_str_3 = NULL; check(!tr_session_id_is_local(NULL)); check(!tr_session_id_is_local("")); check(!tr_session_id_is_local("test")); session_id = tr_session_id_new(); check(session_id != NULL); tr_timeUpdate(0); session_id_str_1 = tr_session_id_get_current(session_id); check(session_id_str_1 != NULL); check(strlen(session_id_str_1) == 48); session_id_str_1 = tr_strdup(session_id_str_1); check(tr_session_id_is_local(session_id_str_1)); tr_timeUpdate(60 * 60 - 1); check(tr_session_id_is_local(session_id_str_1)); session_id_str_2 = tr_session_id_get_current(session_id); check(session_id_str_2 != NULL); check(strlen(session_id_str_2) == 48); check(strcmp(session_id_str_2, session_id_str_1) == 0); tr_timeUpdate(60 * 60); check(tr_session_id_is_local(session_id_str_1)); session_id_str_2 = tr_session_id_get_current(session_id); check(session_id_str_2 != NULL); check(strlen(session_id_str_2) == 48); check(strcmp(session_id_str_2, session_id_str_1) != 0); session_id_str_2 = tr_strdup(session_id_str_2); check(tr_session_id_is_local(session_id_str_2)); check(tr_session_id_is_local(session_id_str_1)); tr_timeUpdate(60 * 60 * 2); check(tr_session_id_is_local(session_id_str_2)); check(tr_session_id_is_local(session_id_str_1)); session_id_str_3 = tr_session_id_get_current(session_id); check(session_id_str_3 != NULL); check(strlen(session_id_str_3) == 48); check(strcmp(session_id_str_3, session_id_str_2) != 0); check(strcmp(session_id_str_3, session_id_str_1) != 0); session_id_str_3 = tr_strdup(session_id_str_3); check(tr_session_id_is_local(session_id_str_3)); check(tr_session_id_is_local(session_id_str_2)); check(!tr_session_id_is_local(session_id_str_1)); tr_timeUpdate(60 * 60 * 10); check(tr_session_id_is_local(session_id_str_3)); check(tr_session_id_is_local(session_id_str_2)); check(!tr_session_id_is_local(session_id_str_1)); check(!tr_session_id_is_local(NULL)); check(!tr_session_id_is_local("")); check(!tr_session_id_is_local("test")); tr_session_id_free(session_id); check(!tr_session_id_is_local(session_id_str_3)); check(!tr_session_id_is_local(session_id_str_2)); check(!tr_session_id_is_local(session_id_str_1)); tr_free(session_id_str_3); tr_free(session_id_str_2); tr_free(session_id_str_1); return 0; } int main(void) { testFunc const tests[] = { testPeerId, test_session_id }; return runTests(tests, NUM_TESTS(tests)); }