Skip to content

Commit 06e8ee4

Browse files
committed
Add tests for the proxy library
Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
1 parent 91efa9b commit 06e8ee4

File tree

5 files changed

+89
-30
lines changed

5 files changed

+89
-30
lines changed

CMakeLists.txt

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ option(USE_TSAN "Enable ThreadSanitizer checks" OFF)
2525
option(USE_MSAN "Enable MemorySanitizer checks" OFF)
2626
option(USE_VALGRIND "Enable Valgrind instrumentation" OFF)
2727

28+
# set UMF_PROXY_LIB_BASED_ON_POOL to one of: SCALABLE or JEMALLOC
29+
set(UMF_PROXY_LIB_BASED_ON_POOL SCALABLE CACHE STRING "A UMF pool the proxy library is based on (SCALABLE or JEMALLOC)" FORCE)
30+
2831
set(KNOWN_BUILD_TYPES Release Debug RelWithDebInfo MinSizeRel)
2932
string(REPLACE ";" " " KNOWN_BUILD_TYPES_STR "${KNOWN_BUILD_TYPES}")
3033

@@ -131,9 +134,13 @@ install(
131134
EXPORT ${PROJECT_NAME}-targets)
132135

133136
if(WINDOWS)
134-
# set PATH to DLLs on Windows
135-
set(DLL_PATH_LIST "PATH=path_list_append:../bin/$<CONFIG>")
136137
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
138+
# set PATH to DLLs on Windows
139+
set(DLL_PATH_LIST "PATH=path_list_append:${PROJECT_BINARY_DIR}/bin/$<CONFIG>")
140+
# add path to the proxy lib DLL
141+
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${PROJECT_BINARY_DIR}/src/proxy_lib")
142+
# MSVC implicitly adds $<CONFIG> to the output path
143+
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${PROJECT_BINARY_DIR}/src/proxy_lib/$<CONFIG>")
137144
endif()
138145

139146
pkg_check_modules(LIBHWLOC hwloc)
@@ -161,6 +168,32 @@ if(UMF_BUILD_LIBUMF_POOL_JEMALLOC AND (LINUX OR WINDOWS))
161168
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${JEMALLOC_LIBRARY_DIRS}/../bin")
162169
endif()
163170

171+
# set UMF_PROXY_LIB_ENABLED
172+
if(LINUX OR WINDOWS)
173+
# TODO: enable the proxy library in the Debug build on Windows
174+
if(WINDOWS AND NOT (CMAKE_BUILD_TYPE STREQUAL "Release"))
175+
message(STATUS "Disabling the proxy library, because it is supported only in the Release build on Windows (CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE})")
176+
elseif(UMF_PROXY_LIB_BASED_ON_POOL STREQUAL SCALABLE)
177+
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
178+
set(UMF_PROXY_LIB_ENABLED ON)
179+
set(PROXY_LIB_USES_SCALABLE_POOL ON)
180+
set(PROXY_LIBS umf scalable_pool)
181+
else()
182+
message(STATUS "Disabling the proxy library, because UMF_PROXY_LIB_BASED_ON_POOL==SCALABLE but UMF_BUILD_LIBUMF_POOL_SCALABLE is OFF")
183+
endif()
184+
elseif(UMF_PROXY_LIB_BASED_ON_POOL STREQUAL JEMALLOC)
185+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
186+
set(UMF_PROXY_LIB_ENABLED ON)
187+
set(PROXY_LIB_USES_JEMALLOC_POOL ON)
188+
set(PROXY_LIBS umf jemalloc_pool)
189+
else()
190+
message(STATUS "Disabling the proxy library, because UMF_PROXY_LIB_BASED_ON_POOL==JEMALLOC but UMF_BUILD_LIBUMF_POOL_JEMALLOC is OFF")
191+
endif()
192+
else()
193+
message(FATAL_ERROR "Proxy library: pool manager not chosen or set to a non-supported one (see UMF_PROXY_LIB_BASED_ON_POOL)")
194+
endif()
195+
endif()
196+
164197
add_subdirectory(src)
165198

166199
if(UMF_BUILD_TESTS)

src/CMakeLists.txt

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,6 @@ if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
2626
message(STATUS "Level Zero include directory: ${LEVEL_ZERO_INCLUDE_DIRS}")
2727
endif()
2828

29-
# set UMF_PROXY_LIB_BASED_ON_POOL to one of:
30-
# - SCALABLE
31-
# - JEMALLOC
32-
set(UMF_PROXY_LIB_BASED_ON_POOL SCALABLE CACHE STRING "A UMF pool the proxy library is based on (SCALABLE or JEMALLOC)" FORCE)
33-
3429
add_subdirectory(utils)
3530

3631
set(UMF_LIBS umf_utils)
@@ -166,24 +161,6 @@ install(TARGETS umf
166161

167162
add_subdirectory(pool)
168163

169-
if(LINUX OR WINDOWS)
170-
if(UMF_PROXY_LIB_BASED_ON_POOL STREQUAL SCALABLE)
171-
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
172-
set(PROXY_LIB_USES_SCALABLE_POOL ON)
173-
set(PROXY_LIBS umf scalable_pool)
174-
add_subdirectory(proxy_lib)
175-
else()
176-
message(STATUS "Disabling the proxy library, because UMF_PROXY_LIB_BASED_ON_POOL==SCALABLE but UMF_BUILD_LIBUMF_POOL_SCALABLE is OFF")
177-
endif()
178-
elseif(UMF_PROXY_LIB_BASED_ON_POOL STREQUAL JEMALLOC)
179-
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
180-
set(PROXY_LIB_USES_JEMALLOC_POOL ON)
181-
set(PROXY_LIBS umf jemalloc_pool)
182-
add_subdirectory(proxy_lib)
183-
else()
184-
message(STATUS "Disabling the proxy library, because UMF_PROXY_LIB_BASED_ON_POOL==JEMALLOC but UMF_BUILD_LIBUMF_POOL_JEMALLOC is OFF")
185-
endif()
186-
else()
187-
message(FATAL_ERROR "Proxy library: pool manager not chosen or set to a non-supported one (see UMF_PROXY_LIB_BASED_ON_POOL)")
188-
endif()
164+
if(UMF_PROXY_LIB_ENABLED)
165+
add_subdirectory(proxy_lib)
189166
endif()

src/proxy_lib/proxy_lib.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,12 @@ size_t _msize(void *ptr) {
301301
#else
302302
size_t malloc_usable_size(void *ptr) {
303303
#endif
304+
305+
// a check to verify we are running the proxy library
306+
if (ptr == (void *)0x01) {
307+
return 0xDEADBEEF;
308+
}
309+
304310
if (!was_called_from_umfPool && Proxy_pool) {
305311
was_called_from_umfPool = 1;
306312
size_t size = umfPoolMallocUsableSize(Proxy_pool, ptr);

test/CMakeLists.txt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@ function(add_umf_test)
3737
set(LIB_DIRS ${LIB_DIRS} ${JEMALLOC_LIBRARY_DIRS})
3838
endif()
3939

40-
set(TEST_LIBS test_common
40+
set(TEST_LIBS
41+
test_common
4142
umf
43+
${ARG_LIBS}
4244
GTest::gtest_main
43-
${LIBS_OPTIONAL}
44-
${ARG_LIBS})
45+
${LIBS_OPTIONAL})
46+
4547
add_umf_executable(NAME ${TEST_TARGET_NAME} SRCS ${ARG_SRCS} LIBS ${TEST_LIBS})
4648

4749
target_link_directories(${TEST_TARGET_NAME} PRIVATE ${LIB_DIRS})
@@ -171,3 +173,15 @@ add_umf_test(NAME base_alloc_linear
171173
add_umf_test(NAME base_alloc_global
172174
SRCS ${BA_SOURCES_FOR_TEST} pools/pool_base_alloc.cpp malloc_compliance_tests.cpp
173175
LIBS umf_utils)
176+
177+
# tests for the proxy library
178+
if(UMF_PROXY_LIB_ENABLED AND UMF_BUILD_SHARED_LIBRARY)
179+
add_umf_test(NAME proxy_lib_basic
180+
SRCS test_proxy_lib.cpp
181+
LIBS umf_proxy)
182+
183+
# the memoryPool test run with the proxy library
184+
add_umf_test(NAME proxy_lib_memoryPool
185+
SRCS memoryPoolAPI.cpp malloc_compliance_tests.cpp
186+
LIBS umf_proxy)
187+
endif()

test/test_proxy_lib.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright (C) 2024 Intel Corporation
3+
*
4+
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
5+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
*/
7+
8+
#include <malloc.h>
9+
10+
#include "base.hpp"
11+
#include "test_helpers.h"
12+
13+
using umf_test::test;
14+
15+
TEST_F(test, proxyLibBasic) {
16+
17+
::free(::malloc(64));
18+
19+
// a check to verify we are running the proxy library
20+
void *ptr = (void *)0x01;
21+
#ifdef _WIN32
22+
size_t size = _msize(ptr);
23+
#elif __APPLE__
24+
size_t size = ::malloc_size(ptr);
25+
#else
26+
size_t size = ::malloc_usable_size(ptr);
27+
#endif
28+
UT_ASSERTeq(size, 0xDEADBEEF);
29+
}

0 commit comments

Comments
 (0)