[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v16 3/4] tools/tests: introduce unit tests for domain ID allocator
On Mon, Aug 25, 2025 at 03:47:39PM +0200, Anthony PERARD wrote: Thanks for review! Will address in the next revision. Please see some responses below. > On Tue, Aug 12, 2025 at 10:30:50PM +0000, dmkhn@xxxxxxxxx wrote: > > diff --git a/tools/tests/domid/.gitignore b/tools/tests/domid/.gitignore > > new file mode 100644 > > index 000000000000..0e02715159c2 > > --- /dev/null > > +++ b/tools/tests/domid/.gitignore > > @@ -0,0 +1,3 @@ > > +*.o > > "*.o" is already in the .gitignore at the root of the project. I don't > think it's useful here. Ack. > > > +generated > > +test-domid > > diff --git a/tools/tests/domid/Makefile b/tools/tests/domid/Makefile > > new file mode 100644 > > index 000000000000..0a124a8bfc76 > > --- /dev/null > > +++ b/tools/tests/domid/Makefile > > @@ -0,0 +1,84 @@ > > +# SPDX-License-Identifier: GPL-2.0-only > > +# > > +# Unit tests for domain ID allocator. > > +# > > +# Copyright 2025 Ford Motor Company > > + > > +XEN_ROOT=$(CURDIR)/../../.. > > +include $(XEN_ROOT)/tools/Rules.mk > > + > > +TESTS := test-domid > > + > > +strip-list = $(sort $(strip $(foreach x,$(1),$(strip $(x))))) > > What's that macro for? Also, what's a "list"? > > > +define list-c-headers > > +$(shell sed -n -r \ > > Could you use "-E" instead of "-r"? (-r might not work on FreeBSD) re: FreeBSD: I've found there's a dedicated pipeline for Xen on FreeBSD (cirrus CI), but I did not figure how to trigger it, will appreciate help with that. > > > + 's/^[ \t]*# *include[ \t]*[<"]([^">]+)[">].*/\1/p' $(1) 2>/dev/null) > > +endef > > + > > +define emit-harness-nested-rule > > +$(1): $(CURDIR)/harness.h > > + mkdir -p $$(dir $$@) > > You can use $(@D) instead of $(dir $@). The only difference is a / > not present at the end. > > > + ln -sf $$^ $$@ > > This should use $<, I don't think the command is going to work if > there's multiple prerequisite. > > > +endef > > + > > +define emit-harness-rules > > +ifneq ($(strip $(3)),) > > How many time do you need to call $(strip) ? > Also, I think I would prefer to have $(if $(strip $(3)), [the rest]) > rather than actually evaluating code and generating code that we already > know is isn't going to be executed. > > > +$(foreach h,$(3),$(call emit-harness-nested-rule,$(CURDIR)/generated/$(h))) > > +vpath $(1) $(2) > > +$(1:.c=.o): $(addprefix $(CURDIR)/generated/,$(3)) > > +endif > > +endef > > This macro fails if there's more than one "#include" in "domid.c". > > And if there's no "#include" in "domid.c", then Make doesn't know how to > make "domid.o" for "test-domid". > > > + > > +define vpath-with-harness-deps > > +$(call emit-harness-rules,$(1),$(2),\ > > + $(call strip-list,$(call list-c-headers,$(2)$(1)))) > > +endef > > + > > +.PHONY: all > > +all: $(TESTS) > > + > > +.PHONY: run > > +run: $(TESTS) > > + $(foreach t,$(TESTS),./$(t);) > > This recipe doesn't work as expected. You need `set -e` or only the last > tests count. > > > + > > +.PHONY: clean > > +clean: > > + $(RM) -rf $(CURDIR)/generated > > $(RM) already contain the '-f' option, no need to add it a second time. > > Also, we expected Make to run all commands in recipe from $(CURDIR), so > adding $(CURDIR) is unnecessary, could potentially be an issue. > > > + $(RM) -- *.o $(TESTS) $(DEPS_RM) > > + > > +.PHONY: distclean > > +distclean: clean > > + $(RM) -- *~ > > + > > +.PHONY: install > > +install: all > > + $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC)/tests > > + $(INSTALL_PROG) test-domid $(DESTDIR)$(LIBEXEC)/tests > > + > > +.PHONY: uninstall > > +uninstall: > > + $(RM) -- $(DESTDIR)$(LIBEXEC)/tests/test-domid > > + > > +CFLAGS += -D__XEN_TOOLS__ > > +# find-next-bit.c > > +CFLAGS += '-DEXPORT_SYMBOL(x)=' \ > > + -Dfind_first_bit \ > > + -Dfind_first_zero_bit \ > > + -Dfind_next_bit \ > > + -Dfind_next_bit_le \ > > + -Dfind_next_zero_bit_le > > +CFLAGS += $(APPEND_CFLAGS) > > +CFLAGS += $(CFLAGS_xeninclude) > > +CFLAGS += -I./generated/ > > + > > +LDFLAGS += $(APPEND_LDFLAGS) > > + > > +vpath find-next-bit.c $(XEN_ROOT)/xen/lib/ > > +# Ubuntu {16,18}.04 need single eval at the call site. > > I'd rather see a comment about what's the macro is about rather that a > comment some Linux distribution. Our target is GNU Make 3.80, without > regards to a particular distribution. (Also I don't think it's useful to > point out that `eval` is needed for older version of Make, at least in > our project.) Ack. > > > +$(eval $(call vpath-with-harness-deps,domid.c,$(XEN_ROOT)/xen/common/)) > > + > > +test-domid: domid.o find-next-bit.o test-domid.o > > + $(CC) $^ -o $@ $(LDFLAGS) > > + > > +-include $(DEPS_INCLUDE) > > diff --git a/tools/tests/domid/test-domid.c b/tools/tests/domid/test-domid.c > > new file mode 100644 > > index 000000000000..51a88a6a9550 > > --- /dev/null > > +++ b/tools/tests/domid/test-domid.c > > @@ -0,0 +1,93 @@ > > +/* SPDX-License-Identifier: GPL-2.0-only */ > > +/* > > + * Unit tests for domain ID allocator. > > + * > > + * Copyright 2025 Ford Motor Company > > + */ > > + > > +#include "harness.h" > > + > > +#define verify(exp, fmt, args...) do { \ > > + if ( !(exp) ) \ > > + printf(fmt, ## args); \ > > + assert(exp); \ > > Relying on assert() for the test isn't wise. It's useful for developing > and debugging because it calls abort(), but they can easily be get rid of, > by simply building with -DNDEBUG. Could you maybe replace it with exit() > since you already check the condition? Yep, will do. > > > Thanks, > > -- > Anthony PERARD >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |