(libT) #5234 'typo causing RPC session-get error in nightlies': add unit test (currently failing) to test for this issue.
This commit is contained in:
parent
b42a7ebdc3
commit
5ccf3fc7e2
|
@ -1,4 +1,4 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "transmission.h"
|
||||
|
@ -165,6 +165,27 @@ rm_rf (const char * killme)
|
|||
}
|
||||
}
|
||||
|
||||
#define MEM_K 1024
|
||||
#define MEM_B_STR "B"
|
||||
#define MEM_K_STR "KiB"
|
||||
#define MEM_M_STR "MiB"
|
||||
#define MEM_G_STR "GiB"
|
||||
#define MEM_T_STR "TiB"
|
||||
|
||||
#define DISK_K 1000
|
||||
#define DISK_B_STR "B"
|
||||
#define DISK_K_STR "kB"
|
||||
#define DISK_M_STR "MB"
|
||||
#define DISK_G_STR "GB"
|
||||
#define DISK_T_STR "TB"
|
||||
|
||||
#define SPEED_K 1000
|
||||
#define SPEED_B_STR "B/s"
|
||||
#define SPEED_K_STR "kB/s"
|
||||
#define SPEED_M_STR "MB/s"
|
||||
#define SPEED_G_STR "GB/s"
|
||||
#define SPEED_T_STR "TB/s"
|
||||
|
||||
void
|
||||
libtransmission_test_session_init (void)
|
||||
{
|
||||
|
@ -172,6 +193,10 @@ libtransmission_test_session_init (void)
|
|||
char * downloadDir;
|
||||
tr_variant dict;
|
||||
|
||||
tr_formatter_mem_init (MEM_K, MEM_K_STR, MEM_M_STR, MEM_G_STR, MEM_T_STR);
|
||||
tr_formatter_size_init (DISK_K,DISK_K_STR, DISK_M_STR, DISK_G_STR, DISK_T_STR);
|
||||
tr_formatter_speed_init (SPEED_K, SPEED_K_STR, SPEED_M_STR, SPEED_G_STR, SPEED_T_STR);
|
||||
|
||||
/* create a sandbox for the test session */
|
||||
cwd = tr_getcwd ();
|
||||
sandbox = tr_buildPath (cwd, "sandbox-XXXXXX", NULL);
|
||||
|
@ -200,3 +225,62 @@ libtransmission_test_session_close (void)
|
|||
rm_rf (sandbox);
|
||||
tr_free (sandbox);
|
||||
}
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
||||
tr_torrent *
|
||||
libtransmission_test_zero_torrent_init (void)
|
||||
{
|
||||
int err;
|
||||
int metainfo_len;
|
||||
char * metainfo;
|
||||
const char * metainfo_base64;
|
||||
tr_torrent * tor;
|
||||
tr_ctor * ctor;
|
||||
|
||||
/*
|
||||
1048576 files-filled-with-zeroes/1048576
|
||||
4096 files-filled-with-zeroes/4096
|
||||
512 files-filled-with-zeroes/512
|
||||
*/
|
||||
metainfo_base64 =
|
||||
"ZDg6YW5ub3VuY2UzMTpodHRwOi8vd3d3LmV4YW1wbGUuY29tL2Fubm91bmNlMTA6Y3JlYXRlZCBi"
|
||||
"eTI1OlRyYW5zbWlzc2lvbi8yLjYxICgxMzQwNykxMzpjcmVhdGlvbiBkYXRlaTEzNTg3MDQwNzVl"
|
||||
"ODplbmNvZGluZzU6VVRGLTg0OmluZm9kNTpmaWxlc2xkNjpsZW5ndGhpMTA0ODU3NmU0OnBhdGhs"
|
||||
"NzoxMDQ4NTc2ZWVkNjpsZW5ndGhpNDA5NmU0OnBhdGhsNDo0MDk2ZWVkNjpsZW5ndGhpNTEyZTQ6"
|
||||
"cGF0aGwzOjUxMmVlZTQ6bmFtZTI0OmZpbGVzLWZpbGxlZC13aXRoLXplcm9lczEyOnBpZWNlIGxl"
|
||||
"bmd0aGkzMjc2OGU2OnBpZWNlczY2MDpRiEMYSbRhMVL9e9umo/8KT9ZCS1GIQxhJtGExUv1726aj"
|
||||
"/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9umo/8KT9ZCS1GIQxhJtGExUv17"
|
||||
"26aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9umo/8KT9ZCS1GIQxhJtGEx"
|
||||
"Uv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9umo/8KT9ZCS1GIQxhJ"
|
||||
"tGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9umo/8KT9ZCS1GI"
|
||||
"QxhJtGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9umo/8KT9ZC"
|
||||
"S1GIQxhJtGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9umo/8K"
|
||||
"T9ZCS1GIQxhJtGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9e9um"
|
||||
"o/8KT9ZCS1GIQxhJtGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRhMVL9"
|
||||
"e9umo/8KT9ZCS1GIQxhJtGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMYSbRh"
|
||||
"MVL9e9umo/8KT9ZCS1GIQxhJtGExUv1726aj/wpP1kJLUYhDGEm0YTFS/XvbpqP/Ck/WQktRiEMY"
|
||||
"SbRhMVL9e9umo/8KT9ZCS1GIQxhJtGExUv1726aj/wpP1kJLOlf5A+Tz30nMBVuNM2hpV3wg/103"
|
||||
"OnByaXZhdGVpMGVlZQ==";
|
||||
|
||||
/* create the torrent ctor */
|
||||
metainfo = tr_base64_decode (metainfo_base64, -1, &metainfo_len);
|
||||
assert (metainfo != NULL);
|
||||
assert (metainfo_len > 0);
|
||||
assert (session != NULL);
|
||||
ctor = tr_ctorNew (session);
|
||||
tr_ctorSetMetainfo (ctor, (uint8_t*)metainfo, metainfo_len);
|
||||
tr_ctorSetPaused (ctor, TR_FORCE, true);
|
||||
|
||||
/* create the torrent */
|
||||
err = 0;
|
||||
tor = tr_torrentNew (ctor, &err);
|
||||
assert (!err);
|
||||
|
||||
/* cleanup */
|
||||
tr_free (metainfo);
|
||||
tr_ctorFree (ctor);
|
||||
return tor;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "transmission.h"
|
||||
#include "utils.h" /* tr_strcmp0 () */
|
||||
|
||||
extern int current_test;
|
||||
|
@ -68,6 +69,8 @@ int main (void) { \
|
|||
extern tr_session * session;
|
||||
void libtransmission_test_session_init (void);
|
||||
void libtransmission_test_session_close (void);
|
||||
tr_torrent * libtransmission_test_zero_torrent_init (void);
|
||||
|
||||
|
||||
|
||||
#endif /* !LIBTRANSMISSION_TEST_H */
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include <event2/buffer.h>
|
||||
|
||||
#include "transmission.h"
|
||||
#include "rpcimpl.h"
|
||||
#include "utils.h"
|
||||
|
@ -8,53 +12,152 @@
|
|||
static int
|
||||
test_list (void)
|
||||
{
|
||||
size_t len;
|
||||
int64_t i;
|
||||
const char * str;
|
||||
tr_variant top;
|
||||
size_t len;
|
||||
int64_t i;
|
||||
const char * str;
|
||||
tr_variant top;
|
||||
|
||||
tr_rpc_parse_list_str (&top, "12", -1);
|
||||
check (tr_variantIsInt (&top));
|
||||
check (tr_variantGetInt (&top, &i));
|
||||
check_int_eq (12, i);
|
||||
tr_variantFree (&top);
|
||||
tr_rpc_parse_list_str (&top, "12", -1);
|
||||
check (tr_variantIsInt (&top));
|
||||
check (tr_variantGetInt (&top, &i));
|
||||
check_int_eq (12, i);
|
||||
tr_variantFree (&top);
|
||||
|
||||
tr_rpc_parse_list_str (&top, "12", 1);
|
||||
check (tr_variantIsInt (&top));
|
||||
check (tr_variantGetInt (&top, &i));
|
||||
check_int_eq (1, i);
|
||||
tr_variantFree (&top);
|
||||
tr_rpc_parse_list_str (&top, "12", 1);
|
||||
check (tr_variantIsInt (&top));
|
||||
check (tr_variantGetInt (&top, &i));
|
||||
check_int_eq (1, i);
|
||||
tr_variantFree (&top);
|
||||
|
||||
tr_rpc_parse_list_str (&top, "6,7", -1);
|
||||
check (tr_variantIsList (&top));
|
||||
check (tr_variantListSize (&top) == 2);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 0), &i));
|
||||
check_int_eq (6, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 1), &i));
|
||||
check_int_eq (7, i);
|
||||
tr_variantFree (&top);
|
||||
tr_rpc_parse_list_str (&top, "6,7", -1);
|
||||
check (tr_variantIsList (&top));
|
||||
check (tr_variantListSize (&top) == 2);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 0), &i));
|
||||
check_int_eq (6, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 1), &i));
|
||||
check_int_eq (7, i);
|
||||
tr_variantFree (&top);
|
||||
|
||||
tr_rpc_parse_list_str (&top, "asdf", -1);
|
||||
check (tr_variantIsString (&top));
|
||||
check (tr_variantGetStr (&top, &str, &len));
|
||||
check_int_eq (4, len);
|
||||
check_streq ("asdf", str);
|
||||
tr_variantFree (&top);
|
||||
tr_rpc_parse_list_str (&top, "asdf", -1);
|
||||
check (tr_variantIsString (&top));
|
||||
check (tr_variantGetStr (&top, &str, &len));
|
||||
check_int_eq (4, len);
|
||||
check_streq ("asdf", str);
|
||||
tr_variantFree (&top);
|
||||
|
||||
tr_rpc_parse_list_str (&top, "1,3-5", -1);
|
||||
check (tr_variantIsList (&top));
|
||||
check (tr_variantListSize (&top) == 4);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 0), &i));
|
||||
check_int_eq (1, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 1), &i));
|
||||
check_int_eq (3, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 2), &i));
|
||||
check_int_eq (4, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 3), &i));
|
||||
check_int_eq (5, i);
|
||||
tr_variantFree (&top);
|
||||
tr_rpc_parse_list_str (&top, "1,3-5", -1);
|
||||
check (tr_variantIsList (&top));
|
||||
check (tr_variantListSize (&top) == 4);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 0), &i));
|
||||
check_int_eq (1, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 1), &i));
|
||||
check_int_eq (3, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 2), &i));
|
||||
check_int_eq (4, i);
|
||||
check (tr_variantGetInt (tr_variantListChild (&top, 3), &i));
|
||||
check_int_eq (5, i);
|
||||
tr_variantFree (&top);
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
MAIN_SINGLE_TEST (test_list)
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
||||
static void
|
||||
rpc_response_func (tr_session * session UNUSED,
|
||||
struct evbuffer * response,
|
||||
void * setme)
|
||||
{
|
||||
tr_variantFromBuf (setme, TR_VARIANT_FMT_JSON, evbuffer_pullup(response,-1), evbuffer_get_length(response), NULL, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
test_session_get_and_set (void)
|
||||
{
|
||||
const char * json;
|
||||
tr_variant response;
|
||||
tr_variant * args;
|
||||
tr_torrent * tor = libtransmission_test_zero_torrent_init ();
|
||||
check (tor != NULL);
|
||||
|
||||
json = "{\"method\":\"session-get\"}";
|
||||
tr_rpc_request_exec_json (session, json, strlen(json), rpc_response_func, &response);
|
||||
|
||||
check (tr_variantIsDict(&response));
|
||||
check (tr_variantIsDict(&response));
|
||||
check (tr_variantDictFindDict (&response, TR_KEY_arguments, &args));
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_down) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_time_begin) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_time_day) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_time_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_time_end) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_alt_speed_up) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_blocklist_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_blocklist_size) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_blocklist_url) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_cache_size_mb) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_config_dir) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_dht_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_download_dir) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_download_dir_free_space) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_download_queue_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_download_queue_size) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_encryption) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_idle_seeding_limit) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_idle_seeding_limit_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_incomplete_dir) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_incomplete_dir_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_lpd_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_peer_limit_global) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_peer_limit_per_torrent) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_peer_port) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_peer_port_random_on_start) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_pex_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_port_forwarding_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_queue_stalled_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_queue_stalled_minutes) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_rename_partial_files) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_rpc_version) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_rpc_version_minimum) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_script_torrent_done_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_script_torrent_done_filename) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_seed_queue_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_seed_queue_size) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_seedRatioLimit) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_seedRatioLimited) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_speed_limit_down) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_speed_limit_down_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_speed_limit_up) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_speed_limit_up_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_start_added_torrents) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_trash_original_torrent_files) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_units) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_utp_enabled) != NULL);
|
||||
check (tr_variantDictFind (args, TR_KEY_version) != NULL);
|
||||
tr_variantFree (&response);
|
||||
|
||||
/* cleanup */
|
||||
tr_torrentRemove (tor, false, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int ret;
|
||||
const testFunc tests[] = { test_list,
|
||||
test_session_get_and_set };
|
||||
|
||||
libtransmission_test_session_init ();
|
||||
ret = runTests (tests, NUM_TESTS (tests));
|
||||
libtransmission_test_session_close ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -26,10 +26,9 @@ extern "C" {
|
|||
|
||||
struct evbuffer;
|
||||
|
||||
/* FIXME (libevent2): make "response" an evbuffer and remove response_len */
|
||||
typedef void (*tr_rpc_response_func)(tr_session * session,
|
||||
struct evbuffer * response,
|
||||
void * user_data);
|
||||
typedef void (*tr_rpc_response_func)(tr_session * session,
|
||||
struct evbuffer * response,
|
||||
void * user_data);
|
||||
/* http://www.json.org/ */
|
||||
void tr_rpc_request_exec_json (tr_session * session,
|
||||
const void * request_json,
|
||||
|
|
Loading…
Reference in New Issue