Annotation of embedaddon/curl/tests/unit/unit1606.c, revision 1.1
1.1 ! misho 1: /***************************************************************************
! 2: * _ _ ____ _
! 3: * Project ___| | | | _ \| |
! 4: * / __| | | | |_) | |
! 5: * | (__| |_| | _ <| |___
! 6: * \___|\___/|_| \_\_____|
! 7: *
! 8: * Copyright (C) 1998 - 2017, 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 "speedcheck.h"
! 25: #include "urldata.h"
! 26:
! 27: static CURL *easy;
! 28:
! 29: static CURLcode unit_setup(void)
! 30: {
! 31: int res = CURLE_OK;
! 32:
! 33: global_init(CURL_GLOBAL_ALL);
! 34: easy = curl_easy_init();
! 35: if(!easy)
! 36: return CURLE_OUT_OF_MEMORY;
! 37: return res;
! 38: }
! 39:
! 40: static void unit_stop(void)
! 41: {
! 42: curl_easy_cleanup(easy);
! 43: curl_global_cleanup();
! 44: }
! 45:
! 46: static int runawhile(long time_limit,
! 47: long speed_limit,
! 48: curl_off_t speed,
! 49: int dec)
! 50: {
! 51: int counter = 1;
! 52: struct curltime now = {1, 0};
! 53: CURLcode result;
! 54: int finaltime;
! 55:
! 56: curl_easy_setopt(easy, CURLOPT_LOW_SPEED_LIMIT, speed_limit);
! 57: curl_easy_setopt(easy, CURLOPT_LOW_SPEED_TIME, time_limit);
! 58: Curl_speedinit(easy);
! 59:
! 60: do {
! 61: /* fake the current transfer speed */
! 62: easy->progress.current_speed = speed;
! 63: result = Curl_speedcheck(easy, now);
! 64: if(result)
! 65: break;
! 66: /* step the time */
! 67: now.tv_sec = ++counter;
! 68: speed -= dec;
! 69: } while(counter < 100);
! 70:
! 71: finaltime = (int)(now.tv_sec - 1);
! 72:
! 73: return finaltime;
! 74: }
! 75:
! 76: UNITTEST_START
! 77: fail_unless(runawhile(41, 41, 40, 0) == 41,
! 78: "wrong low speed timeout");
! 79: fail_unless(runawhile(21, 21, 20, 0) == 21,
! 80: "wrong low speed timeout");
! 81: fail_unless(runawhile(60, 60, 40, 0) == 60,
! 82: "wrong log speed timeout");
! 83: fail_unless(runawhile(50, 50, 40, 0) == 50,
! 84: "wrong log speed timeout");
! 85: fail_unless(runawhile(40, 40, 40, 0) == 99,
! 86: "should not time out");
! 87: fail_unless(runawhile(10, 50, 100, 2) == 36,
! 88: "bad timeout");
! 89: UNITTEST_STOP
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>