From 0029b2f0423b4a89e7e5ba79b3359868ef6ad0ba Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 4 Jan 2011 23:10:45 +0100 Subject: [PATCH] unittest: 1303 tests Curl_timeleft I came up with 33 different ways to call it and verify that it returns the correct return code. --- tests/data/Makefile.am | 3 +- tests/data/test1303 | 26 +++++++++ tests/unit/Makefile.inc | 3 +- tests/unit/unit1303.c | 122 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 tests/data/test1303 create mode 100644 tests/unit/unit1303.c diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index e5e920681..701b32415 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -68,7 +68,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test1108 test1109 test1110 test1111 test1112 test129 test567 test568 \ test569 test570 test571 test572 test804 test805 test806 test807 test573 \ test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \ - test1203 test1117 test1118 test1119 test1120 test1300 test1301 test1302 + test1203 test1117 test1118 test1119 test1120 test1300 test1301 test1302 \ + test1303 filecheck: @mkdir test-place; \ diff --git a/tests/data/test1303 b/tests/data/test1303 new file mode 100644 index 000000000..925b47e15 --- /dev/null +++ b/tests/data/test1303 @@ -0,0 +1,26 @@ + + + +unittest +Curl_timeleft + + + +# +# Client-side + + +none + + +unittest + + +Curl_timeleft unit tests + + +unit1303 + + + + diff --git a/tests/unit/Makefile.inc b/tests/unit/Makefile.inc index e56279049..0db217d86 100644 --- a/tests/unit/Makefile.inc +++ b/tests/unit/Makefile.inc @@ -3,8 +3,9 @@ UNITFILES = curlcheck.h # These are all unit test programs -noinst_PROGRAMS = unit1300 unit1301 unit1302 +noinst_PROGRAMS = unit1300 unit1301 unit1302 unit1303 unit1300_SOURCES = unit1300.c $(UNITFILES) unit1301_SOURCES = unit1301.c $(UNITFILES) unit1302_SOURCES = unit1302.c $(UNITFILES) +unit1303_SOURCES = unit1303.c $(UNITFILES) diff --git a/tests/unit/unit1303.c b/tests/unit/unit1303.c new file mode 100644 index 000000000..01fdda1f9 --- /dev/null +++ b/tests/unit/unit1303.c @@ -0,0 +1,122 @@ +#include +#include "curl_config.h" +#include "setup.h" + +#include "urldata.h" +#include "connect.h" +#include "curlcheck.h" +#include "memdebug.h" /* LAST include file */ + +static struct SessionHandle *data; + +static void unit_setup( void ) +{ + data = curl_easy_init(); +} +static void unit_stop( void ) +{ + curl_easy_cleanup(data); +} + +/* BASE is just a define to make us fool around with decently large number so + that we aren't zero-based */ +#define BASE 1000000 + +/* macro to set the pretended current time */ +#define NOW(x,y) now.tv_sec = x; now.tv_usec = y +/* macro to set the millisecond based timeouts to use */ +#define TIMEOUTS(x,y) data->set.timeout = x; data->set.connecttimeout = y + +/* + * To test: + * + * 00/10/01/11 timeouts set + * 0/1 during connect + * T various values on the timeouts + * N various values of now + */ + +struct timetest { + int now_s; + int now_us; + int timeout_ms; + int connecttimeout_ms; + int connecting; + long result; + const char *comment; +}; + +UNITTEST_START + +struct timeval now; +long timeout; +unsigned int i; + +const struct timetest run[] = { + /* both timeouts set, not connecting */ + {BASE + 4, 0, 10000, 8000, FALSE, 6000, "6 seconds should be left"}, + {BASE + 4, 990000, 10000, 8000, FALSE, 5010, "5010 ms should be left"}, + {BASE + 10, 0, 10000, 8000, FALSE, -1, "timeout is -1, expired"}, + {BASE + 12, 0, 10000, 8000, FALSE, -2000, "-2000, overdue 2 seconds"}, + + /* both timeouts set, connecting */ + {BASE + 4, 0, 10000, 8000, TRUE, 4000, "4 seconds should be left"}, + {BASE + 4, 990000, 10000, 8000, TRUE, 3010, "3010 ms should be left"}, + {BASE + 8, 0, 10000, 8000, TRUE, -1, "timeout is -1, expired"}, + {BASE + 10, 0, 10000, 8000, TRUE, -2000, "-2000, overdue 2 seconds"}, + + /* no connect timeout set, not connecting */ + {BASE + 4, 0, 10000, 0, FALSE, 6000, "6 seconds should be left"}, + {BASE + 4, 990000, 10000, 0, FALSE, 5010, "5010 ms should be left"}, + {BASE + 10, 0, 10000, 0, FALSE, -1, "timeout is -1, expired"}, + {BASE + 12, 0, 10000, 0, FALSE, -2000, "-2000, overdue 2 seconds"}, + + /* no connect timeout set, connecting */ + {BASE + 4, 0, 10000, 0, FALSE, 6000, "6 seconds should be left"}, + {BASE + 4, 990000, 10000, 0, FALSE, 5010, "5010 ms should be left"}, + {BASE + 10, 0, 10000, 0, FALSE, -1, "timeout is -1, expired"}, + {BASE + 12, 0, 10000, 0, FALSE, -2000, "-2000, overdue 2 seconds"}, + + /* only connect timeout set, not connecting */ + {BASE + 4, 0, 0, 10000, FALSE, 0, "no timeout active"}, + {BASE + 4, 990000, 0, 10000, FALSE, 0, "no timeout active"}, + {BASE + 10, 0, 0, 10000, FALSE, 0, "no timeout active"}, + {BASE + 12, 0, 0, 10000, FALSE, 0, "no timeout active"}, + + /* only connect timeout set, connecting */ + {BASE + 4, 0, 0, 10000, TRUE, 6000, "6 seconds should be left"}, + {BASE + 4, 990000, 0, 10000, TRUE, 5010, "5010 ms should be left"}, + {BASE + 10, 0, 0, 10000, TRUE, -1, "timeout is -1, expired"}, + {BASE + 12, 0, 0, 10000, TRUE, -2000, "-2000, overdue 2 seconds"}, + + /* no timeout set, not connecting */ + {BASE + 4, 0, 0, 0, FALSE, 0, "no timeout active"}, + {BASE + 4, 990000, 0, 0, FALSE, 0, "no timeout active"}, + {BASE + 10, 0, 0, 0, FALSE, 0, "no timeout active"}, + {BASE + 12, 0, 0, 0, FALSE, 0, "no timeout active"}, + + /* no timeout set, connecting */ + {BASE + 4, 0, 0, 0, TRUE, 296000, "no timeout active"}, + {BASE + 4, 990000, 0, 0, TRUE, 295010, "no timeout active"}, + {BASE + 10, 0, 0, 0, TRUE, 290000, "no timeout active"}, + {BASE + 12, 0, 0, 0, TRUE, 288000, "no timeout active"}, + + /* both timeouts set, connecting, connect timeout the longer one */ + {BASE + 4, 0, 10000, 12000, TRUE, 6000, "6 seconds should be left"}, + +}; + +/* this is the pretended start time of the transfer */ +data->progress.t_startsingle.tv_sec = BASE; +data->progress.t_startsingle.tv_usec = 0; + +for(i=0; i < sizeof(run)/sizeof(run[0]); i++) { + NOW(run[i].now_s, run[i].now_us); + TIMEOUTS(run[i].timeout_ms, run[i].connecttimeout_ms); + timeout = Curl_timeleft(data, &now, run[i].connecting); + if(timeout != run[i].result) + fail(run[i].comment); +} + + +UNITTEST_STOP