Annotation of embedaddon/curl/tests/unit/unit1303.c, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>