Return to unit1303.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / unit |
1.1 ! misho 1: /*************************************************************************** ! 2: * _ _ ____ _ ! 3: * Project ___| | | | _ \| | ! 4: * / __| | | | |_) | | ! 5: * | (__| |_| | _ <| |___ ! 6: * \___|\___/|_| \_\_____| ! 7: * ! 8: * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. ! 9: * ! 10: * This software is licensed as described in the file COPYING, which ! 11: * you should have received as part of this distribution. The terms ! 12: * are also available at https://curl.haxx.se/docs/copyright.html. ! 13: * ! 14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell ! 15: * copies of the Software, and permit persons to whom the Software is ! 16: * furnished to do so, under the terms of the COPYING file. ! 17: * ! 18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY ! 19: * KIND, either express or implied. ! 20: * ! 21: ***************************************************************************/ ! 22: #include "curlcheck.h" ! 23: ! 24: #include "urldata.h" ! 25: #include "connect.h" ! 26: #include "memdebug.h" /* LAST include file */ ! 27: ! 28: static struct Curl_easy *data; ! 29: ! 30: static CURLcode unit_setup(void) ! 31: { ! 32: int res = CURLE_OK; ! 33: ! 34: global_init(CURL_GLOBAL_ALL); ! 35: data = curl_easy_init(); ! 36: if(!data) ! 37: return CURLE_OUT_OF_MEMORY; ! 38: return res; ! 39: } ! 40: ! 41: static void unit_stop(void) ! 42: { ! 43: curl_easy_cleanup(data); ! 44: curl_global_cleanup(); ! 45: } ! 46: ! 47: /* BASE is just a define to make us fool around with decently large number so ! 48: that we aren't zero-based */ ! 49: #define BASE 1000000 ! 50: ! 51: /* macro to set the pretended current time */ ! 52: #define NOW(x,y) now.tv_sec = x; now.tv_usec = y ! 53: /* macro to set the millisecond based timeouts to use */ ! 54: #define TIMEOUTS(x,y) data->set.timeout = x; data->set.connecttimeout = y ! 55: ! 56: /* ! 57: * To test: ! 58: * ! 59: * 00/10/01/11 timeouts set ! 60: * 0/1 during connect ! 61: * T various values on the timeouts ! 62: * N various values of now ! 63: */ ! 64: ! 65: struct timetest { ! 66: int now_s; ! 67: int now_us; ! 68: int timeout_ms; ! 69: int connecttimeout_ms; ! 70: bool connecting; ! 71: timediff_t result; ! 72: const char *comment; ! 73: }; ! 74: ! 75: UNITTEST_START ! 76: { ! 77: struct curltime now; ! 78: unsigned int i; ! 79: ! 80: const struct timetest run[] = { ! 81: /* both timeouts set, not connecting */ ! 82: {BASE + 4, 0, 10000, 8000, FALSE, 6000, "6 seconds should be left"}, ! 83: {BASE + 4, 990000, 10000, 8000, FALSE, 5010, "5010 ms should be left"}, ! 84: {BASE + 10, 0, 10000, 8000, FALSE, -1, "timeout is -1, expired"}, ! 85: {BASE + 12, 0, 10000, 8000, FALSE, -2000, "-2000, overdue 2 seconds"}, ! 86: ! 87: /* both timeouts set, connecting */ ! 88: {BASE + 4, 0, 10000, 8000, TRUE, 4000, "4 seconds should be left"}, ! 89: {BASE + 4, 990000, 10000, 8000, TRUE, 3010, "3010 ms should be left"}, ! 90: {BASE + 8, 0, 10000, 8000, TRUE, -1, "timeout is -1, expired"}, ! 91: {BASE + 10, 0, 10000, 8000, TRUE, -2000, "-2000, overdue 2 seconds"}, ! 92: ! 93: /* no connect timeout set, not connecting */ ! 94: {BASE + 4, 0, 10000, 0, FALSE, 6000, "6 seconds should be left"}, ! 95: {BASE + 4, 990000, 10000, 0, FALSE, 5010, "5010 ms should be left"}, ! 96: {BASE + 10, 0, 10000, 0, FALSE, -1, "timeout is -1, expired"}, ! 97: {BASE + 12, 0, 10000, 0, FALSE, -2000, "-2000, overdue 2 seconds"}, ! 98: ! 99: /* no connect timeout set, connecting */ ! 100: {BASE + 4, 0, 10000, 0, FALSE, 6000, "6 seconds should be left"}, ! 101: {BASE + 4, 990000, 10000, 0, FALSE, 5010, "5010 ms should be left"}, ! 102: {BASE + 10, 0, 10000, 0, FALSE, -1, "timeout is -1, expired"}, ! 103: {BASE + 12, 0, 10000, 0, FALSE, -2000, "-2000, overdue 2 seconds"}, ! 104: ! 105: /* only connect timeout set, not connecting */ ! 106: {BASE + 4, 0, 0, 10000, FALSE, 0, "no timeout active"}, ! 107: {BASE + 4, 990000, 0, 10000, FALSE, 0, "no timeout active"}, ! 108: {BASE + 10, 0, 0, 10000, FALSE, 0, "no timeout active"}, ! 109: {BASE + 12, 0, 0, 10000, FALSE, 0, "no timeout active"}, ! 110: ! 111: /* only connect timeout set, connecting */ ! 112: {BASE + 4, 0, 0, 10000, TRUE, 6000, "6 seconds should be left"}, ! 113: {BASE + 4, 990000, 0, 10000, TRUE, 5010, "5010 ms should be left"}, ! 114: {BASE + 10, 0, 0, 10000, TRUE, -1, "timeout is -1, expired"}, ! 115: {BASE + 12, 0, 0, 10000, TRUE, -2000, "-2000, overdue 2 seconds"}, ! 116: ! 117: /* no timeout set, not connecting */ ! 118: {BASE + 4, 0, 0, 0, FALSE, 0, "no timeout active"}, ! 119: {BASE + 4, 990000, 0, 0, FALSE, 0, "no timeout active"}, ! 120: {BASE + 10, 0, 0, 0, FALSE, 0, "no timeout active"}, ! 121: {BASE + 12, 0, 0, 0, FALSE, 0, "no timeout active"}, ! 122: ! 123: /* no timeout set, connecting */ ! 124: {BASE + 4, 0, 0, 0, TRUE, 296000, "no timeout active"}, ! 125: {BASE + 4, 990000, 0, 0, TRUE, 295010, "no timeout active"}, ! 126: {BASE + 10, 0, 0, 0, TRUE, 290000, "no timeout active"}, ! 127: {BASE + 12, 0, 0, 0, TRUE, 288000, "no timeout active"}, ! 128: ! 129: /* both timeouts set, connecting, connect timeout the longer one */ ! 130: {BASE + 4, 0, 10000, 12000, TRUE, 6000, "6 seconds should be left"}, ! 131: ! 132: }; ! 133: ! 134: /* this is the pretended start time of the transfer */ ! 135: data->progress.t_startsingle.tv_sec = BASE; ! 136: data->progress.t_startsingle.tv_usec = 0; ! 137: data->progress.t_startop.tv_sec = BASE; ! 138: data->progress.t_startop.tv_usec = 0; ! 139: ! 140: for(i = 0; i < sizeof(run)/sizeof(run[0]); i++) { ! 141: timediff_t timeout; ! 142: NOW(run[i].now_s, run[i].now_us); ! 143: TIMEOUTS(run[i].timeout_ms, run[i].connecttimeout_ms); ! 144: timeout = Curl_timeleft(data, &now, run[i].connecting); ! 145: if(timeout != run[i].result) ! 146: fail(run[i].comment); ! 147: } ! 148: } ! 149: UNITTEST_STOP