tests: test loader insertion via create-instance

Change-Id: Ifb3a2aa8bfcd7619bdeca54ac8237b267daf7f27
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index b85c52f..c74c2de 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -51,7 +51,8 @@
     if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
         add_custom_target(binary-dir-symlinks ALL
             COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/run_all_tests.sh
-            COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/test_wrap_objects.sh
+            COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/run_wrap_objects_tests.sh
+            COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/run_loader_tests.sh
             COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/vkvalidatelayerdoc.sh
             VERBATIM
             )
diff --git a/tests/loader_validation_tests.cpp b/tests/loader_validation_tests.cpp
index c0f74bd..5bb5826 100644
--- a/tests/loader_validation_tests.cpp
+++ b/tests/loader_validation_tests.cpp
@@ -355,6 +355,19 @@
     ASSERT_EQ(result, VK_ERROR_LAYER_NOT_PRESENT);
 }
 
+// Used by run_loader_tests.sh to test for layer insertion.
+TEST(CreateInstance, LayerPresent)
+{
+    char const*const names[] = {"VK_LAYER_LUNARG_parameter_validation"}; // Temporary required due to MSVC bug.
+    auto const info = VK::InstanceCreateInfo().
+        enabledLayerCount(1).
+        ppEnabledLayerNames(names);
+
+    VkInstance instance = VK_NULL_HANDLE;
+    VkResult result = vkCreateInstance(info, VK_NULL_HANDLE, &instance);
+    ASSERT_EQ(result, VK_SUCCESS);
+}
+
 TEST(CreateDevice, ExtensionNotPresent)
 {
     VkInstance instance = VK_NULL_HANDLE;
diff --git a/tests/run_all_tests.sh b/tests/run_all_tests.sh
index 8a6a0db..8cf691e 100755
--- a/tests/run_all_tests.sh
+++ b/tests/run_all_tests.sh
@@ -7,7 +7,7 @@
 set -e
 
 #Verify that the loader is working
-./vk_loader_validation_tests
+./run_loader_tests.sh
 
 # Verify that validation checks in source match documentation
 ./vkvalidatelayerdoc.sh
@@ -16,6 +16,3 @@
 # catch the errors that they are supposed to by intentionally doing things
 # that are wrong
 ./vk_layer_validation_tests
-
-# Test the wrap objects layer.
-./test_wrap_objects.sh
diff --git a/tests/run_loader_tests.sh b/tests/run_loader_tests.sh
new file mode 100755
index 0000000..bbc8ede
--- /dev/null
+++ b/tests/run_loader_tests.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+pushd $(dirname "$0") > /dev/null
+
+./vk_loader_validation_tests
+
+# Check for layer insertion via CreateInstance.
+output=$(VK_LOADER_DEBUG=all \
+   GTEST_FILTER=CreateInstance.LayerPresent \
+   ./vk_loader_validation_tests 2>&1)
+
+echo "$output" | grep -q "Insert instance layer VK_LAYER_LUNARG_parameter_validation"
+ec=$?
+
+if [ $ec -eq 1 ]
+then
+   echo "CreateInstance insertion test FAILED - parameter-validation not detected in instance layers" >&2
+   exit 1
+fi
+echo "CreateInstance Insertion test PASSED"
+
+# Test the wrap objects layer.
+./run_wrap_objects_tests.sh
+
+popd > /dev/null
diff --git a/tests/test_wrap_objects.sh b/tests/run_wrap_objects_tests.sh
similarity index 94%
rename from tests/test_wrap_objects.sh
rename to tests/run_wrap_objects_tests.sh
index 2f19f3b..986f7df 100755
--- a/tests/test_wrap_objects.sh
+++ b/tests/run_wrap_objects_tests.sh
@@ -2,8 +2,6 @@
 
 pushd $(dirname "$0") > /dev/null
 
-echo "Testing wrap-objects layer..."
-
 # Check for insertion of wrap-objects layer.
 output=$(VK_LAYER_PATH=$VK_LAYER_PATH:`pwd`/layers \
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/layers \
@@ -125,12 +123,10 @@
 
 if [ $ec -eq 1 ]
 then
-   echo "TEST FAILED - wrap-objects altered the results of the layer validation tests" >&2
+   echo "Wrap-objects layer validation tests FAILED - wrap-objects altered the results of the layer validation tests" >&2
    exit 1
 fi
-echo "wrap-objects completed layer validation tests"
-
-echo "TEST PASSED"
+echo "Wrap-objects layer validation tests PASSED"
 
 popd > /dev/null