Add a test target with sharding support to the CMake build.

Two major things going on here:
- One target is created for each file in test-data.sha1 (testdata_N),
  and the testdata target now depends on all testdata_N targets. The
  testdata build rule can now run with as many jobs as there are
  input files to speed up test data download.
- GTest sharding support has been added to the tests via a runtests
  custom build target. First, the number of processors is detected,
  and then a custom target is created for each processor (test_N).
  Once each test_N target is created, the runtests custom target
  is created, and then made to depend on each test_N target. When
  CMake is unable to detect the number of processors 10 test targets
  are created. Each custom target then sets the GTEST_SHARD_INDEX and
  GTEST_TOTAL_SHARDS environment variables, allowing GTest to handle
  sharding internally.

BUG=aomedia:76,aomedia:469

Change-Id: Ib6b7974932396fbf44b735d37155fa57561027ab
diff --git a/test/test_data_download_worker.cmake b/test/test_data_download_worker.cmake
new file mode 100644
index 0000000..d7bf99e
--- /dev/null
+++ b/test/test_data_download_worker.cmake
@@ -0,0 +1,40 @@
+##
+## Copyright (c) 2017, Alliance for Open Media. All rights reserved
+##
+## This source code is subject to the terms of the BSD 2 Clause License and
+## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+## was not distributed with this source code in the LICENSE file, you can
+## obtain it at www.aomedia.org/license/software. If the Alliance for Open
+## Media Patent License 1.0 was not distributed with this source code in the
+## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+##
+include("${AOM_ROOT}/test/test_data_util.cmake")
+
+if (NOT AOM_ROOT OR NOT AOM_CONFIG_DIR OR NOT AOM_TEST_FILE
+    OR NOT AOM_TEST_CHECKSUM)
+  message(FATAL_ERROR
+          "AOM_ROOT, AOM_CONFIG_DIR, AOM_TEST_FILE and AOM_TEST_CHECKSUM must be
+          defined.")
+endif ()
+
+set(AOM_TEST_DATA_URL
+    "https://storage.googleapis.com/downloads.webmproject.org/test_data/libvpx")
+set(AOM_TEST_DATA_PATH "$ENV{LIBAOM_TEST_DATA_PATH}")
+
+if ("${AOM_TEST_DATA_PATH}" STREQUAL "")
+  message(WARNING "Writing test data to ${AOM_CONFIG_DIR}, set "
+          "$LIBAOM_TEST_DATA_PATH in your environment to avoid this warning.")
+  set(AOM_TEST_DATA_PATH "${AOM_CONFIG_DIR}")
+endif ()
+
+if (NOT EXISTS "${AOM_TEST_DATA_PATH}")
+  file(MAKE_DIRECTORY "${AOM_TEST_DATA_PATH}")
+endif ()
+
+expand_test_file_paths("AOM_TEST_FILE" "${AOM_TEST_DATA_PATH}" "filepath")
+expand_test_file_paths("AOM_TEST_FILE" "${AOM_TEST_DATA_URL}" "url")
+
+check_file("${filepath}" "${AOM_TEST_CHECKSUM}" "needs_download")
+if (needs_download)
+  download_test_file("${url}" "${AOM_TEST_CHECKSUM}" "${filepath}")
+endif ()