diff options
author | Daniel Stenberg <daniel@haxx.se> | 2017-04-06 15:34:46 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2017-04-06 17:38:23 +0200 |
commit | d2bdc98754cf3c30ac2afa4cf708337cf3f129a1 (patch) | |
tree | 4fa1f50b71e80c91967bbb78ec85b67d00b5c3ea | |
parent | 2d5711dc11b25ced758ea82d3a034a9c7de32baf (diff) |
test1606: verify speedcheck
-rw-r--r-- | tests/data/Makefile.inc | 2 | ||||
-rw-r--r-- | tests/data/test1606 | 26 | ||||
-rw-r--r-- | tests/unit/Makefile.inc | 5 | ||||
-rw-r--r-- | tests/unit/unit1606.c | 90 |
4 files changed, 121 insertions, 2 deletions
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index d89d53249..fb9505146 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -165,7 +165,7 @@ test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \ test1533 test1534 test1535 test1536 \ test1540 test1541 \ \ -test1600 test1601 test1602 test1603 test1604 test1605 \ +test1600 test1601 test1602 test1603 test1604 test1605 test1606 \ \ test1700 test1701 test1702 \ \ diff --git a/tests/data/test1606 b/tests/data/test1606 new file mode 100644 index 000000000..15488d407 --- /dev/null +++ b/tests/data/test1606 @@ -0,0 +1,26 @@ +<testcase> +<info> +<keywords> +unittest +speedcheck +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> +<features> +unittest +</features> + <name> +verify speedcheck + </name> +<tool> +unit1606 +</tool> +</client> + +</testcase> diff --git a/tests/unit/Makefile.inc b/tests/unit/Makefile.inc index e7db96f50..ee01627df 100644 --- a/tests/unit/Makefile.inc +++ b/tests/unit/Makefile.inc @@ -7,7 +7,7 @@ UNITFILES = curlcheck.h \ # These are all unit test programs UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \ unit1308 unit1309 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \ - unit1600 unit1601 unit1602 unit1603 unit1604 unit1605 + unit1600 unit1601 unit1602 unit1603 unit1604 unit1605 unit1606 unit1300_SOURCES = unit1300.c $(UNITFILES) unit1300_CPPFLAGS = $(AM_CPPFLAGS) @@ -74,3 +74,6 @@ unit1604_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS) unit1605_SOURCES = unit1605.c $(UNITFILES) unit1605_CPPFLAGS = $(AM_CPPFLAGS) + +unit1606_SOURCES = unit1606.c $(UNITFILES) +unit1606_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/tests/unit/unit1606.c b/tests/unit/unit1606.c new file mode 100644 index 000000000..fdc0ec381 --- /dev/null +++ b/tests/unit/unit1606.c @@ -0,0 +1,90 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#include "curlcheck.h" + +#include "speedcheck.h" +#include "urldata.h" + +static CURLcode unit_setup(void) +{ + return CURLE_OK; +} + +static void unit_stop(void) +{ + +} + +static int runawhile(struct Curl_easy *easy, + long time_limit, + long speed_limit, + curl_off_t speed, + int dec) +{ + int counter = 1; + struct timeval now = {1, 0}; + CURLcode result; + int finaltime; + + curl_easy_setopt(easy, CURLOPT_LOW_SPEED_LIMIT, speed_limit); + curl_easy_setopt(easy, CURLOPT_LOW_SPEED_TIME, time_limit); + Curl_speedinit(easy); + + do { + /* fake the current transfer speed */ + easy->progress.current_speed = speed; + result = Curl_speedcheck(easy, now); + if(result) + break; + /* step the time */ + now.tv_sec = ++counter; + speed -= dec; + } while(counter < 100); + + finaltime = (int)(now.tv_sec - 1); + + printf("%s\n", easy->state.buffer); + return finaltime; +} + +UNITTEST_START +{ + struct Curl_easy *easy = curl_easy_init(); + + fail_unless(runawhile(easy, 41, 41, 40, 0) == 41, + "wrong low speed timeout"); + fail_unless(runawhile(easy, 21, 21, 20, 0) == 21, + "wrong low speed timeout"); + fail_unless(runawhile(easy, 60, 60, 40, 0) == 60, + "wrong log speed timeout"); + fail_unless(runawhile(easy, 50, 50, 40, 0) == 50, + "wrong log speed timeout"); + fail_unless(runawhile(easy, 40, 40, 40, 0) == 99, + "should not time out"); + fail_unless(runawhile(easy, 10, 50, 100, 2) == 36, + "bad timeout"); + + curl_easy_cleanup(easy); + + return 0; +} +UNITTEST_STOP |