261 jtreg:$(test_path) \ |
261 jtreg:$(test_path) \ |
262 ) \ |
262 ) \ |
263 ) |
263 ) |
264 endef |
264 endef |
265 |
265 |
|
266 # Helper function to determine if a test specification is a special test |
|
267 # |
|
268 # It is a special test if it is "special:" followed by a test name. |
|
269 define ParseSpecialTestSelection |
|
270 $(if $(filter special:%, $1), \ |
|
271 $1 \ |
|
272 ) |
|
273 endef |
|
274 |
266 ifeq ($(TEST), ) |
275 ifeq ($(TEST), ) |
267 $(info No test selection given in TEST!) |
276 $(info No test selection given in TEST!) |
268 $(info Please use e.g. 'run-test TEST=tier1' or 'run-test-tier1') |
277 $(info Please use e.g. 'run-test TEST=tier1' or 'run-test-tier1') |
269 $(info See doc/testing.[md|html] for help) |
278 $(info See doc/testing.[md|html] for help) |
270 $(error Cannot continue) |
279 $(error Cannot continue) |
278 $(if $(strip $(PARSED_TESTS)), , \ |
287 $(if $(strip $(PARSED_TESTS)), , \ |
279 $(eval PARSED_TESTS += $(call ParseGtestTestSelection, $(test))) \ |
288 $(eval PARSED_TESTS += $(call ParseGtestTestSelection, $(test))) \ |
280 ) \ |
289 ) \ |
281 $(if $(strip $(PARSED_TESTS)), , \ |
290 $(if $(strip $(PARSED_TESTS)), , \ |
282 $(eval PARSED_TESTS += $(call ParseJtregTestSelection, $(test))) \ |
291 $(eval PARSED_TESTS += $(call ParseJtregTestSelection, $(test))) \ |
|
292 ) \ |
|
293 $(if $(strip $(PARSED_TESTS)), , \ |
|
294 $(eval PARSED_TESTS += $(call ParseSpecialTestSelection, $(test))) \ |
283 ) \ |
295 ) \ |
284 $(if $(strip $(PARSED_TESTS)), , \ |
296 $(if $(strip $(PARSED_TESTS)), , \ |
285 $(eval UNKNOWN_TEST := $(test)) \ |
297 $(eval UNKNOWN_TEST := $(test)) \ |
286 ) \ |
298 ) \ |
287 $(eval TESTS_TO_RUN += $(PARSED_TESTS)) \ |
299 $(eval TESTS_TO_RUN += $(PARSED_TESTS)) \ |
563 $1: run-test-$1 parse-test-$1 |
575 $1: run-test-$1 parse-test-$1 |
564 |
576 |
565 TARGETS += $1 |
577 TARGETS += $1 |
566 endef |
578 endef |
567 |
579 |
|
580 ################################################################################ |
|
581 |
|
582 ### Rules for special tests |
|
583 |
|
584 SetupRunSpecialTest = $(NamedParamsMacroTemplate) |
|
585 define SetupRunSpecialTestBody |
|
586 $1_TEST_RESULTS_DIR := $$(TEST_RESULTS_DIR)/$1 |
|
587 $1_TEST_SUPPORT_DIR := $$(TEST_SUPPORT_DIR)/$1 |
|
588 $1_EXITCODE := $$($1_TEST_RESULTS_DIR)/exitcode.txt |
|
589 |
|
590 $1_FULL_TEST_NAME := $$(strip $$(patsubst special:%, %, $$($1_TEST))) |
|
591 ifneq ($$(findstring :, $$($1_FULL_TEST_NAME)), ) |
|
592 $1_TEST_NAME := $$(firstword $$(subst :, ,$$($1_FULL_TEST_NAME))) |
|
593 $1_TEST_ARGS := $$(strip $$(patsubst special:$$($1_TEST_NAME):%, %, $$($1_TEST))) |
|
594 else |
|
595 $1_TEST_NAME := $$($1_FULL_TEST_NAME) |
|
596 $1_TEST_ARGS := |
|
597 endif |
|
598 |
|
599 ifeq ($$($1_TEST_NAME), hotspot-internal) |
|
600 $1_TEST_COMMAND_LINE := \ |
|
601 $$(JDK_IMAGE_DIR)/bin/java -XX:+ExecuteInternalVMTests \ |
|
602 -XX:+ShowMessageBoxOnError -version |
|
603 else ifeq ($$($1_TEST_NAME), failure-handler) |
|
604 $1_TEST_COMMAND_LINE := \ |
|
605 ($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f \ |
|
606 BuildFailureHandler.gmk test) |
|
607 else ifeq ($$($1_TEST_NAME), make) |
|
608 $1_TEST_COMMAND_LINE := \ |
|
609 ($(CD) $(TOPDIR)/test/make && $(MAKE) $(MAKE_ARGS) -f \ |
|
610 TestMake.gmk $$($1_TEST_ARGS)) |
|
611 else |
|
612 $$(error Invalid special test specification: $$($1_TEST_NAME)) |
|
613 endif |
|
614 |
|
615 run-test-$1: |
|
616 $$(call LogWarn) |
|
617 $$(call LogWarn, Running test '$$($1_TEST)') |
|
618 $$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR)) |
|
619 $$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/test-execution, \ |
|
620 $$($1_TEST_COMMAND_LINE) \ |
|
621 > >($(TEE) $$($1_TEST_RESULTS_DIR)/test-output.txt) \ |
|
622 && $$(ECHO) $$$$? > $$($1_EXITCODE) \ |
|
623 || $$(ECHO) $$$$? > $$($1_EXITCODE) \ |
|
624 ) |
|
625 |
|
626 $1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/gtest.txt |
|
627 |
|
628 # We can not parse the various "special" tests. |
|
629 parse-test-$1: run-test-$1 |
|
630 $$(call LogWarn, Finished running test '$$($1_TEST)') |
|
631 $$(call LogWarn, Test report is stored in $$(strip \ |
|
632 $$(subst $$(TOPDIR)/, , $$($1_TEST_RESULTS_DIR)))) |
|
633 $$(call LogWarn, Warning: Special test results are not properly parsed!) |
|
634 $$(eval $1_PASSED := 0) |
|
635 $$(eval $1_FAILED := 0) |
|
636 $$(eval $1_ERROR := 0) |
|
637 $$(eval $1_TOTAL := 0) |
|
638 |
|
639 $1: run-test-$1 parse-test-$1 |
|
640 |
|
641 TARGETS += $1 |
|
642 endef |
568 |
643 |
569 ################################################################################ |
644 ################################################################################ |
570 # Setup and execute make rules for all selected tests |
645 # Setup and execute make rules for all selected tests |
571 ################################################################################ |
646 ################################################################################ |
572 |
647 |
574 UseGtestTestHandler = \ |
649 UseGtestTestHandler = \ |
575 $(if $(filter gtest:%, $1), true) |
650 $(if $(filter gtest:%, $1), true) |
576 |
651 |
577 UseJtregTestHandler = \ |
652 UseJtregTestHandler = \ |
578 $(if $(filter jtreg:%, $1), true) |
653 $(if $(filter jtreg:%, $1), true) |
|
654 |
|
655 UseSpecialTestHandler = \ |
|
656 $(if $(filter special:%, $1), true) |
579 |
657 |
580 # Now process each test to run and setup a proper make rule |
658 # Now process each test to run and setup a proper make rule |
581 $(foreach test, $(TESTS_TO_RUN), \ |
659 $(foreach test, $(TESTS_TO_RUN), \ |
582 $(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \ |
660 $(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \ |
583 $(TR) -cs '[a-z][A-Z][0-9]\n' '[_*1000]')) \ |
661 $(TR) -cs '[a-z][A-Z][0-9]\n' '[_*1000]')) \ |