From: Arran Cudbard-Bell Date: Fri, 22 Apr 2022 21:38:42 +0000 (-0500) Subject: Passing back port via variables is not thread safe, so set a unique variable containi... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=928ec419d199c0a2bf66d051407aa56636094c13;p=thirdparty%2Ffreeradius-server.git Passing back port via variables is not thread safe, so set a unique variable containing the port for a given test suite --- diff --git a/src/tests/digest/all.mk b/src/tests/digest/all.mk index cb5348a4318..f90be42ad30 100644 --- a/src/tests/digest/all.mk +++ b/src/tests/digest/all.mk @@ -40,13 +40,13 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start cp -f $< $@.request; \ echo "Vendor-Specific.Test.Test-Name = \"$(TARGET)\"" >> $@.request; \ echo "Vendor-Specific.Test.Test-Number = \"$${_num}\"" >> $@.request; \ - if ! $(TEST_BIN)/radclient -f $@.request -xF -d src/tests/digest/config -D share/dictionary 127.0.0.1:$(PORT) auth $(SECRET) > $@.out; then \ + if ! $(TEST_BIN)/radclient -f $@.request -xF -d src/tests/digest/config -D share/dictionary 127.0.0.1:$(digest_port) auth $(SECRET) > $@.out; then \ echo "FAILED"; \ cat $@.out; \ rm -f $(BUILD_DIR)/tests/test.digest; \ $(MAKE) --no-print-directory test.digest.radiusd_kill; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "RADCLIENT: $(TEST_BIN)/radclient -f $@.request -xF -d src/tests/digest/config -D share/dictionary 127.0.0.1:$(PORT) auth $(SECRET)"; \ + echo "RADCLIENT: $(TEST_BIN)/radclient -f $@.request -xF -d src/tests/digest/config -D share/dictionary 127.0.0.1:$(digest_port) auth $(SECRET)"; \ exit 1; \ fi; \ touch $@; \ diff --git a/src/tests/eapol_test/all.mk b/src/tests/eapol_test/all.mk index 8a59c2f208a..f258cf0b20a 100644 --- a/src/tests/eapol_test/all.mk +++ b/src/tests/eapol_test/all.mk @@ -103,18 +103,19 @@ $(OUTPUT)/%.ok: $(DIR)/%.conf $(if $(POST_INSTALL_MAKEFILE_ARG),,$(BUILD_DIR)/li $(eval METHOD := $(notdir $(patsubst %.conf,%,$<))) $(eval KEY := $(shell grep key_mgmt=NONE $< | sed 's/key_mgmt=NONE/-n/')) $(eval RADIUS_LOG := $(dir $@)/test.$(METHOD)/radiusd.log) + $(eval TEST_PORT := $($(METHOD)_port)) @echo "EAPOL-TEST $(METHOD)" ${Q}$(MAKE) $(POST_INSTALL_MAKEFILE_ARG) --no-print-directory test.$(METHOD).radiusd_kill - ${Q}PORT=`PRINT_PORT=1 $(MAKE) $(POST_INSTALL_MAKEFILE_ARG) --no-print-directory test.$(METHOD).radiusd_start`; \ - if ! $(EAPOL_TEST) -t 10 -c $< -p $${PORT} -s $(SECRET) $(KEY) > $(EAPOL_TEST_LOG) 2>&1; then \ + ${Q}$(MAKE) $(POST_INSTALL_MAKEFILE_ARG) --no-print-directory test.$(METHOD).radiusd_start + ${Q}if ! $(EAPOL_TEST) -t 10 -c $< -p $(TEST_PORT) -s $(SECRET) $(KEY) > $(EAPOL_TEST_LOG) 2>&1; then \ echo "Last entries in supplicant log ($(EAPOL_TEST_LOG):"; \ tail -n 40 "$(EAPOL_TEST_LOG)"; \ echo "--------------------------------------------------"; \ tail -n 40 "$(RADIUS_LOG)"; \ echo "Last entries in server log ($(RADIUS_LOG)):"; \ echo "--------------------------------------------------"; \ - echo "RADIUSD : OUTPUT=$(dir $@) TESTDIR=$(dir $<) TEST=$(METHOD) TEST_PORT=$(PORT) $(RADIUSD_BIN) -fxxx -n servers -d $(dir $<)config -D $(DICT_PATH) -lstdout -f";\";\ - echo "EAPOL : $(EAPOL_TEST) -c \"$<\" -p $${PORT} -s $(SECRET) $(KEY) "; \ + echo "RADIUSD : OUTPUT=$(dir $@) TESTDIR=$(dir $<) TEST=$(METHOD) TEST_PORT=$(TEST_PORT) $(RADIUSD_BIN) -fxxx -n servers -d $(dir $<)config -D $(DICT_PATH) -lstdout -f";\";\ + echo "EAPOL : $(EAPOL_TEST) -c \"$<\" -p $(TEST_PORT) -s $(SECRET) $(KEY) "; \ echo " log is in $(OUT)"; \ rm -f $(BUILD_DIR)/tests/test.eap; \ $(MAKE) $(POST_INSTALL_MAKEFILE_ARG) --no-print-directory test.$(METHOD).radiusd_kill; \ diff --git a/src/tests/radclient/all.mk b/src/tests/radclient/all.mk index 84ce587b126..84799f906b6 100644 --- a/src/tests/radclient/all.mk +++ b/src/tests/radclient/all.mk @@ -44,14 +44,14 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start $(Q)echo "RADCLIENT-TEST INPUT=$(TARGET) ARGV=\"$(ARGV)\"" $(Q)[ -f $(dir $@)/radiusd.pid ] || exit 1 - $(Q)if ! $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(PORT) $(TYPE) $(SECRET) 1> $(FOUND) 2>&1; then \ + $(Q)if ! $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(radclient_port) $(TYPE) $(SECRET) 1> $(FOUND) 2>&1; then \ if [ "$(IGNORE_ERROR)" != "1" ]; then \ echo "FAILED"; \ cat $(FOUND); \ rm -f $(BUILD_DIR)/tests/test.radclient; \ $(MAKE) --no-print-directory test.radclient.radiusd_kill; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "RADCLIENT: $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -xF -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(PORT) $(TYPE) $(SECRET)"; \ + echo "RADCLIENT: $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -xF -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(radclient_port) $(TYPE) $(SECRET)"; \ exit 1; \ fi; \ fi @@ -76,7 +76,7 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start $(Q)if [ -e "$(EXPECTED)" ] && ! diff -I 'Sent' -I 'Received' $(EXPECTED) $(FOUND); then \ echo "RADCLIENT FAILED $@"; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "RADCLIENT: $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(PORT) $(TYPE) $(SECRET)"; \ + echo "RADCLIENT: $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(radclient_port) $(TYPE) $(SECRET)"; \ echo "ERROR: File $(FOUND) is not the same as $(EXPECTED)"; \ echo "If you did some update on the radclient code, please be sure to update the unit tests."; \ echo "e.g: $(EXPECTED)"; \ @@ -87,7 +87,7 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start elif [ -e "$(CMD_TEST)" ] && ! $(SHELL) $(CMD_TEST); then \ echo "RADCLIENT FAILED $@"; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "RADCLIENT: $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(PORT) $(TYPE) $(SECRET)"; \ + echo "RADCLIENT: $(TEST_BIN)/radclient $(ARGV) -C $(RADCLIENT_CLIENT_PORT) -f $< -d src/tests/radclient/config -D share/dictionary 127.0.0.1:$(radclient_port) $(TYPE) $(SECRET)"; \ echo "ERROR: The script $(CMD_TEST) can't validate the content of $(FOUND)"; \ echo "If you did some update on the radclient code, please be sure to update the unit tests."; \ rm -f $(BUILD_DIR)/tests/test.radclient; \ diff --git a/src/tests/radiusd.mk b/src/tests/radiusd.mk index bdc279feef3..ce9eb671b58 100644 --- a/src/tests/radiusd.mk +++ b/src/tests/radiusd.mk @@ -16,9 +16,13 @@ # ${1} config-name found in $(DIR)/config, e.g: src/tests/$target/config/${config-name}.conf # ${2} output directory # +# - Global variables defined +# +# _port Passing TEST=test.foo results in "foo_port" being set to the port assigned to the +# radiusd instance created for the test suite. +# # - Available in calling rule # -# PORT The port the server started on # RADIUSD_RUN The server invocation # # - How to use @@ -43,7 +47,8 @@ include Make.inc define RADIUSD_SERVICE $$(eval RADIUSD_BIN := $(JLIBTOOL) --silent --mode=execute $$(TEST_BIN)/radiusd) -$$(eval PORT := $(shell echo $$(($(PORT)+1)))) +$(eval PORT := $(shell echo $$(($(PORT)+1)))) +$(eval $(subst test.,,$(TEST))_port := $(PORT)) # # Kill it. We don't care if it failed or not. However, we do care @@ -96,7 +101,6 @@ $(TEST).radiusd_stop: | ${2} # Start radiusd instance # ${2}/radiusd.pid: ${2} - $$(eval PORT=$(PORT)) $$(eval RADIUSD_RUN := TESTDIR=$(DIR) OUTPUT=${2} TEST_PORT=$(PORT) TEST=$(subst test.,,$(TEST)) $$(RADIUSD_BIN) -Pxxx -d $(DIR)/config -n ${1} -D $(DICT_PATH) -l ${2}/radiusd.log) ${Q}rm -f ${2}/radiusd.log ${Q}if test ! -z "$$(PRINT_PORT)"; then \ diff --git a/src/tests/tacacs/all.mk b/src/tests/tacacs/all.mk index 7d3353b2500..52340cca38b 100644 --- a/src/tests/tacacs/all.mk +++ b/src/tests/tacacs/all.mk @@ -54,13 +54,13 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start $(eval ARGV := $(shell grep "#.*ARGV:" $< | cut -f2 -d ':')) $(Q)echo "TACACS-TEST INPUT=$(TARGET) TACACS_ARGV=\"$(ARGV)\"" $(Q)[ -f $(dir $@)/radiusd.pid ] || exit 1 - $(Q)if ! $(TACCLIENT) --return-0-if-failed -v -k $(SECRET) -p $(PORT) -H localhost -r 192.168.69.1 -P pegapilha/0 --timeout 2 $(ARGV) 1> $(FOUND) 2>&1; then \ + $(Q)if ! $(TACCLIENT) --return-0-if-failed -v -k $(SECRET) -p $(tacacs_port) -H localhost -r 192.168.69.1 -P pegapilha/0 --timeout 2 $(ARGV) 1> $(FOUND) 2>&1; then \ echo "FAILED"; \ cat $(FOUND); \ rm -f $(BUILD_DIR)/tests/test.tacacs; \ $(MAKE) --no-print-directory test.tacacs.radiusd_kill; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "TACCLIENT: $(TACCLIENT) --return-0-if-failed -v -k $(SECRET) -p $(PORT) -H localhost -r 192.168.69.1 -P pegapilha/0 --timeout 2 $(ARGV)"; \ + echo "TACCLIENT: $(TACCLIENT) --return-0-if-failed -v -k $(SECRET) -p $(tacacs_port) -H localhost -r 192.168.69.1 -P pegapilha/0 --timeout 2 $(ARGV)"; \ exit 1; \ fi # @@ -71,7 +71,7 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start $(Q)if [ -e "$(EXPECTED)" ] && ! cmp -s $(FOUND) $(EXPECTED); then \ echo "TACCLIENT FAILED $@"; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "TACCLIENT: $(TACCLIENT) --return-0-if-failed -v -k $(SECRET) -p $(PORT) -H localhost -r 192.168.69.1 -P pegapilha/0 --timeout 2 $(ARGV)"; \ + echo "TACCLIENT: $(TACCLIENT) --return-0-if-failed -v -k $(SECRET) -p $(tacacs_port) -H localhost -r 192.168.69.1 -P pegapilha/0 --timeout 2 $(ARGV)"; \ echo "ERROR: File $(FOUND) is not the same as $(EXPECTED)"; \ echo "If you did some update on the proto_tacacs code, please be sure to update the unit tests."; \ echo "e.g: $(EXPECTED)"; \ diff --git a/src/tests/vmps/all.mk b/src/tests/vmps/all.mk index 9d55d44f250..888cfaa01d5 100644 --- a/src/tests/vmps/all.mk +++ b/src/tests/vmps/all.mk @@ -35,13 +35,13 @@ $(OUTPUT)/%: $(DIR)/% | $(TEST).radiusd_kill $(TEST).radiusd_start $(eval ARGV := $(shell grep "#.*ARGV:" $< | cut -f2 -d ':')) $(Q)echo "VMPS-TEST INPUT=$(TARGET) VMPS_ARGV=\"$(ARGV)\"" $(Q)[ -f $(dir $@)/radiusd.pid ] || exit 1 - $(Q)if ! $(VQCLI) -s 127.0.0.1 -p $(PORT) $(ARGV) 1> $(FOUND) 2>&1; then \ + $(Q)if ! $(VQCLI) -s 127.0.0.1 -p $(vmps_port) $(ARGV) 1> $(FOUND) 2>&1; then \ echo "FAILED"; \ cat $(FOUND); \ rm -f $(BUILD_DIR)/tests/test.vmps; \ $(MAKE) --no-print-directory test.vmps.radiusd_kill; \ echo "RADIUSD: $(RADIUSD_RUN)"; \ - echo "VQCLI: $(VQCLI) -s 127.0.0.1 -p $(PORT) $(ARGV)"; \ + echo "VQCLI: $(VQCLI) -s 127.0.0.1 -p $(vmps_port) $(ARGV)"; \ exit 1; \ fi #