| # We do not contact any real URLs, but do try a bogus one. |
| # Remove any proxy configuration that may change behavior. |
| unset(ENV{http_proxy}) |
| unset(ENV{https_proxy}) |
| |
| set(timeout 4) |
| |
| if(NOT "@CMAKE_CURRENT_SOURCE_DIR@" MATCHES "^/") |
| set(slash /) |
| endif() |
| set(url "file://${slash}@CMAKE_CURRENT_SOURCE_DIR@/FileDownloadInput.png") |
| set(dir "@CMAKE_CURRENT_BINARY_DIR@/downloads") |
| |
| # Beware Windows asynchronous file/directory removal, rename and then |
| # remove the renamed dir so we can be certain the dir isn't there when |
| # we get to the file() commands below |
| if(EXISTS "${dir}") |
| file(RENAME ${dir} "${dir}_beingRemoved") |
| file(REMOVE_RECURSE "${dir}_beingRemoved") |
| endif() |
| |
| function(__reportIfWrongStatus statusPair expectedStatusCode) |
| list(GET statusPair 0 statusCode) |
| if(NOT statusCode EQUAL expectedStatusCode) |
| message(SEND_ERROR |
| "Unexpected status: ${statusCode}, expected: ${expectedStatusCode}") |
| endif() |
| endfunction() |
| |
| message(STATUS "FileDownload:1") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file1.png |
| TIMEOUT ${timeout} |
| STATUS status |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:2") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file2.png |
| TIMEOUT ${timeout} |
| STATUS status |
| SHOW_PROGRESS |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| # Two calls in a row, exactly the same arguments. |
| # Since downloaded file should exist already for 2nd call, |
| # the 2nd call will short-circuit and return early... |
| # |
| if(EXISTS ${dir}/file3.png) |
| file(REMOVE ${dir}/file3.png) |
| endif() |
| |
| message(STATUS "FileDownload:3") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:4") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_HASH SHA1=67eee17f79d9ac557284fc0b8ad19f25723fb578 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:5") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_HASH SHA224=ba283726bbb602776818b463943189afd91836cb7ee5dd6e2c7b5ae4 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:6") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_HASH SHA256=cf3334b1275071e1da6e8c396ccb72cf1b2388d8c937526f3af26230affb9423 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:7") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_HASH SHA384=43a5d13978d97c660db44481aee0604cb4ff6ca0775cd5c2cd68cd8000e107e507c4caf6c228941231041e282ffb8950 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:8") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_HASH SHA512=6984e0909a1018030ccaa418e3be1654223cdccff0fe6adc745f9aea7e377f178be53b9fc7d54a6f81c2b62ef9ddcd38ba1978fedf4c5e7139baaf355eefad5b |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:9") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_HASH MD5=dbd330d52f4dbd60115d4191904ded92 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| |
| message(STATUS "FileDownload:10") |
| file(DOWNLOAD |
| ${url} |
| ${dir}/file3.png |
| TIMEOUT ${timeout} |
| STATUS status |
| EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92 |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| # Print status because we check its message too |
| message(STATUS "${status}") |
| |
| # do not use proxy for lookup of invalid site (DNS failure by proxy looks |
| # different than DNS failure without proxy) |
| set(ENV{no_proxy} "$ENV{no_proxy},badhostname.invalid") |
| message(STATUS "FileDownload:11") |
| file(DOWNLOAD |
| badhostname.invalid |
| ${dir}/file11.png |
| TIMEOUT 30 |
| STATUS status |
| ) |
| message(STATUS "${status}") |
| __reportIfWrongStatus("${status}" 6) # 6 corresponds to an unresolvable host name |
| |
| message(STATUS "FileDownload:12") |
| set(absFile "@CMAKE_CURRENT_BINARY_DIR@/file12.png") |
| if(EXISTS "${absFile}") |
| file(RENAME ${absFile} "${absFile}_beingRemoved") |
| file(REMOVE "${absFile}_beingRemoved") |
| endif() |
| file(DOWNLOAD |
| ${url} |
| file12.png |
| TIMEOUT ${timeout} |
| EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92 |
| STATUS status |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| if(NOT EXISTS file12.png) |
| message(SEND_ERROR "file12.png not downloaded: ${status}") |
| endif() |
| |
| message(STATUS "FileDownload:13") |
| file(DOWNLOAD |
| ${url} |
| TIMEOUT ${timeout} |
| STATUS status |
| ) |
| __reportIfWrongStatus("${status}" 0) |
| if(EXISTS TIMEOUT) |
| file(REMOVE TIMEOUT) |
| message(SEND_ERROR "TIMEOUT argument was incorrectly interpreted as a filename") |
| endif() |
| message(STATUS "${status}") |