Marcel Telka
2023-03-23 b1d2349e8d2b66f8255c09aa7b8389a07b1dd526
make-rules: introduce USERLAND_TEST_REQUIRED_PACKAGES

2 files modified
42 ■■■■ changed files
make-rules/environment.mk 8 ●●●●● patch | view | raw | blame | history
make-rules/setup.py.mk 34 ●●●● patch | view | raw | blame | history
make-rules/environment.mk
@@ -61,14 +61,16 @@
component-test-environment-check:: component-environment-check
    $(call separator-line,Required Additional Packages Needed for Testing Only)
    @[ -z "$(strip $(TEST_REQUIRED_PACKAGES))" ] || /usr/bin/pkg list -vH $(TEST_REQUIRED_PACKAGES:%=/%)
    @[ -z "$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \
        /usr/bin/pkg list -vH $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%)
    $(call separator-line)
component-test-environment-prep::
    @[ -z "$(strip $(TEST_REQUIRED_PACKAGES))" ] || /usr/bin/pkg list -vH $(TEST_REQUIRED_PACKAGES:%=/%) >/dev/null || \
    @[ -z "$(strip $(USERLAND_TEST_REQUIRED_PACKAGES))$(strip $(TEST_REQUIRED_PACKAGES))" ] || \
        /usr/bin/pkg list -vH $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) >/dev/null || \
        { echo "Adding required packages to testing environment..."; \
        while true ; do \
          $(PFEXEC) /usr/bin/pkg install --accept -v $(TEST_REQUIRED_PACKAGES:%=/%) ; \
          $(PFEXEC) /usr/bin/pkg install --accept -v $(USERLAND_TEST_REQUIRED_PACKAGES:%=/%) $(TEST_REQUIRED_PACKAGES:%=/%) ; \
          RETVAL=$$? ; \
          [ $$RETVAL -eq 0 ] && break; \
          [ $$RETVAL -eq 4 ] && break; \
make-rules/setup.py.mk
@@ -354,27 +354,29 @@
    ) | $(COMPONENT_TEST_TRANSFORMER)"
# tox package together with the tox-current-env plugin is needed
USERLAND_REQUIRED_PACKAGES += library/python/tox
USERLAND_REQUIRED_PACKAGES += library/python/tox-current-env
USERLAND_TEST_REQUIRED_PACKAGES += library/python/tox
USERLAND_TEST_REQUIRED_PACKAGES += library/python/tox-current-env
# Generate raw lists of test dependencies per Python version
# Please note we set PATH below four times for $(COMPONENT_TEST_CMD) (aka tox)
# to workaround https://github.com/tox-dev/tox/issues/2538
COMPONENT_POST_INSTALL_ACTION += \
    cd $(@D) ; \
    echo "Testing dependencies:" ; \
    PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-deps-to=- $(COMPONENT_TEST_TARGETS) || exit 1 ; \
    echo "Testing extras:" ; \
    PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-extras-to=- $(COMPONENT_TEST_TARGETS) || exit 1 ; \
    ( PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-deps-to=- $(COMPONENT_TEST_TARGETS) \
        | $(WS_TOOLS)/python-resolve-deps \
    if [ -x "$(COMPONENT_TEST_CMD)" ] ; then \
        cd $(@D) ; \
        echo "Testing dependencies:" ; \
        PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-deps-to=- $(COMPONENT_TEST_TARGETS) || exit 1 ; \
        echo "Testing extras:" ; \
        PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-extras-to=- $(COMPONENT_TEST_TARGETS) || exit 1 ; \
        ( PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-deps-to=- $(COMPONENT_TEST_TARGETS) \
            | $(WS_TOOLS)/python-resolve-deps \
                PYTHONPATH=$(PROTO_DIR)/$(PYTHON_DIR)/site-packages:$(PROTO_DIR)/$(PYTHON_LIB) \
                $(PYTHON) $(WS_TOOLS)/python-requires $(COMPONENT_NAME) \
            | $(PYTHON) $(WS_TOOLS)/python-requires - ; \
        for e in $$(PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-extras-to=- $(COMPONENT_TEST_TARGETS)) ; do \
            PYTHONPATH=$(PROTO_DIR)/$(PYTHON_DIR)/site-packages:$(PROTO_DIR)/$(PYTHON_LIB) \
            $(PYTHON) $(WS_TOOLS)/python-requires $(COMPONENT_NAME) \
        | $(PYTHON) $(WS_TOOLS)/python-requires - ; \
    for e in $$(PATH=$(PATH) $(COMPONENT_TEST_CMD) -qq --no-provision --print-extras-to=- $(COMPONENT_TEST_TARGETS)) ; do \
        PYTHONPATH=$(PROTO_DIR)/$(PYTHON_DIR)/site-packages:$(PROTO_DIR)/$(PYTHON_LIB) \
            $(PYTHON) $(WS_TOOLS)/python-requires $(COMPONENT_NAME) $$e ; \
    done ) | $(GSED) -e '/^tox\(-current-env\)\?$$/d' > $(@D)/.depend-test ;
                $(PYTHON) $(WS_TOOLS)/python-requires $(COMPONENT_NAME) $$e ; \
        done ) | $(GSED) -e '/^tox\(-current-env\)\?$$/d' > $(@D)/.depend-test ; \
    fi ;
else ifeq ($(strip $(TEST_STYLE)),pytest)
COMPONENT_TEST_CMD =        $(PYTHON) -m pytest
COMPONENT_TEST_ARGS =        $(PYTEST_ADDOPTS)
@@ -383,7 +385,7 @@
# Force pytest to not use colored output so the results normalization is unaffected
PYTEST_ADDOPTS += --color=no
USERLAND_REQUIRED_PACKAGES += library/python/pytest
USERLAND_TEST_REQUIRED_PACKAGES += library/python/pytest
else ifeq ($(strip $(TEST_STYLE)),unittest)
COMPONENT_TEST_CMD =        $(PYTHON) -m unittest
COMPONENT_TEST_ARGS =