Mesa (main): util: Convert cache test to use gtest
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Dec 11 08:47:33 UTC 2021
Module: Mesa
Branch: main
Commit: 51351760c27207d3c49b4cea0984bfd2949b1577
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=51351760c27207d3c49b4cea0984bfd2949b1577
Author: Caio Oliveira <caio.oliveira at intel.com>
Date: Fri Dec 3 13:34:08 2021 -0800
util: Convert cache test to use gtest
Replace a bunch of helper functions for checking results with ones
from GTest.
Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14054>
---
src/util/meson.build | 7 +-
src/util/tests/cache/meson.build | 34 ---
.../tests/{cache/cache_test.c => cache_test.cpp} | 231 +++++++--------------
3 files changed, 80 insertions(+), 192 deletions(-)
diff --git a/src/util/meson.build b/src/util/meson.build
index 8a3cb548554..fe46352ce16 100644
--- a/src/util/meson.build
+++ b/src/util/meson.build
@@ -354,6 +354,12 @@ if with_tests
)
endif
+ if with_shader_cache
+ files_util_tests += files(
+ 'tests/cache_test.cpp',
+ )
+ endif
+
test(
'util_tests',
executable(
@@ -393,7 +399,6 @@ if with_tests
env: ['BUILD_FULL_PATH='+process_test_exe_full_path]
)
- subdir('tests/cache')
subdir('tests/hash_table')
subdir('tests/vma')
subdir('tests/format')
diff --git a/src/util/tests/cache/meson.build b/src/util/tests/cache/meson.build
deleted file mode 100644
index 2d9a6676cad..00000000000
--- a/src/util/tests/cache/meson.build
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright © 2017 Intel Corporation
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-if with_shader_cache
- test(
- 'cache',
- executable(
- 'cache_test',
- 'cache_test.c',
- c_args : [c_msvc_compat_args, no_override_init_args],
- gnu_symbol_visibility : 'hidden',
- include_directories : [inc_include, inc_src],
- dependencies : [dep_clock, dep_thread, idep_mesautil],
- ),
- suite : ['util'],
- )
-endif
diff --git a/src/util/tests/cache/cache_test.c b/src/util/tests/cache_test.cpp
similarity index 70%
rename from src/util/tests/cache/cache_test.c
rename to src/util/tests/cache_test.cpp
index 2cb2c9a9248..ba8a4f0eced 100644
--- a/src/util/tests/cache/cache_test.c
+++ b/src/util/tests/cache_test.cpp
@@ -23,6 +23,8 @@
/* A collection of unit tests for cache.c */
+#include <gtest/gtest.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
@@ -38,71 +40,8 @@
#include "util/mesa-sha1.h"
#include "util/disk_cache.h"
-bool error = false;
-
#ifdef ENABLE_SHADER_CACHE
-static void
-expect_true(bool result, const char *test)
-{
- if (!result) {
- fprintf(stderr, "Error: Test '%s' failed: Expected=true"
- ", Actual=false\n", test);
- error = true;
- }
-}
-static void
-expect_false(bool result, const char *test)
-{
- if (result) {
- fprintf(stderr, "Error: Test '%s' failed: Expected=false"
- ", Actual=true\n", test);
- error = true;
- }
-}
-
-static void
-expect_equal(uint64_t actual, uint64_t expected, const char *test)
-{
- if (actual != expected) {
- fprintf(stderr, "Error: Test '%s' failed: Expected=%" PRIu64
- ", Actual=%" PRIu64 "\n",
- test, expected, actual);
- error = true;
- }
-}
-
-static void
-expect_null(void *ptr, const char *test)
-{
- if (ptr != NULL) {
- fprintf(stderr, "Error: Test '%s' failed: Result=%p, but expected NULL.\n",
- test, ptr);
- error = true;
- }
-}
-
-static void
-expect_non_null(void *ptr, const char *test)
-{
- if (ptr == NULL) {
- fprintf(stderr, "Error: Test '%s' failed: Result=NULL, but expected something else.\n",
- test);
- error = true;
- }
-}
-
-static void
-expect_equal_str(const char *actual, const char *expected, const char *test)
-{
- if (strcmp(actual, expected)) {
- fprintf(stderr, "Error: Test '%s' failed:\n\t"
- "Expected=\"%s\", Actual=\"%s\"\n",
- test, expected, actual);
- error = true;
- }
-}
-
/* Callback for nftw used in rmrf_local below.
*/
static int
@@ -153,7 +92,7 @@ check_directories_created(const char *cache_dir)
}
}
- expect_true(sub_dirs_created, "create sub dirs");
+ EXPECT_TRUE(sub_dirs_created) << "create sub dirs";
}
static bool
@@ -178,7 +117,7 @@ cache_exists(struct disk_cache *cache)
char data[] = "some test data";
if (!cache)
- return NULL;
+ return false;
disk_cache_compute_key(cache, data, sizeof(data), key);
disk_cache_put(cache, key, data, sizeof(data), NULL);
@@ -202,7 +141,7 @@ test_disk_cache_create(const char *cache_dir_name)
*/
setenv("MESA_GLSL_CACHE_DISABLE", "true", 1);
cache = disk_cache_create("test", "make_check", 0);
- expect_null(cache, "disk_cache_create with MESA_GLSL_CACHE_DISABLE set");
+ EXPECT_EQ(cache, nullptr) << "disk_cache_create with MESA_GLSL_CACHE_DISABLE set";
unsetenv("MESA_GLSL_CACHE_DISABLE");
@@ -212,8 +151,9 @@ test_disk_cache_create(const char *cache_dir_name)
*/
unsetenv("MESA_GLSL_CACHE_DISABLE");
cache = disk_cache_create("test", "make_check", 0);
- expect_null(cache, "disk_cache_create with MESA_GLSL_CACHE_DISABLE unset "
- " and SHADER_CACHE_DISABLE_BY_DEFAULT build option");
+ EXPECT_EQ(cache, nullptr)
+ << "disk_cache_create with MESA_GLSL_CACHE_DISABLE unset "
+ "and SHADER_CACHE_DISABLE_BY_DEFAULT build option";
/* For remaining tests, ensure that the cache is enabled. */
setenv("MESA_GLSL_CACHE_DISABLE", "false", 1);
@@ -226,7 +166,7 @@ test_disk_cache_create(const char *cache_dir_name)
unsetenv("XDG_CACHE_HOME");
cache = disk_cache_create("test", "make_check", 0);
- expect_non_null(cache, "disk_cache_create with no environment variables");
+ EXPECT_NE(cache, nullptr) << "disk_cache_create with no environment variables";
disk_cache_destroy(cache);
@@ -234,26 +174,25 @@ test_disk_cache_create(const char *cache_dir_name)
/* Android doesn't try writing to disk (just calls the cache callbacks), so
* the directory tests below don't apply.
*/
- exit(error ? 1 : 0);
+ return;
#endif
/* Test with XDG_CACHE_HOME set */
setenv("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", 1);
cache = disk_cache_create("test", "make_check", 0);
- expect_false(cache_exists(cache), "disk_cache_create with XDG_CACHE_HOME set "
- "with a non-existing parent directory");
+ EXPECT_FALSE(cache_exists(cache))
+ << "disk_cache_create with XDG_CACHE_HOME set with a non-existing parent directory";
err = mkdir(CACHE_TEST_TMP, 0755);
if (err != 0) {
fprintf(stderr, "Error creating %s: %s\n", CACHE_TEST_TMP, strerror(errno));
- error = true;
- return;
+ GTEST_FAIL();
}
disk_cache_destroy(cache);
cache = disk_cache_create("test", "make_check", 0);
- expect_true(cache_exists(cache), "disk_cache_create with XDG_CACHE_HOME "
- "set");
+ EXPECT_TRUE(cache_exists(cache))
+ << "disk_cache_create with XDG_CACHE_HOME set";
char *path;
asprintf(&path, "%s%s", CACHE_TEST_TMP "/xdg-cache-home/", cache_dir_name);
@@ -264,24 +203,22 @@ test_disk_cache_create(const char *cache_dir_name)
/* Test with MESA_GLSL_CACHE_DIR set */
err = rmrf_local(CACHE_TEST_TMP);
- expect_equal(err, 0, "Removing " CACHE_TEST_TMP);
+ EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP;
setenv("MESA_GLSL_CACHE_DIR", CACHE_TEST_TMP "/mesa-glsl-cache-dir", 1);
cache = disk_cache_create("test", "make_check", 0);
- expect_false(cache_exists(cache), "disk_cache_create with MESA_GLSL_CACHE_DIR"
- " set with a non-existing parent directory");
+ EXPECT_FALSE(cache_exists(cache))
+ << "disk_cache_create with MESA_GLSL_CACHE_DIR set with a non-existing parent directory";
err = mkdir(CACHE_TEST_TMP, 0755);
if (err != 0) {
fprintf(stderr, "Error creating %s: %s\n", CACHE_TEST_TMP, strerror(errno));
- error = true;
- return;
+ GTEST_FAIL();
}
disk_cache_destroy(cache);
cache = disk_cache_create("test", "make_check", 0);
- expect_true(cache_exists(cache), "disk_cache_create with "
- "MESA_GLSL_CACHE_DIR set");
+ EXPECT_TRUE(cache_exists(cache)) << "disk_cache_create with MESA_GLSL_CACHE_DIR set";
asprintf(&path, "%s%s", CACHE_TEST_TMP "/mesa-glsl-cache-dir/",
cache_dir_name);
@@ -314,9 +251,9 @@ test_put_and_get(bool test_cache_size_limit)
disk_cache_compute_key(cache, blob, sizeof(blob), blob_key);
/* Ensure that disk_cache_get returns nothing before anything is added. */
- result = disk_cache_get(cache, blob_key, &size);
- expect_null(result, "disk_cache_get with non-existent item (pointer)");
- expect_equal(size, 0, "disk_cache_get with non-existent item (size)");
+ result = (char *) disk_cache_get(cache, blob_key, &size);
+ EXPECT_EQ(result, nullptr) << "disk_cache_get with non-existent item (pointer)";
+ EXPECT_EQ(size, 0) << "disk_cache_get with non-existent item (size)";
/* Simple test of put and get. */
disk_cache_put(cache, blob_key, blob, sizeof(blob), NULL);
@@ -324,9 +261,9 @@ test_put_and_get(bool test_cache_size_limit)
/* disk_cache_put() hands things off to a thread so wait for it. */
disk_cache_wait_for_idle(cache);
- result = disk_cache_get(cache, blob_key, &size);
- expect_equal_str(blob, result, "disk_cache_get of existing item (pointer)");
- expect_equal(size, sizeof(blob), "disk_cache_get of existing item (size)");
+ result = (char *) disk_cache_get(cache, blob_key, &size);
+ EXPECT_STREQ(blob, result) << "disk_cache_get of existing item (pointer)";
+ EXPECT_EQ(size, sizeof(blob)) << "disk_cache_get of existing item (size)";
free(result);
@@ -337,9 +274,9 @@ test_put_and_get(bool test_cache_size_limit)
/* disk_cache_put() hands things off to a thread so wait for it. */
disk_cache_wait_for_idle(cache);
- result = disk_cache_get(cache, string_key, &size);
- expect_equal_str(result, string, "2nd disk_cache_get of existing item (pointer)");
- expect_equal(size, sizeof(string), "2nd disk_cache_get of existing item (size)");
+ result = (char *) disk_cache_get(cache, string_key, &size);
+ EXPECT_STREQ(result, string) << "2nd disk_cache_get of existing item (pointer)";
+ EXPECT_EQ(size, sizeof(string)) << "2nd disk_cache_get of existing item (size)";
free(result);
@@ -352,7 +289,7 @@ test_put_and_get(bool test_cache_size_limit)
setenv("MESA_GLSL_CACHE_MAX_SIZE", "1K", 1);
cache = disk_cache_create("test", "make_check", 0);
- one_KB = calloc(1, 1024);
+ one_KB = (uint8_t *) calloc(1, 1024);
/* Obviously the SHA-1 hash of 1024 zero bytes isn't particularly
* interesting. But we do have want to take some special care with
@@ -381,9 +318,9 @@ test_put_and_get(bool test_cache_size_limit)
/* disk_cache_put() hands things off to a thread so wait for it. */
disk_cache_wait_for_idle(cache);
- result = disk_cache_get(cache, one_KB_key, &size);
- expect_non_null(result, "3rd disk_cache_get of existing item (pointer)");
- expect_equal(size, 1024, "3rd disk_cache_get of existing item (size)");
+ result = (char *) disk_cache_get(cache, one_KB_key, &size);
+ EXPECT_NE(result, nullptr) << "3rd disk_cache_get of existing item (pointer)";
+ EXPECT_EQ(size, 1024) << "3rd disk_cache_get of existing item (size)";
free(result);
@@ -403,9 +340,9 @@ test_put_and_get(bool test_cache_size_limit)
contains_1KB_file = true;
}
- expect_true(contains_1KB_file,
- "disk_cache_put eviction last file == MAX_SIZE (1KB)");
- expect_equal(count, 1, "disk_cache_put eviction with MAX_SIZE=1K");
+ EXPECT_TRUE(contains_1KB_file)
+ << "disk_cache_put eviction last file == MAX_SIZE (1KB)";
+ EXPECT_EQ(count, 1) << "disk_cache_put eviction with MAX_SIZE=1K";
/* Now increase the size to 1M, add back both items, and ensure all
* three that have been added are available via disk_cache_get.
@@ -431,10 +368,10 @@ test_put_and_get(bool test_cache_size_limit)
if (does_cache_contain(cache, one_KB_key))
count++;
- expect_equal(count, 3, "no eviction before overflow with MAX_SIZE=1M");
+ EXPECT_EQ(count, 3) << "no eviction before overflow with MAX_SIZE=1M";
/* Finally, check eviction again after adding an object of size 1M. */
- one_MB = calloc(1024, 1024);
+ one_MB = (uint8_t *) calloc(1024, 1024);
disk_cache_compute_key(cache, one_MB, 1024 * 1024, one_MB_key);
one_MB_key[0] = blob_key[0];
@@ -462,9 +399,9 @@ test_put_and_get(bool test_cache_size_limit)
contains_1MB_file = true;
}
- expect_true(contains_1MB_file,
- "disk_cache_put eviction last file == MAX_SIZE (1MB)");
- expect_equal(count, 1, "eviction after overflow with MAX_SIZE=1M");
+ EXPECT_TRUE(contains_1MB_file)
+ << "disk_cache_put eviction last file == MAX_SIZE (1MB)";
+ EXPECT_EQ(count, 1) << "eviction after overflow with MAX_SIZE=1M";
disk_cache_destroy(cache);
}
@@ -491,36 +428,36 @@ test_put_key_and_get_key(void)
/* First test that disk_cache_has_key returns false before disk_cache_put_key */
result = disk_cache_has_key(cache, key_a);
- expect_equal(result, 0, "disk_cache_has_key before key added");
+ EXPECT_EQ(result, 0) << "disk_cache_has_key before key added";
/* Then a couple of tests of disk_cache_put_key followed by disk_cache_has_key */
disk_cache_put_key(cache, key_a);
result = disk_cache_has_key(cache, key_a);
- expect_equal(result, 1, "disk_cache_has_key after key added");
+ EXPECT_EQ(result, 1) << "disk_cache_has_key after key added";
disk_cache_put_key(cache, key_b);
result = disk_cache_has_key(cache, key_b);
- expect_equal(result, 1, "2nd disk_cache_has_key after key added");
+ EXPECT_EQ(result, 1) << "2nd disk_cache_has_key after key added";
/* Test that a key with the same two bytes as an existing key
* forces an eviction.
*/
disk_cache_put_key(cache, key_a_collide);
result = disk_cache_has_key(cache, key_a_collide);
- expect_equal(result, 1, "put_key of a colliding key lands in the cache");
+ EXPECT_EQ(result, 1) << "put_key of a colliding key lands in the cache";
result = disk_cache_has_key(cache, key_a);
- expect_equal(result, 0, "put_key of a colliding key evicts from the cache");
+ EXPECT_EQ(result, 0) << "put_key of a colliding key evicts from the cache";
/* And finally test that we can re-add the original key to re-evict
* the colliding key.
*/
disk_cache_put_key(cache, key_a);
result = disk_cache_has_key(cache, key_a);
- expect_equal(result, 1, "put_key of original key lands again");
+ EXPECT_EQ(result, 1) << "put_key of original key lands again";
result = disk_cache_has_key(cache, key_a_collide);
- expect_equal(result, 0, "put_key of orginal key evicts the colliding key");
+ EXPECT_EQ(result, 0) << "put_key of orginal key evicts the colliding key";
disk_cache_destroy(cache);
}
@@ -551,13 +488,13 @@ test_put_and_get_between_instances()
disk_cache_compute_key(cache1, blob, sizeof(blob), blob_key);
/* Ensure that disk_cache_get returns nothing before anything is added. */
- result = disk_cache_get(cache1, blob_key, &size);
- expect_null(result, "disk_cache_get(cache1) with non-existent item (pointer)");
- expect_equal(size, 0, "disk_cache_get(cach1) with non-existent item (size)");
+ result = (char *) disk_cache_get(cache1, blob_key, &size);
+ EXPECT_EQ(result, nullptr) << "disk_cache_get(cache1) with non-existent item (pointer)";
+ EXPECT_EQ(size, 0) << "disk_cache_get(cach1) with non-existent item (size)";
- result = disk_cache_get(cache2, blob_key, &size);
- expect_null(result, "disk_cache_get(cache2) with non-existent item (pointer)");
- expect_equal(size, 0, "disk_cache_get(cache2) with non-existent item (size)");
+ result = (char *) disk_cache_get(cache2, blob_key, &size);
+ EXPECT_EQ(result, nullptr) << "disk_cache_get(cache2) with non-existent item (pointer)";
+ EXPECT_EQ(size, 0) << "disk_cache_get(cache2) with non-existent item (size)";
/* Simple test of put and get. */
disk_cache_put(cache1, blob_key, blob, sizeof(blob), NULL);
@@ -565,9 +502,9 @@ test_put_and_get_between_instances()
/* disk_cache_put() hands things off to a thread so wait for it. */
disk_cache_wait_for_idle(cache1);
- result = disk_cache_get(cache2, blob_key, &size);
- expect_equal_str(blob, result, "disk_cache_get(cache2) of existing item (pointer)");
- expect_equal(size, sizeof(blob), "disk_cache_get of(cache2) existing item (size)");
+ result = (char *) disk_cache_get(cache2, blob_key, &size);
+ EXPECT_STREQ(blob, result) << "disk_cache_get(cache2) of existing item (pointer)";
+ EXPECT_EQ(size, sizeof(blob)) << "disk_cache_get of(cache2) existing item (size)";
free(result);
@@ -578,9 +515,9 @@ test_put_and_get_between_instances()
/* disk_cache_put() hands things off to a thread so wait for it. */
disk_cache_wait_for_idle(cache2);
- result = disk_cache_get(cache1, string_key, &size);
- expect_equal_str(result, string, "2nd disk_cache_get(cache1) of existing item (pointer)");
- expect_equal(size, sizeof(string), "2nd disk_cache_get(cache1) of existing item (size)");
+ result = (char *) disk_cache_get(cache1, string_key, &size);
+ EXPECT_STREQ(result, string) << "2nd disk_cache_get(cache1) of existing item (pointer)";
+ EXPECT_EQ(size, sizeof(string)) << "2nd disk_cache_get(cache1) of existing item (size)";
free(result);
@@ -589,32 +526,27 @@ test_put_and_get_between_instances()
}
#endif /* ENABLE_SHADER_CACHE */
-static void
-test_multi_file_cache(void)
+TEST(Cache, MultiFile)
{
- int err;
-
- printf("Test multi file disk cache - Start\n");
-
+#ifndef ENABLE_SHADER_CACHE
+ GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined.";
+#else
test_disk_cache_create(CACHE_DIR_NAME);
test_put_and_get(true);
test_put_key_and_get_key();
- printf("Test multi file disk cache - End\n");
-
- err = rmrf_local(CACHE_TEST_TMP);
- expect_equal(err, 0, "Removing " CACHE_TEST_TMP " again");
+ int err = rmrf_local(CACHE_TEST_TMP);
+ EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again";
+#endif
}
-static void
-test_single_file_cache(void)
+TEST(Cache, SingleFile)
{
- int err;
-
- printf("Test single file disk cache - Start\n");
-
+#ifndef ENABLE_SHADER_CACHE
+ GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined.";
+#else
setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1);
test_disk_cache_create(CACHE_DIR_NAME_SF);
@@ -630,22 +562,7 @@ test_single_file_cache(void)
setenv("MESA_DISK_CACHE_SINGLE_FILE", "false", 1);
- printf("Test single file disk cache - End\n");
-
- err = rmrf_local(CACHE_TEST_TMP);
- expect_equal(err, 0, "Removing " CACHE_TEST_TMP " again");
-}
-
-int
-main(void)
-{
-#ifdef ENABLE_SHADER_CACHE
-
- test_multi_file_cache();
-
- test_single_file_cache();
-
-#endif /* ENABLE_SHADER_CACHE */
-
- return error ? 1 : 0;
+ int err = rmrf_local(CACHE_TEST_TMP);
+ EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again";
+#endif
}
More information about the mesa-commit
mailing list