# Copyright (C) 2007-2015 Red Hat, Inc. All rights reserved.
#
# This file is part of LVM2.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

#TEST_OPTS=--verbose --debug
SHELL_PATH ?= $(SHELL)
RM ?= rm -f

subdir = $(shell pwd|sed 's,.*/,,')

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
abs_srcdir = @abs_srcdir@
abs_builddir = @abs_builddir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
datarootdir = @datarootdir@

LVM_TEST_RESULTS ?= results

SUBDIRS = api unit
SOURCES = lib/not.c lib/harness.c
CXXSOURCES = lib/runner.cpp
CXXFLAGS += $(EXTRA_EXEC_CFLAGS)

include $(top_builddir)/make.tmpl

T ?= .
S ?= @ # never match anything by default
VERBOSE ?= 0
ALL := $(shell find -L $(srcdir) \( -path \*/shell/\*.sh -or -path \*/api/\*.sh \) | sort)
comma = ,
RUN := $(shell find -L $(srcdir) -regextype posix-egrep \( -path \*/shell/\*.sh -or -path \*/api/\*.sh \) -and -regex "$(srcdir)/.*($(subst $(comma),|,$(T))).*" -and -not -regex "$(srcdir)/.*($(subst $(comma),|,$(S))).*" | sort)
RUN_BASE = $(subst $(srcdir)/,,$(RUN))

ifeq ("@BUILD_LVMETAD@", "yes")
LVMETAD_RUN_BASE = $(RUN_BASE)
LVMETAD_NDEV_FLAVOUR = ,ndev-lvmetad
LVMETAD_UDEV_FLAVOUR = ,udev-lvmetad
endif

ifeq ("@BUILD_LVMPOLLD@", "yes")
LVMPOLLD_RUN_BASE = $(RUN_BASE)
LVMPOLLD_NDEV_FLAVOUR = ,ndev-lvmpolld,ndev-cluster-lvmpolld,ndev-lvmetad-lvmpolld
LVMPOLLD_UDEV_FLAVOUR = ,udev-lvmpolld,udev-cluster-lvmpolld,udev-lvmetad-lvmpolld
endif

# Shell quote;
SHELL_PATH_SQ := $(subst ','\'',$(SHELL_PATH))

ifeq ("@UDEV_SYNC@", "yes")
dm_udev_synchronisation = 1
endif

all: .tests-stamp

help:
	@echo -e "\nAvailable targets:"
	@echo "  all			Default target, run check."
	@echo "  check			Run all tests."
	@echo "  check_system		Run all tests using udev."
	@echo "  check_local		Run tests without clvmd and lvmetad."
	@echo "  check_cluster		Run tests with cluster daemon."
	@echo "  check_lvmetad		Run tests with lvmetad daemon."
	@echo "  check_lvmpolld         Run tests with lvmpolld daemon."
	@echo "  check_lvmlockd_sanlock Run tests with lvmlockd and sanlock."
	@echo "  check_lvmlockd_dlm     Run tests with lvmlockd and dlm."
	@echo "  clean			Clean dir."
	@echo "  help			Display callable targets."
	@echo -e "\nSupported variables:"
	@echo "  LVM_TEST_BACKING_DEVICE Set device used for testing (see also LVM_TEST_DIR)."
	@echo "  LVM_TEST_CAN_CLOBBER_DMESG Allow to clobber dmesg buffer without /dev/kmsg. (1)"
	@echo "  LVM_TEST_DEVDIR	Set to '/dev' to run on real /dev."
	@echo "  LVM_TEST_DIR		Where to create test files  [$(LVM_TEST_DIR)]."
	@echo "  LVM_TEST_LOCKING	Normal (1), Cluster (3)."
	@echo "  LVM_TEST_LVMETAD	Start lvmetad (1)."
	@echo "  LVM_TEST_LVMETAD_DEBUG_OPTS  Allows to override debug opts [-l all]."
	@echo "  LVM_TEST_LVMPOLLD	Start lvmpolld"
	@echo "  LVM_TEST_NODEBUG	Do not debug lvm commands."
	@echo "  LVM_TEST_PARALLEL	May skip agresive wipe of LVMTEST resources."
	@echo "  LVM_TEST_RESULTS	Where to create result files [results]."
	@echo "  LVM_TEST_THIN_CHECK_CMD   Command for thin_check   [$(LVM_TEST_THIN_CHECK_CMD)]."
	@echo "  LVM_TEST_THIN_DUMP_CMD    Command for thin_dump    [$(LVM_TEST_THIN_DUMP_CMD)]."
	@echo "  LVM_TEST_THIN_REPAIR_CMD  Command for thin_repair  [$(LVM_TEST_THIN_REPAIR_CMD)]."
	@echo "  LVM_TEST_THIN_RESTORE_CMD Command for thin_restore [$(LVM_TEST_THIN_RESTORE_CMD)]."
	@echo "  LVM_TEST_CACHE_CHECK_CMD   Command for cache_check   [$(LVM_TEST_CACHE_CHECK_CMD)]."
	@echo "  LVM_TEST_CACHE_DUMP_CMD    Command for cache_dump    [$(LVM_TEST_CACHE_DUMP_CMD)]."
	@echo "  LVM_TEST_CACHE_REPAIR_CMD  Command for cache_repair  [$(LVM_TEST_CACHE_REPAIR_CMD)]."
	@echo "  LVM_TEST_CACHE_RESTORE_CMD Command for cache_restore [$(LVM_TEST_CACHE_RESTORE_CMD)]."
	@echo "  LVM_TEST_UNLIMITED	Set to get unlimited test log (>32MB)"
	@echo "  LVM_VALGRIND		Enable valgrind testing, execs $$"VALGRIND.
	@echo "  LVM_VALGRIND_CLVMD	Enable valgrind testing of clvmd (1)."
	@echo "  LVM_VALGRIND_DMEVENTD	Enable valgrind testing of dmeventd (1)."
	@echo "  LVM_VALGRIND_LVMETAD	Enable valgrind testing of lvmetad (1)."
	@echo "  LVM_STRACE		Enable strace logging."
	@echo "  LVM_DEBUG_LEVEL	Sets debuging level for valgrind/strace (use > 0)."
	@echo "  LVM_VERIFY_UDEV	Default verify state for lvm.conf."
	@echo "  S			Skip given test (regex)."
	@echo "  T			Run given test (regex)."
	@echo "  VERBOSE		Verbose output (1), timing (2)."

