blob: 255909da7189e07b1e33826285b8475956e15051 (
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
# 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}")
message(STATUS "FileDownload:14")
file(DOWNLOAD
${url}
${dir}/file14.bin
TIMEOUT ${timeout}
STATUS status
RANGE_START 0
EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92
)
__reportIfWrongStatus("${status}" 0)
message(STATUS "FileDownload:15")
file(DOWNLOAD
${url}
${dir}/file15.bin
TIMEOUT ${timeout}
STATUS status
RANGE_END 50
EXPECTED_MD5 8592e5665b839b5d23825dc84c135b61
)
__reportIfWrongStatus("${status}" 0)
message(STATUS "FileDownload:16")
file(DOWNLOAD
${url}
${dir}/file16.bin
TIMEOUT ${timeout}
STATUS status
RANGE_START 10
RANGE_END 50
EXPECTED_MD5 36cd52681e6c6c8fef85fcd9e86fc30d
)
__reportIfWrongStatus("${status}" 0)
message(STATUS "FileDownload:17")
file(DOWNLOAD
${url}
${dir}/file17.bin
TIMEOUT ${timeout}
STATUS status
RANGE_START 0
RANGE_END 50
RANGE_START 60
RANGE_END 100
EXPECTED_MD5 c5c9e74e82d493dd901eecccd659cebc
)
__reportIfWrongStatus("${status}" 0)
|