summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Tests/CMakeTests/CMakeLists.txt10
-rw-r--r--Tests/CMakeTests/FileDownloadBadHashTest.cmake.in13
-rw-r--r--Tests/CMakeTests/FileDownloadTest.cmake.in229
-rw-r--r--Tests/CMakeTests/FileUploadInput.png (renamed from Tests/CMakeTests/FileDownloadInput.png)bin194 -> 194 bytes
-rw-r--r--Tests/CMakeTests/FileUploadTest.cmake.in2
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH-stdout.txt8
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH.cmake13
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/RunCMakeTest.cmake13
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS-stdout.txt2
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS.cmake3
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/bad-hostname-stdout.txt1
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/bad-hostname.cmake9
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/basic-stdout.txt1
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/basic.cmake3
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/file-without-path-stdout.txt1
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/file-without-path.cmake10
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/no-file-arg.cmake11
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/no-file-stdout.txt1
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/no-file.cmake11
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/range-stdout.txt4
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/range.cmake15
21 files changed, 107 insertions, 253 deletions
diff --git a/Tests/CMakeTests/CMakeLists.txt b/Tests/CMakeTests/CMakeLists.txt
index bd2dd7e..16e631b 100644
--- a/Tests/CMakeTests/CMakeLists.txt
+++ b/Tests/CMakeTests/CMakeLists.txt
@@ -32,16 +32,6 @@ AddCMakeTest(ProcessorCount "-DKWSYS_TEST_EXE=$<TARGET_FILE:cmsysTestsCxx>")
AddCMakeTest(PushCheckState "")
AddCMakeTest(While "")
-AddCMakeTest(FileDownload "")
-set_tests_properties(CMake.FileDownload PROPERTIES
- PASS_REGULAR_EXPRESSION "file already exists with expected MD5 sum"
- FAIL_REGULAR_EXPRESSION "Unexpected status|incorrectly interpreted"
- )
-AddCMakeTest(FileDownloadBadHash "")
-set_property(TEST CMake.FileDownloadBadHash PROPERTY
- WILL_FAIL TRUE
- )
-
AddCMakeTest(FileUpload "")
set(EndStuff_PreArgs
diff --git a/Tests/CMakeTests/FileDownloadBadHashTest.cmake.in b/Tests/CMakeTests/FileDownloadBadHashTest.cmake.in
deleted file mode 100644
index 64b45ed..0000000
--- a/Tests/CMakeTests/FileDownloadBadHashTest.cmake.in
+++ /dev/null
@@ -1,13 +0,0 @@
-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")
-
-file(DOWNLOAD
- ${url}
- ${dir}/file3.png
- TIMEOUT 2
- STATUS status
- EXPECTED_HASH SHA1=5555555555555555555555555555555555555555
- )
diff --git a/Tests/CMakeTests/FileDownloadTest.cmake.in b/Tests/CMakeTests/FileDownloadTest.cmake.in
deleted file mode 100644
index 255909d..0000000
--- a/Tests/CMakeTests/FileDownloadTest.cmake.in
+++ /dev/null
@@ -1,229 +0,0 @@
-# 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)
diff --git a/Tests/CMakeTests/FileDownloadInput.png b/Tests/CMakeTests/FileUploadInput.png
index 9ab565a..9ab565a 100644
--- a/Tests/CMakeTests/FileDownloadInput.png
+++ b/Tests/CMakeTests/FileUploadInput.png
Binary files differ
diff --git a/Tests/CMakeTests/FileUploadTest.cmake.in b/Tests/CMakeTests/FileUploadTest.cmake.in
index 0e6f080..7725041 100644
--- a/Tests/CMakeTests/FileUploadTest.cmake.in
+++ b/Tests/CMakeTests/FileUploadTest.cmake.in
@@ -9,7 +9,7 @@ endif()
file(MAKE_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/uploads")
-set(filename "@CMAKE_CURRENT_SOURCE_DIR@/FileDownloadInput.png")
+set(filename "@CMAKE_CURRENT_SOURCE_DIR@/FileUploadInput.png")
if(NOT "@CMAKE_CURRENT_BINARY_DIR@" MATCHES "^/")
set(slash /)
endif()
diff --git a/Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH-stdout.txt
new file mode 100644
index 0000000..bd1727a
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH-stdout.txt
@@ -0,0 +1,8 @@
+-- status='0;"No error"'
+-- status='0;"skipping download as file already exists with expected MD5 sum"'
+-- status='0;"skipping download as file already exists with expected MD5 hash"'
+-- status='0;"skipping download as file already exists with expected SHA1 hash"'
+-- status='0;"skipping download as file already exists with expected SHA224 hash"'
+-- status='0;"skipping download as file already exists with expected SHA256 hash"'
+-- status='0;"skipping download as file already exists with expected SHA384 hash"'
+-- status='0;"skipping download as file already exists with expected SHA512 hash"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH.cmake b/Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH.cmake
new file mode 100644
index 0000000..dc7f8ff
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/EXPECTED_HASH.cmake
@@ -0,0 +1,13 @@
+include(common.cmake)
+
+# Actually download the file and verify its hash.
+file_download(EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92)
+
+# Verify that the local file already exists with expected hash.
+file_download(EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92)
+file_download(EXPECTED_HASH MD5=dbd330d52f4dbd60115d4191904ded92)
+file_download(EXPECTED_HASH SHA1=67eee17f79d9ac557284fc0b8ad19f25723fb578)
+file_download(EXPECTED_HASH SHA224=ba283726bbb602776818b463943189afd91836cb7ee5dd6e2c7b5ae4)
+file_download(EXPECTED_HASH SHA256=cf3334b1275071e1da6e8c396ccb72cf1b2388d8c937526f3af26230affb9423)
+file_download(EXPECTED_HASH SHA384=43a5d13978d97c660db44481aee0604cb4ff6ca0775cd5c2cd68cd8000e107e507c4caf6c228941231041e282ffb8950)
+file_download(EXPECTED_HASH SHA512=6984e0909a1018030ccaa418e3be1654223cdccff0fe6adc745f9aea7e377f178be53b9fc7d54a6f81c2b62ef9ddcd38ba1978fedf4c5e7139baaf355eefad5b)
diff --git a/Tests/RunCMake/file-DOWNLOAD/RunCMakeTest.cmake b/Tests/RunCMake/file-DOWNLOAD/RunCMakeTest.cmake
index c800521..01da3fc 100644
--- a/Tests/RunCMake/file-DOWNLOAD/RunCMakeTest.cmake
+++ b/Tests/RunCMake/file-DOWNLOAD/RunCMakeTest.cmake
@@ -1,5 +1,10 @@
include(RunCMake)
+# 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})
+
run_cmake(hash-mismatch)
run_cmake(unused-argument)
run_cmake(httpheader-not-set)
@@ -8,3 +13,11 @@ run_cmake(tls-cainfo-not-set)
run_cmake(tls-verify-not-set)
run_cmake(pass-not-set)
run_cmake(no-save-hash)
+
+run_cmake(bad-hostname)
+run_cmake(basic)
+run_cmake(EXPECTED_HASH)
+run_cmake(file-without-path)
+run_cmake(no-file)
+run_cmake(range)
+run_cmake(SHOW_PROGRESS)
diff --git a/Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS-stdout.txt
new file mode 100644
index 0000000..e0a4982
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS-stdout.txt
@@ -0,0 +1,2 @@
+-- \[download 100% complete\]
+-- status='0;"No error"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS.cmake b/Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS.cmake
new file mode 100644
index 0000000..ccabced
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/SHOW_PROGRESS.cmake
@@ -0,0 +1,3 @@
+include(common.cmake)
+
+file_download(SHOW_PROGRESS)
diff --git a/Tests/RunCMake/file-DOWNLOAD/bad-hostname-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/bad-hostname-stdout.txt
new file mode 100644
index 0000000..12278e0
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/bad-hostname-stdout.txt
@@ -0,0 +1 @@
+-- status='6;"Couldn't resolve host name"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/bad-hostname.cmake b/Tests/RunCMake/file-DOWNLOAD/bad-hostname.cmake
new file mode 100644
index 0000000..d3b7a28
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/bad-hostname.cmake
@@ -0,0 +1,9 @@
+include(common.cmake)
+
+# Do not use any proxy for lookup of an invalid site.
+# DNS failure by proxy looks different than DNS failure without proxy.
+set(ENV{no_proxy} "$ENV{no_proxy},badhostname.invalid")
+
+set(url "badhostname.invalid")
+
+file_download()
diff --git a/Tests/RunCMake/file-DOWNLOAD/basic-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/basic-stdout.txt
new file mode 100644
index 0000000..701e995
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/basic-stdout.txt
@@ -0,0 +1 @@
+-- status='0;"No error"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/basic.cmake b/Tests/RunCMake/file-DOWNLOAD/basic.cmake
new file mode 100644
index 0000000..1fd931c
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/basic.cmake
@@ -0,0 +1,3 @@
+include(common.cmake)
+
+file_download()
diff --git a/Tests/RunCMake/file-DOWNLOAD/file-without-path-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/file-without-path-stdout.txt
new file mode 100644
index 0000000..701e995
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/file-without-path-stdout.txt
@@ -0,0 +1 @@
+-- status='0;"No error"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/file-without-path.cmake b/Tests/RunCMake/file-DOWNLOAD/file-without-path.cmake
new file mode 100644
index 0000000..a628423
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/file-without-path.cmake
@@ -0,0 +1,10 @@
+include(common.cmake)
+
+set(file_orig "${file}")
+cmake_path(GET file_orig FILENAME file)
+
+file_download()
+
+if(NOT EXISTS "${file_orig}")
+ message(FATAL_ERROR "file not downloaded to expected path:\n ${file_orig}")
+endif()
diff --git a/Tests/RunCMake/file-DOWNLOAD/no-file-arg.cmake b/Tests/RunCMake/file-DOWNLOAD/no-file-arg.cmake
new file mode 100644
index 0000000..6520940
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/no-file-arg.cmake
@@ -0,0 +1,11 @@
+include(common.cmake)
+
+set(file "")
+
+file_download()
+
+set(file "${CMAKE_CURRENT_BINARY_DIR}/input.png")
+
+if(NOT EXISTS "${file}")
+ message(FATAL_ERROR "file not downloaded to expected path:\n ${file}")
+endif()
diff --git a/Tests/RunCMake/file-DOWNLOAD/no-file-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/no-file-stdout.txt
new file mode 100644
index 0000000..701e995
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/no-file-stdout.txt
@@ -0,0 +1 @@
+-- status='0;"No error"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/no-file.cmake b/Tests/RunCMake/file-DOWNLOAD/no-file.cmake
new file mode 100644
index 0000000..dc234b2
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/no-file.cmake
@@ -0,0 +1,11 @@
+include(common.cmake)
+
+# Test downloading without saving to a file.
+set(file "")
+file_download()
+
+foreach(name input.png output.png TIMEOUT)
+ if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${name}")
+ message(FATAL_ERROR "file incorrectly saved to:\n ${CMAKE_CURRENT_BINARY_DIR}/${name}")
+ endif()
+endforeach()
diff --git a/Tests/RunCMake/file-DOWNLOAD/range-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/range-stdout.txt
new file mode 100644
index 0000000..e2ed7aa
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/range-stdout.txt
@@ -0,0 +1,4 @@
+-- status='0;"No error"'
+-- status='0;"No error"'
+-- status='0;"No error"'
+-- status='0;"No error"'
diff --git a/Tests/RunCMake/file-DOWNLOAD/range.cmake b/Tests/RunCMake/file-DOWNLOAD/range.cmake
new file mode 100644
index 0000000..f77bb28
--- /dev/null
+++ b/Tests/RunCMake/file-DOWNLOAD/range.cmake
@@ -0,0 +1,15 @@
+include(common.cmake)
+
+set(file ${CMAKE_CURRENT_BINARY_DIR}/output1.png)
+file_download(RANGE_START 0 EXPECTED_MD5 dbd330d52f4dbd60115d4191904ded92)
+
+set(file ${CMAKE_CURRENT_BINARY_DIR}/output2.png)
+file_download(RANGE_END 50 EXPECTED_MD5 8592e5665b839b5d23825dc84c135b61)
+
+set(file ${CMAKE_CURRENT_BINARY_DIR}/output3.png)
+file_download(RANGE_START 10 RANGE_END 50 EXPECTED_MD5 36cd52681e6c6c8fef85fcd9e86fc30d)
+
+set(file ${CMAKE_CURRENT_BINARY_DIR}/output4.png)
+file_download(RANGE_START 0 RANGE_END 50
+ RANGE_START 60 RANGE_END 100
+ EXPECTED_MD5 c5c9e74e82d493dd901eecccd659cebc)