check: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir $(LVM_TEST_RESULTS) \
		--flavours ndev-vanilla,ndev-cluster$(LVMETAD_NDEV_FLAVOUR)$(LVMPOLLD_NDEV_FLAVOUR) --only $(T) --skip $(S)

check_system: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir $(LVM_TEST_RESULTS) \
		--flavours udev-vanilla,udev-cluster$(LVMETAD_UDEV_FLAVOUR)$(LVMPOLLD_UDEV_FLAVOUR) --only $(T) --skip $(S)

check_cluster: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir $(LVM_TEST_RESULTS) \
		--flavours ndev-cluster --only $(T) --skip $(S)

check_local: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir $(LVM_TEST_RESULTS) \
		--flavours ndev-vanilla --only $(T) --skip $(S)

ifeq ("@BUILD_LVMETAD@", "yes")
check_lvmetad: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir $(LVM_TEST_RESULTS) \
		--flavours ndev-lvmetad --only $(T) --skip $(S)
endif

ifeq ("@BUILD_LVMPOLLD@", "yes")
check_lvmpolld: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours ndev-lvmpolld,ndev-cluster-lvmpolld,ndev-lvmetad-lvmpolld --only $(T) --skip $(S)
endif

ifeq ("@BUILD_LVMLOCKD@", "yes")
check_lvmlockd_sanlock: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours udev-lvmlockd-sanlock --only shell/sanlock-prepare.sh
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours udev-lvmlockd-sanlock --only $(T) --skip $(S)
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours udev-lvmlockd-sanlock --only shell/sanlock-remove.sh
endif

ifeq ("@BUILD_LVMLOCKD@", "yes")
check_lvmlockd_dlm: .tests-stamp
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours udev-lvmlockd-dlm --only shell/dlm-prepare.sh
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours udev-lvmlockd-dlm --only $(T) --skip $(S)
	VERBOSE=$(VERBOSE) ./lib/runner \
		--testdir . --outdir results \
		--flavours udev-lvmlockd-dlm --only shell/dlm-remove.sh
endif

DATADIR = $(datadir)/lvm2-testsuite
EXECDIR = $(libexecdir)/lvm2-testsuite

LIB_FLAVOURS = \
 flavour-ndev-cluster-lvmpolld\
 flavour-ndev-cluster\
 flavour-ndev-lvmetad-lvmpolld\
 flavour-ndev-lvmetad\
 flavour-ndev-lvmpolld\
 flavour-ndev-vanilla\
 flavour-udev-cluster-lvmpolld\
 flavour-udev-cluster\
 flavour-udev-lvmetad-lvmpolld\
 flavour-udev-lvmetad\
 flavour-udev-lvmpolld\
 flavour-udev-lvmlockd-sanlock\
 flavour-udev-lvmlockd-dlm\
 flavour-udev-vanilla

