From 559aaa35771e88cd0f8a64a19f534097709e221f Mon Sep 17 00:00:00 2001 From: mrambacher Date: Fri, 30 Dec 2022 16:55:58 -0800 Subject: [PATCH] Add ability to have unit tests for ROCKSDB_PLUGINS (#11052) Summary: This is based on speedb PR [143](https://github.com/speedb-io/speedb/pull/143). This PR adds the ability to add a xxx_TESTS variable to the make or cmake files for a plugin. When set, those files will be added to the unit tests built and executed by the corresponding make system. Note that the rule for building plugin tests via make could be expanded to almost every other unit test in RocksDB. This expansion would allow for a much smaller/simpler Makefile and make it easier to add new test files to RocksDB. Pull Request resolved: https://github.com/facebook/rocksdb/pull/11052 Reviewed By: cbi42 Differential Revision: D42212269 Pulled By: ajkr fbshipit-source-id: d02668f7f4466900d63c90bb4f7962d23fcc7114 --- CMakeLists.txt | 7 +++++++ Makefile | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4f0fe09e..5fa4ea6c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -980,6 +980,12 @@ if ( ROCKSDB_PLUGINS ) plugin/${plugin}/${src} PROPERTIES COMPILE_FLAGS "${${plugin}_COMPILE_FLAGS}") endforeach() + foreach (test ${${plugin}_TESTS}) + list(APPEND PLUGIN_TESTS plugin/${plugin}/${test}) + set_source_files_properties( + plugin/${plugin}/${test} + PROPERTIES COMPILE_FLAGS "${${plugin}_COMPILE_FLAGS}") + endforeach() foreach (path ${${plugin}_INCLUDE_PATHS}) include_directories(${path}) endforeach() @@ -1471,6 +1477,7 @@ if(WITH_TESTS) utilities/ttl/ttl_test.cc utilities/util_merge_operators_test.cc utilities/write_batch_with_index/write_batch_with_index_test.cc + ${PLUGIN_TESTS} ) endif() diff --git a/Makefile b/Makefile index 06f2e32a2..407de572d 100644 --- a/Makefile +++ b/Makefile @@ -266,6 +266,7 @@ ROCKSDB_PLUGIN_EXTERNS = $(foreach p, $(ROCKSDB_PLUGIN_W_FUNCS), int $($(p)_FUNC ROCKSDB_PLUGIN_BUILTINS = $(foreach p, $(ROCKSDB_PLUGIN_W_FUNCS), {\"$(p)\"\, $($(p)_FUNC)}\,) ROCKSDB_PLUGIN_LDFLAGS = $(foreach plugin, $(ROCKSDB_PLUGINS), $($(plugin)_LDFLAGS)) ROCKSDB_PLUGIN_PKGCONFIG_REQUIRES = $(foreach plugin, $(ROCKSDB_PLUGINS), $($(plugin)_PKGCONFIG_REQUIRES)) +ROCKSDB_PLUGIN_TESTS = $(foreach p, $(ROCKSDB_PLUGINS), $(foreach test, $($(p)_TESTS), plugin/$(p)/$(test))) CXXFLAGS += $(foreach plugin, $(ROCKSDB_PLUGINS), $($(plugin)_CXXFLAGS)) PLATFORM_LDFLAGS += $(ROCKSDB_PLUGIN_LDFLAGS) @@ -647,10 +648,12 @@ STRESS_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(STRESS_LIB_SOURCES)) ALL_SOURCES = $(filter-out util/build_version.cc, $(LIB_SOURCES)) $(TEST_LIB_SOURCES) $(MOCK_LIB_SOURCES) $(GTEST_DIR)/gtest/gtest-all.cc ALL_SOURCES += $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(CACHE_BENCH_LIB_SOURCES) $(ANALYZER_LIB_SOURCES) $(STRESS_LIB_SOURCES) ALL_SOURCES += $(TEST_MAIN_SOURCES) $(TOOL_MAIN_SOURCES) $(BENCH_MAIN_SOURCES) -ALL_SOURCES += $(ROCKSDB_PLUGIN_SOURCES) +ALL_SOURCES += $(ROCKSDB_PLUGIN_SOURCES) $(ROCKSDB_PLUGIN_TESTS) +PLUGIN_TESTS = $(patsubst %.cc, %, $(notdir $(ROCKSDB_PLUGIN_TESTS))) TESTS = $(patsubst %.cc, %, $(notdir $(TEST_MAIN_SOURCES))) TESTS += $(patsubst %.c, %, $(notdir $(TEST_MAIN_SOURCES_C))) +TESTS += $(PLUGIN_TESTS) # `make check-headers` to very that each header file includes its own # dependencies @@ -702,6 +705,7 @@ NON_PARALLEL_TEST = \ env_test \ deletefile_test \ db_bloom_filter_test \ + $(PLUGIN_TESTS) \ PARALLEL_TEST = $(filter-out $(NON_PARALLEL_TEST), $(TESTS)) @@ -1355,6 +1359,14 @@ db_sanity_test: $(OBJ_DIR)/tools/db_sanity_test.o $(LIBRARY) db_repl_stress: $(OBJ_DIR)/tools/db_repl_stress.o $(LIBRARY) $(AM_LINK) +define MakeTestRule +$(notdir $(1:%.cc=%)): $(1:%.cc=$$(OBJ_DIR)/%.o) $$(TEST_LIBRARY) $$(LIBRARY) + $$(AM_LINK) +endef + +# For each PLUGIN test, create a rule to generate the test executable +$(foreach test, $(ROCKSDB_PLUGIN_TESTS), $(eval $(call MakeTestRule, $(test)))) + arena_test: $(OBJ_DIR)/memory/arena_test.o $(TEST_LIBRARY) $(LIBRARY) $(AM_LINK) -- GitLab