make/RunTests.gmk
branchihse-testmakefiles-branch
changeset 55956 3c681a5d4ba1
parent 55949 17e70a68fbed
parent 48061 665769d3cee4
equal deleted inserted replaced
55954:59d51a521c64 55956:3c681a5d4ba1
   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]')) \
   592         TEST := $(test), \
   670         TEST := $(test), \
   593     )) \
   671     )) \
   594   ) \
   672   ) \
   595   $(if $(call UseJtregTestHandler, $(test)), \
   673   $(if $(call UseJtregTestHandler, $(test)), \
   596     $(eval $(call SetupRunJtregTest, $(TEST_ID), \
   674     $(eval $(call SetupRunJtregTest, $(TEST_ID), \
       
   675         TEST := $(test), \
       
   676     )) \
       
   677   ) \
       
   678   $(if $(call UseSpecialTestHandler, $(test)), \
       
   679     $(eval $(call SetupRunSpecialTest, $(TEST_ID), \
   597         TEST := $(test), \
   680         TEST := $(test), \
   598     )) \
   681     )) \
   599   ) \
   682   ) \
   600 )
   683 )
   601 
   684