LIB_LVMLOCKD_CONF = \
 test-corosync-conf \
 test-dlm-conf \
 test-sanlock-conf

LIB_LOCAL = paths runner
LIB_NOT = not
LIB_LINK_NOT = invalid fail should
LIB_SHARED = check aux inittest utils get lvm-wrapper

install: .tests-stamp lib/paths-installed lib/version-expected
	@echo $(srcdir)
	$(INSTALL_DIR) $(DATADIR)/{shell,api,lib} $(EXECDIR)
	$(INSTALL_DATA) shell/*.sh $(DATADIR)/shell
	$(INSTALL_DATA) api/*.sh $(DATADIR)/api
	$(INSTALL_PROGRAM) api/*.{t,py} $(DATADIR)/api
	$(INSTALL_DATA) lib/paths-installed $(DATADIR)/lib/paths
	cd lib && $(INSTALL_DATA) \
		$(LIB_FLAVOURS) \
		$(LIB_LVMLOCKD_CONF) \
		version-expected $(DATADIR)/lib
	@for i in cache-mq cache-smq thin-performance ; do \
		echo "$(INSTALL_DATA) $(abs_top_srcdir)/conf/$$i.profile $(DATADIR)/lib"; \
		$(INSTALL_DATA) $(abs_top_srcdir)/conf/$$i.profile $(DATADIR)/lib; done
	cd lib && $(INSTALL_SCRIPT) $(LIB_SHARED) $(DATADIR)/lib
	@cd $(DATADIR)/lib && for i in $(CMDS); do \
		echo "$(LN_S) -f lvm-wrapper $$i"; \
		$(LN_S) -f lvm-wrapper $$i; done
	$(INSTALL_PROGRAM) lib/$(LIB_NOT) $(EXECDIR)
	@cd $(EXECDIR) && for i in $(LIB_LINK_NOT); do \
		echo "$(LN_S) -f not $$i"; \
		$(LN_S) -f not $$i; done
	$(INSTALL_PROGRAM) -D lib/runner $(bindir)/lvm2-testsuite

lib/should: lib/not
	$(LN_S) -f not lib/should

lib/invalid: lib/not
	$(LN_S) -f not lib/invalid

lib/fail: lib/not
	$(LN_S) -f not lib/fail

lib/runner: lib/runner.o .lib-dir-stamp
	$(CXX) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) -o $@ $<

lib/runner.o: $(wildcard $(srcdir)/lib/*.h)

CFLAGS_runner.o += $(EXTRA_EXEC_CFLAGS)

lib/%: lib/%.o .lib-dir-stamp
	$(CC) $(LDFLAGS) -o $@ $<

lib/%: $(srcdir)/lib/%.sh .lib-dir-stamp
	cp $< $@
	chmod +x $@

lib/flavour-%: $(srcdir)/lib/flavour-%.sh .lib-dir-stamp
	cp $< $@

lib/paths-common: $(srcdir)/Makefile.in .lib-dir-stamp Makefile
	echo 'export DM_UDEV_SYNCHRONISATION=$(dm_udev_synchronisation)' >> $@-t
	echo 'export THIN=@THIN@' >> $@-t
	echo 'export RAID=@RAID@' >> $@-t
	echo 'export CACHE=@CACHE@' >> $@-t
	echo 'export LVMETAD_PIDFILE="@LVMETAD_PIDFILE@"' >> $@-t
	echo 'export LVMPOLLD_PIDFILE="@LVMPOLLD_PIDFILE@"' >> $@-t
	echo 'export DMEVENTD_PIDFILE="@DMEVENTD_PIDFILE@"' >> $@-t
	echo 'export CLVMD_PIDFILE="@CLVMD_PIDFILE@"' >> $@-t
	echo 'export LVM_TEST_THIN_CHECK_CMD=$${LVM_TEST_THIN_CHECK_CMD-@THIN_CHECK_CMD@}' >> $@-t
	echo 'export LVM_TEST_THIN_DUMP_CMD=$${LVM_TEST_THIN_DUMP_CMD-@THIN_DUMP_CMD@}' >> $@-t
	echo 'export LVM_TEST_THIN_REPAIR_CMD=$${LVM_TEST_THIN_REPAIR_CMD-@THIN_REPAIR_CMD@}' >> $@-t
	echo 'export LVM_TEST_THIN_RESTORE_CMD=$${LVM_TEST_THIN_RESTORE_CMD-@THIN_RESTORE_CMD@}' >> $@-t
	echo 'export LVM_TEST_CACHE_CHECK_CMD=$${LVM_TEST_CACHE_CHECK_CMD-@CACHE_CHECK_CMD@}' >> $@-t
	echo 'export LVM_TEST_CACHE_DUMP_CMD=$${LVM_TEST_CACHE_DUMP_CMD-@CACHE_DUMP_CMD@}' >> $@-t
	echo 'export LVM_TEST_CACHE_REPAIR_CMD=$${LVM_TEST_CACHE_REPAIR_CMD-@CACHE_REPAIR_CMD@}' >> $@-t
	echo 'export LVM_TEST_CACHE_RESTORE_CMD=$${LVM_TEST_CACHE_RESTORE_CMD-@CACHE_RESTORE_CMD@}' >> $@-t
	mv $@-t $@

lib/paths-installed: lib/paths-common
	$(RM) $@-t
	cat lib/paths-common > $@-t
	echo 'installed_testsuite=1' >> $@-t
	echo 'export PATH=@libexecdir@/lvm2-testsuite:@datadir@/lvm2-testsuite/lib:$$PATH' >> $@-t
	mv $@-t $@

lib/paths: lib/paths-common
	$(RM) $@-t
	cat lib/paths-common > $@-t
	echo 'top_srcdir="$(top_srcdir)"' >> $@-t
	echo 'abs_top_builddir="$(abs_top_builddir)"' >> $@-t
	echo 'abs_top_srcdir="$(abs_top_srcdir)"' >> $@-t
	echo 'abs_srcdir="$(abs_srcdir)"' >> $@-t
	echo 'abs_builddir="$(abs_builddir)"' >> $@-t
	mv $@-t $@

lib/version-expected: $(top_srcdir)/VERSION .lib-dir-stamp
	cut -f 1 -d ' ' <$< >$@

CMDS = lvm $(shell cat $(top_builddir)/tools/.commands 2>/dev/null)
LIB = $(addprefix lib/, $(LIB_SHARED) $(LIB_LOCAL) $(LIB_NOT) $(LIB_LINK_NOT) $(LIB_FLAVOURS))

.tests-stamp: $(ALL) $(LIB) $(SUBDIRS) lib/version-expected
	@if test "$(srcdir)" != . ; then \
		echo "Linking tests to builddir."; \
		$(MKDIR_P) shell; \
		for f in $(subst $(srcdir)/,,$(ALL)); do \
			$(LN_S) -f $(abs_top_srcdir)/test/$$f $$f; \
		done; \
	fi
	@$(MKDIR_P) -m a=rwx $(LVM_TEST_RESULTS)
	touch $@

.lib-dir-stamp:
	$(MKDIR_P) lib
	for i in $(CMDS); do $(LN_S) -f lvm-wrapper lib/$$i; done
	for i in daemons/clvmd/clvmd daemons/dmeventd/dmeventd \
		tools/dmsetup daemons/lvmetad/lvmetad \
		daemons/lvmpolld/lvmpolld ; do \
		$(LN_S) -f $(abs_top_builddir)/$$i lib/; done
	$(LN_S) -f $(abs_top_srcdir)/conf/thin-performance.profile lib/
	$(LN_S) -f $(abs_top_srcdir)/scripts/fsadm.sh lib/fsadm
	$(LN_S) -f $(abs_top_srcdir)/scripts/vgimportclone.sh lib/vgimportclone
	test "$(srcdir)" = . || for i in $(LIB_LVMLOCKD_CONF); do \
		$(LN_S) -f $(abs_top_srcdir)/test/lib/$$i lib/; done
	touch $@

CLEAN_DIRS += $(LVM_TEST_RESULTS)
ifneq (.,$(firstword $(srcdir)))
CLEAN_TARGETS += $(RUN_BASE) $(addprefix lib/,$(LIB_LVMLOCKD_CONF))
endif

CLEAN_TARGETS += .lib-dir-stamp .tests-stamp $(LIB) $(addprefix lib/,\
	$(CMDS) clvmd dmeventd dmsetup lvmetad lvmpolld \
	harness thin-performance.profile fsadm vgimportclone version-expected \
	paths-installed paths-installed-t paths-common paths-common-t)

Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@

.NOTPARALLEL:
