talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

utils_get_serverportfp_from_filename_test.c (4295B)


      1 #include "config.h"
      2 
      3 #include <stdio.h>
      4 #include <glib.h>
      5 
      6 #include "utils.h"
      7 
      8 #include "mock_prefs_common_get_use_shred.h"
      9 #include "mock_prefs_common_get_flush_metadata.h"
     10 
     11 struct td {
     12 	gchar *str;
     13 	gboolean ret;
     14 	gchar *assertmsg;
     15 	gchar *host;
     16 	gchar *port;
     17 	gchar *fp;
     18 };
     19 
     20 #define ASSERTMSG_NULLINPUT "*CRITICAL* 'str != NULL' failed*"
     21 #define ASSERTMSG_FAILED "*could not parse filename*"
     22 
     23 struct td td_null = {
     24 	NULL,
     25 	FALSE, ASSERTMSG_NULLINPUT,
     26 	NULL, NULL, NULL
     27 };
     28 struct td td_empty = {
     29 	"",
     30 	FALSE, ASSERTMSG_FAILED,
     31 	NULL, NULL, NULL
     32 };
     33 struct td td_suffixonly = {
     34 	".cert",
     35 	FALSE, ASSERTMSG_FAILED,
     36 	NULL, NULL, NULL
     37 };
     38 struct td td_hostonly = {
     39 	"foo.cert",
     40 	FALSE, ASSERTMSG_FAILED,
     41 	"foo", NULL, NULL
     42 };
     43 struct td td_short_nofp = {
     44 	"shorthost.10.cert",
     45 	TRUE, NULL,
     46 	"shorthost", "10", NULL
     47 };
     48 struct td td_short_fp = {
     49 	"shorthost.10.ab:cd:ef:gh.cert",
     50 	TRUE, NULL,
     51 	"shorthost", "10", "ab:cd:ef:gh"
     52 };
     53 struct td td_ip_nofp = {
     54 	"10.20.30.40.10.cert",
     55 	TRUE, NULL,
     56 	"10.20.30.40", "10", NULL
     57 };
     58 struct td td_ip_fp = {
     59 	"10.20.30.40.10.ab:cd:ef:gh.cert",
     60 	TRUE, NULL,
     61 	"10.20.30.40", "10", "ab:cd:ef:gh"
     62 };
     63 struct td td_long_nofp = {
     64 	"longer.host.name.10.cert",
     65 	TRUE, NULL,
     66 	"longer.host.name", "10", NULL
     67 };
     68 struct td td_long_fp = {
     69 	"longer.host.name.10.ab:cd:ef:gh.cert",
     70 	TRUE, NULL,
     71 	"longer.host.name", "10", "ab:cd:ef:gh"
     72 };
     73 struct td td_cert_starts_with_digits = {
     74 	"longer.host.name.10.20:cd:ef:gh.cert",
     75 	TRUE, NULL,
     76 	"longer.host.name", "10", "20:cd:ef:gh"
     77 };
     78 
     79 void
     80 test_utils_get_serverportfp_from_filename_nulloutput()
     81 {
     82 	if (!g_test_undefined())
     83 		return;
     84 
     85 	if (g_test_subprocess()) {
     86 		gboolean ret = get_serverportfp_from_filename("valid.host.10.ab:cd:ef:gh.cert",
     87 				NULL, NULL, NULL);
     88 		g_assert_true(ret);
     89 		return;
     90 	}
     91 
     92 	g_test_trap_subprocess(NULL, 0, 0);
     93 	g_test_trap_assert_failed();
     94 }
     95 
     96 void
     97 test_utils_get_serverportfp_from_filename(gconstpointer user_data)
     98 {
     99 	const struct td *data = (const struct td *)user_data;
    100 
    101 	if (!g_test_undefined())
    102 		return;
    103 
    104 	if (g_test_subprocess()) {
    105 		gchar *host, *port, *fp;
    106 		gboolean ret = get_serverportfp_from_filename(data->str, &host, &port, &fp);
    107 
    108 		g_assert_true(ret == data->ret);
    109 		g_assert_cmpstr(host, ==, data->host);
    110 		g_assert_cmpstr(port, ==, data->port);
    111 		g_assert_cmpstr(fp, ==, data->fp);
    112 		return;
    113 	}
    114 
    115 	g_test_trap_subprocess(NULL, 0, 0);
    116 
    117 	if (!data->ret && data->assertmsg != NULL) {
    118 		g_test_trap_assert_stderr(data->assertmsg);
    119 		g_test_trap_assert_failed();
    120 	} else {
    121 		g_test_trap_assert_passed();
    122 	}
    123 }
    124 
    125 int
    126 main(int argc, char *argv[])
    127 {
    128 	g_test_init(&argc, &argv, NULL);
    129 
    130 	g_test_add_func("/common/utils/get_serverportfp_from_filename/nulloutput",
    131 			test_utils_get_serverportfp_from_filename_nulloutput);
    132 
    133 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/null",
    134 			&td_null, test_utils_get_serverportfp_from_filename);
    135 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/empty",
    136 			&td_empty, test_utils_get_serverportfp_from_filename);
    137 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/suffixonly",
    138 			&td_suffixonly, test_utils_get_serverportfp_from_filename);
    139 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/hostonly",
    140 			&td_hostonly, test_utils_get_serverportfp_from_filename);
    141 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/short_nofp",
    142 			&td_short_nofp, test_utils_get_serverportfp_from_filename);
    143 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/short_fp",
    144 			&td_short_fp, test_utils_get_serverportfp_from_filename);
    145 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/ip_nofp",
    146 			&td_ip_nofp, test_utils_get_serverportfp_from_filename);
    147 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/ip_fp",
    148 			&td_ip_fp, test_utils_get_serverportfp_from_filename);
    149 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/long_nofp",
    150 			&td_long_nofp, test_utils_get_serverportfp_from_filename);
    151 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/long_fp",
    152 			&td_long_fp, test_utils_get_serverportfp_from_filename);
    153 	g_test_add_data_func("/common/utils/get_serverportfp_from_filename/cert_starts_with_digits",
    154 			&td_cert_starts_with_digits, test_utils_get_serverportfp_from_filename);
    155 
    156 	return g_test_run();
    157 }