summaryrefslogtreecommitdiff
path: root/Tests/CMakeTests/FileDownloadTest.cmake.in
blob: 5bd38039cbf27856cb736f5014b20dff0ae05b68 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# 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}")

message(STATUS "FileDownload:11")
file(DOWNLOAD
  badhostname.png
  ${dir}/file11.png
  TIMEOUT ${timeout}
  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()