mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-23 04:26:50 +03:00
c512b2f054
This builds a dynamic library which can cause heap allocation (malloc) faliures after a specified number of calls. This is useful to allow tesing of memory failure allocation paths within netsurf test suites. An example test for core strings test has been added which incrementaly fails alloctions allowing all error paths in initialisation to be exercised.
200 lines
5.5 KiB
Makefile
200 lines
5.5 KiB
Makefile
#
|
|
# NetSurf unit tests
|
|
|
|
TESTS := \
|
|
nsurl \
|
|
urldbtest \
|
|
nsoption \
|
|
bloom \
|
|
hashtable \
|
|
urlescape \
|
|
utils \
|
|
messages \
|
|
time \
|
|
mimesniff \
|
|
corestrings #llcache
|
|
|
|
# sources necessary to use nsurl functionality
|
|
NSURL_SOURCES := utils/nsurl/nsurl.c utils/nsurl/parse.c utils/idna.c \
|
|
utils/punycode.c
|
|
|
|
# nsurl sources
|
|
nsurl_SRCS := $(NSURL_SOURCES) utils/corestrings.c test/log.c test/nsurl.c
|
|
|
|
# url database test sources
|
|
urldbtest_SRCS := $(NSURL_SOURCES) \
|
|
utils/bloom.c utils/nsoption.c utils/corestrings.c utils/time.c \
|
|
utils/hashtable.c utils/messages.c utils/utils.c \
|
|
content/urldb.c \
|
|
test/log.c test/urldbtest.c
|
|
|
|
# low level cache sources
|
|
llcache_SRCS := content/fetch.c content/fetchers/curl.c \
|
|
content/fetchers/about.c content/fetchers/data.c \
|
|
content/fetchers/resource.c content/llcache.c \
|
|
content/urldb.c \
|
|
image/image_cache.c \
|
|
$(NSURL_SOURCES) utils/base64.c utils/corestrings.c utils/hashtable.c \
|
|
utils/messages.c utils/url.c utils/useragent.c utils/utils.c \
|
|
test/log.c test/llcache.c
|
|
|
|
# messages test sources
|
|
messages_SRCS := utils/messages.c utils/hashtable.c test/log.c test/messages.c
|
|
|
|
# nsoption test sources
|
|
nsoption_SRCS := utils/nsoption.c test/log.c test/nsoption.c
|
|
|
|
# Bloom filter test sources
|
|
bloom_SRCS := utils/bloom.c test/bloom.c
|
|
|
|
# hash table test sources
|
|
hashtable_SRCS := utils/hashtable.c test/log.c test/hashtable.c
|
|
|
|
# url escape test sources
|
|
urlescape_SRCS := utils/url.c test/log.c test/urlescape.c
|
|
|
|
# utility test sources
|
|
utils_SRCS := $(NSURL_SOURCES) utils/utils.c utils/messages.c \
|
|
utils/hashtable.c utils/corestrings.c \
|
|
test/log.c test/utils.c
|
|
|
|
# time test sources
|
|
time_SRCS := utils/time.c test/log.c test/time.c
|
|
|
|
# mimesniff test sources
|
|
mimesniff_SRCS := $(NSURL_SOURCES) utils/hashtable.c utils/corestrings.c \
|
|
utils/http/generics.c utils/http/content-type.c \
|
|
utils/http/primitives.c utils/messages.c utils/http/parameter.c \
|
|
content/mimesniff.c \
|
|
test/log.c test/mimesniff.c
|
|
|
|
# corestrings test sources
|
|
corestrings_SRCS := $(NSURL_SOURCES) utils/corestrings.c \
|
|
test/log.c test/corestrings.c
|
|
corestrings_LD := -lmalloc_fig
|
|
|
|
|
|
# Coverage builds need additional flags
|
|
COV_ROOT := build/$(HOST)-coverage
|
|
ifeq ($(MAKECMDGOALS),coverage)
|
|
COV_CFLAGS ?= -fprofile-arcs -ftest-coverage -O0
|
|
COV_CXXFLAGS ?= -fprofile-arcs -ftest-coverage -O0
|
|
COV_LDFLAGS ?= -lgcov -fprofile-arcs
|
|
TESTROOT := $(COV_ROOT)
|
|
else
|
|
COV_CFLAGS ?= -O0
|
|
COV_CXXFLAGS ?= -O0
|
|
TESTROOT := build/$(HOST)-test
|
|
endif
|
|
|
|
|
|
# Extend flags with appropriate values from pkg-config for enabled features
|
|
#
|
|
# 1: pkg-config required modules for feature
|
|
# 2: Human-readable name for the feature
|
|
define pkg_cfg_detect_lib
|
|
ifeq ($$(PKG_CONFIG),)
|
|
$$(error pkg-config is required to auto-detect feature availability)
|
|
endif
|
|
|
|
PKG_CONFIG_$(1)_EXISTS := $$(shell $$(PKG_CONFIG) --exists $(1) && echo yes)
|
|
|
|
ifeq ($$(PKG_CONFIG_$(1)_EXISTS),yes)
|
|
LIB_CFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(1))
|
|
LIB_CXXFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(1))
|
|
LIB_LDFLAGS += $$(shell $$(PKG_CONFIG) --libs $(1))
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
$$(info PKG.CNFG: $(2) ($(1)) enabled)
|
|
endif
|
|
else
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
$$(info PKG.CNFG: $(2) ($(1)) disabled)
|
|
endif
|
|
endif
|
|
endef
|
|
|
|
|
|
$(eval $(call pkg_cfg_detect_lib,check,Check))
|
|
|
|
COMMON_WARNFLAGS = -W -Wall -Wundef -Wpointer-arith -Wcast-align \
|
|
-Wwrite-strings -Wmissing-declarations -Wuninitialized
|
|
|
|
ifneq ($(CC_MAJOR),2)
|
|
COMMON_WARNFLAGS += -Wno-unused-parameter
|
|
endif
|
|
|
|
TESTCFLAGS := -std=c99 -g \
|
|
$(COMMON_WARNFLAGS) \
|
|
-D_BSD_SOURCE \
|
|
-D_POSIX_C_SOURCE=200809L \
|
|
-D_XOPEN_SOURCE=600 \
|
|
-Itest -Iinclude -Icontent/handlers -Ifrontends -I. -I.. \
|
|
-Dnsgtk \
|
|
$(shell pkg-config --cflags libcurl libparserutils libwapcaplet libdom libnsutils libutf8proc) \
|
|
$(LIB_CFLAGS) \
|
|
$(COV_CFLAGS)
|
|
|
|
TESTLDFLAGS := -L$(TESTROOT) \
|
|
$(shell pkg-config --libs libcurl libparserutils libwapcaplet libdom libnsutils libutf8proc) -lz \
|
|
$(LIB_LDFLAGS)\
|
|
$(COV_LDFLAGS)
|
|
|
|
# malloc faliure injection generator
|
|
$(TESTROOT)/libmalloc_fig.so:test/malloc_fig.c
|
|
$(CC) -shared -fPIC -I. -std=c99 $(COMMON_WARNFLAGS) $^ -o $@
|
|
|
|
# Source files for all tests being compiled
|
|
TESTSOURCES :=
|
|
|
|
GCOV ?= gcov
|
|
|
|
define gen_test_target
|
|
$$(TESTROOT)/$(1): $$(sort $$(addprefix $$(TESTROOT)/,$$(subst /,_,$$(patsubst %.c,%.o,$$(patsubst %.cpp,%.o,$$(patsubst %.m,%.o,$$(patsubst %.s,%.o,$$($(1)_SRCS))))))))
|
|
$$(VQ)echo "LINKTEST: $$@"
|
|
$$(Q)$$(CC) $$(TESTCFLAGS) $$^ -o $$@ $$($(1)_LD) $$(TESTLDFLAGS)
|
|
|
|
.PHONY:$(1)_test
|
|
|
|
$(1)_test:$$(TESTROOT)/$(1)
|
|
$$(VQ)echo "RUN TEST: $(1)"
|
|
$$(Q)LD_LIBRARY_PATH=$$(TESTROOT)/ $$(TESTROOT)/$(1)
|
|
|
|
TESTSOURCES += $$($(1)_SRCS)
|
|
|
|
endef
|
|
|
|
define compile_test_target_c
|
|
$$(TESTROOT)/$(2): $(1) $$(TESTROOT)/created
|
|
$$(VQ)echo " COMPILE: $(1)"
|
|
$$(Q)$$(RM) $$(TESTROOT)/$(2)
|
|
$$(Q)$$(CC) $$(TESTCFLAGS) -o $$(TESTROOT)/$(2) -c $(1)
|
|
|
|
endef
|
|
|
|
# Generate target for each test program and the list of objects it needs
|
|
$(eval $(foreach TST,$(TESTS), $(call gen_test_target,$(TST))))
|
|
|
|
# generate target rules for test objects
|
|
$(eval $(foreach SOURCE,$(sort $(filter %.c,$(TESTSOURCES))), \
|
|
$(call compile_test_target_c,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o)),$(subst /,_,$(SOURCE:.c=.d)))))
|
|
|
|
|
|
.PHONY:test coverage
|
|
|
|
test: $(TESTROOT)/created $(TESTROOT)/libmalloc_fig.so $(addsuffix _test,$(TESTS))
|
|
|
|
coverage: test
|
|
|
|
$(TESTROOT)/created:
|
|
$(VQ)echo " MKDIR: $(TESTROOT)"
|
|
$(Q)$(MKDIR) -p $(TESTROOT)
|
|
$(Q)$(TOUCH) $@
|
|
|
|
.PHONY: test-clean
|
|
|
|
test-clean:
|
|
$(VQ)echo " CLEAN: $(TESTROOT)"
|
|
$(VQ)echo " CLEAN: $(COV_ROOT)"
|
|
$(Q)$(RM) -r $(TESTROOT) $(COV_ROOT)
|
|
CLEANS += test-clean
|