FileDownloadTest.cmake.in 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. # We do not contact any real URLs, but do try a bogus one.
  2. # Remove any proxy configuration that may change behavior.
  3. unset(ENV{http_proxy})
  4. unset(ENV{https_proxy})
  5. set(timeout 4)
  6. if(NOT "@CMAKE_CURRENT_SOURCE_DIR@" MATCHES "^/")
  7. set(slash /)
  8. endif()
  9. set(url "file://${slash}@CMAKE_CURRENT_SOURCE_DIR@/FileDownloadInput.png")
  10. set(dir "@CMAKE_CURRENT_BINARY_DIR@/downloads")
  11. # Beware Windows asynchronous file/directory removal, rename and then
  12. # remove the renamed dir so we can be certain the dir isn't there when
  13. # we get to the file() commands below
  14. if(EXISTS "${dir}")
  15. file(RENAME ${dir} "${dir}_beingRemoved")
  16. file(REMOVE_RECURSE "${dir}_beingRemoved")
  17. endif()
  18. function(__reportIfWrongStatus statusPair expectedStatusCode)
  19. list(GET statusPair 0 statusCode)
  20. if(NOT statusCode EQUAL expectedStatusCode)
  21. message(SEND_ERROR
  22. "Unexpected status: ${statusCode}, expected: ${expectedStatusCode}")
  23. endif()
  24. endfunction()
  25. message(STATUS "FileDownload:1")
  26. file(DOWNLOAD
  27. ${url}
  28. ${dir}/file1.png
  29. TIMEOUT ${timeout}
  30. STATUS status
  31. )
  32. __reportIfWrongStatus("${status}" 0)
  33. message(STATUS "FileDownload:2")
  34. file(DOWNLOAD
  35. ${url}
  36. ${dir}/file2.png
  37. TIMEOUT ${timeout}
  38. STATUS status
  39. SHOW_PROGRESS
  40. )
  41. __reportIfWrongStatus("${status}" 0)
  42. # Two calls in a row, exactly the same arguments.
  43. # Since downloaded file should exist already for 2nd call,
  44. # the 2nd call will short-circuit and return early...
  45. #
  46. if(EXISTS ${dir}/file3.png)
  47. file(REMOVE ${dir}/file3.png)
  48. endif()
  49. message(STATUS "FileDownload:3")
  50. file(DOWNLOAD
  51. ${url}
  52. ${dir}/file3.png
  53. TIMEOUT ${timeout}
  54. STATUS status
  55. EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92
  56. )
  57. __reportIfWrongStatus("${status}" 0)
  58. message(STATUS "FileDownload:4")
  59. file(DOWNLOAD
  60. ${url}
  61. ${dir}/file3.png
  62. TIMEOUT ${timeout}
  63. STATUS status
  64. EXPECTED_HASH SHA1=67eee17f79d9ac557284fc0b8ad19f25723fb578
  65. )
  66. __reportIfWrongStatus("${status}" 0)
  67. message(STATUS "FileDownload:5")
  68. file(DOWNLOAD
  69. ${url}
  70. ${dir}/file3.png
  71. TIMEOUT ${timeout}
  72. STATUS status
  73. EXPECTED_HASH SHA224=ba283726bbb602776818b463943189afd91836cb7ee5dd6e2c7b5ae4
  74. )
  75. __reportIfWrongStatus("${status}" 0)
  76. message(STATUS "FileDownload:6")
  77. file(DOWNLOAD
  78. ${url}
  79. ${dir}/file3.png
  80. TIMEOUT ${timeout}
  81. STATUS status
  82. EXPECTED_HASH SHA256=cf3334b1275071e1da6e8c396ccb72cf1b2388d8c937526f3af26230affb9423
  83. )
  84. __reportIfWrongStatus("${status}" 0)
  85. message(STATUS "FileDownload:7")
  86. file(DOWNLOAD
  87. ${url}
  88. ${dir}/file3.png
  89. TIMEOUT ${timeout}
  90. STATUS status
  91. EXPECTED_HASH SHA384=43a5d13978d97c660db44481aee0604cb4ff6ca0775cd5c2cd68cd8000e107e507c4caf6c228941231041e282ffb8950
  92. )
  93. __reportIfWrongStatus("${status}" 0)
  94. message(STATUS "FileDownload:8")
  95. file(DOWNLOAD
  96. ${url}
  97. ${dir}/file3.png
  98. TIMEOUT ${timeout}
  99. STATUS status
  100. EXPECTED_HASH SHA512=6984e0909a1018030ccaa418e3be1654223cdccff0fe6adc745f9aea7e377f178be53b9fc7d54a6f81c2b62ef9ddcd38ba1978fedf4c5e7139baaf355eefad5b
  101. )
  102. __reportIfWrongStatus("${status}" 0)
  103. message(STATUS "FileDownload:9")
  104. file(DOWNLOAD
  105. ${url}
  106. ${dir}/file3.png
  107. TIMEOUT ${timeout}
  108. STATUS status
  109. EXPECTED_HASH MD5=dbd330d52f4dbd60115d4191904ded92
  110. )
  111. __reportIfWrongStatus("${status}" 0)
  112. message(STATUS "FileDownload:10")
  113. file(DOWNLOAD
  114. ${url}
  115. ${dir}/file3.png
  116. TIMEOUT ${timeout}
  117. STATUS status
  118. EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92
  119. )
  120. __reportIfWrongStatus("${status}" 0)
  121. # Print status because we check its message too
  122. message(STATUS "${status}")
  123. message(STATUS "FileDownload:11")
  124. file(DOWNLOAD
  125. badhostname.invalid
  126. ${dir}/file11.png
  127. TIMEOUT 30
  128. STATUS status
  129. )
  130. message(STATUS "${status}")
  131. __reportIfWrongStatus("${status}" 6) # 6 corresponds to an unresolvable host name
  132. message(STATUS "FileDownload:12")
  133. set(absFile "@CMAKE_CURRENT_BINARY_DIR@/file12.png")
  134. if(EXISTS "${absFile}")
  135. file(RENAME ${absFile} "${absFile}_beingRemoved")
  136. file(REMOVE "${absFile}_beingRemoved")
  137. endif()
  138. file(DOWNLOAD
  139. ${url}
  140. file12.png
  141. TIMEOUT ${timeout}
  142. EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92
  143. STATUS status
  144. )
  145. __reportIfWrongStatus("${status}" 0)
  146. if(NOT EXISTS file12.png)
  147. message(SEND_ERROR "file12.png not downloaded: ${status}")
  148. endif()
  149. message(STATUS "FileDownload:13")
  150. file(DOWNLOAD
  151. ${url}
  152. TIMEOUT ${timeout}
  153. STATUS status
  154. )
  155. __reportIfWrongStatus("${status}" 0)
  156. if(EXISTS TIMEOUT)
  157. file(REMOVE TIMEOUT)
  158. message(SEND_ERROR "TIMEOUT argument was incorrectly interpreted as a filename")
  159. endif()
  160. message(STATUS "${status}")