make/RunTests.gmk
changeset 48042 be01bcb72309
parent 47986 45c5d7817e9e
child 48058 c5eefa465e37
equal deleted inserted replaced
48041:2743e489189e 48042:be01bcb72309
    66 ################################################################################
    66 ################################################################################
    67 
    67 
    68 TEST_RESULTS_DIR := $(OUTPUTDIR)/test-results
    68 TEST_RESULTS_DIR := $(OUTPUTDIR)/test-results
    69 TEST_SUPPORT_DIR := $(OUTPUTDIR)/test-support
    69 TEST_SUPPORT_DIR := $(OUTPUTDIR)/test-support
    70 TEST_SUMMARY := $(TEST_RESULTS_DIR)/test-summary.txt
    70 TEST_SUMMARY := $(TEST_RESULTS_DIR)/test-summary.txt
       
    71 TEST_LAST_IDS := $(TEST_SUPPORT_DIR)/test-last-ids.txt
    71 
    72 
    72 ifeq ($(CUSTOM_ROOT), )
    73 ifeq ($(CUSTOM_ROOT), )
    73   JTREG_TOPDIR := $(TOPDIR)
    74   JTREG_TOPDIR := $(TOPDIR)
    74 else
    75 else
    75   JTREG_TOPDIR := $(CUSTOM_ROOT)
    76   JTREG_TOPDIR := $(CUSTOM_ROOT)
   226     $(eval TEST_NAME := :$(TEST_NAME)) \
   227     $(eval TEST_NAME := :$(TEST_NAME)) \
   227   ) \
   228   ) \
   228   $(if $(findstring :, $(TEST_NAME)), \
   229   $(if $(findstring :, $(TEST_NAME)), \
   229     $(if $(filter :%, $(TEST_NAME)), \
   230     $(if $(filter :%, $(TEST_NAME)), \
   230       $(eval TEST_GROUP := $(patsubst :%, %, $(TEST_NAME))) \
   231       $(eval TEST_GROUP := $(patsubst :%, %, $(TEST_NAME))) \
   231       $(eval TEST_ROOTS := $(JTREG_TESTROOTS)) \
   232       $(eval TEST_ROOTS := $(foreach test_root, $(JTREG_TESTROOTS), \
       
   233           $(call CleanupJtregPath, $(test_root)))) \
   232     , \
   234     , \
   233       $(eval TEST_PATH := $(word 1, $(subst :, $(SPACE), $(TEST_NAME)))) \
   235       $(eval TEST_PATH := $(word 1, $(subst :, $(SPACE), $(TEST_NAME)))) \
   234       $(eval TEST_GROUP := $(word 2, $(subst :, $(SPACE), $(TEST_NAME)))) \
   236       $(eval TEST_GROUP := $(word 2, $(subst :, $(SPACE), $(TEST_NAME)))) \
   235       $(eval TEST_ROOTS := $(call ExpandJtregRoot, $(TEST_PATH))) \
   237       $(eval TEST_ROOTS := $(call ExpandJtregRoot, $(TEST_PATH))) \
   236     ) \
   238     ) \
   314 
   316 
   315 SetupRunGtestTest = $(NamedParamsMacroTemplate)
   317 SetupRunGtestTest = $(NamedParamsMacroTemplate)
   316 define SetupRunGtestTestBody
   318 define SetupRunGtestTestBody
   317   $1_TEST_RESULTS_DIR := $$(TEST_RESULTS_DIR)/$1
   319   $1_TEST_RESULTS_DIR := $$(TEST_RESULTS_DIR)/$1
   318   $1_TEST_SUPPORT_DIR := $$(TEST_SUPPORT_DIR)/$1
   320   $1_TEST_SUPPORT_DIR := $$(TEST_SUPPORT_DIR)/$1
       
   321   $1_EXITCODE := $$($1_TEST_RESULTS_DIR)/exitcode.txt
   319 
   322 
   320   $1_TEST_NAME := $$(strip $$(patsubst gtest:%, %, $$($1_TEST)))
   323   $1_TEST_NAME := $$(strip $$(patsubst gtest:%, %, $$($1_TEST)))
   321   ifneq ($$($1_TEST_NAME), all)
   324   ifneq ($$($1_TEST_NAME), all)
   322     $1_GTEST_FILTER := --gtest_filter=$$($1_TEST_NAME)*
   325     $1_GTEST_FILTER := --gtest_filter=$$($1_TEST_NAME)*
   323   endif
   326   endif
   330 	$$(call LogWarn)
   333 	$$(call LogWarn)
   331 	$$(call LogWarn, Running test '$$($1_TEST)')
   334 	$$(call LogWarn, Running test '$$($1_TEST)')
   332 	$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
   335 	$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR))
   333 	$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/gtest, \
   336 	$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/gtest, \
   334 	    $$(FIXPATH) $$(TEST_IMAGE_DIR)/hotspot/gtest/server/gtestLauncher \
   337 	    $$(FIXPATH) $$(TEST_IMAGE_DIR)/hotspot/gtest/server/gtestLauncher \
   335 	    -jdk $(JDK_IMAGE_DIR) $$($1_GTEST_FILTER) \
   338 	         -jdk $(JDK_IMAGE_DIR) $$($1_GTEST_FILTER) \
   336 	    --gtest_output=xml:$$($1_TEST_RESULTS_DIR)/gtest.xml \
   339 	         --gtest_output=xml:$$($1_TEST_RESULTS_DIR)/gtest.xml \
   337 	    $$($1_GTEST_REPEAT) $$(GTEST_OPTIONS) $$(GTEST_VM_OPTIONS) \
   340 	         $$($1_GTEST_REPEAT) $$(GTEST_OPTIONS) $$(GTEST_VM_OPTIONS) \
   338 	    > >($(TEE) $$($1_TEST_RESULTS_DIR)/gtest.txt) || true )
   341 	        > >($(TEE) $$($1_TEST_RESULTS_DIR)/gtest.txt) \
       
   342 	    && $$(ECHO) $$$$? > $$($1_EXITCODE) \
       
   343 	    || $$(ECHO) $$$$? > $$($1_EXITCODE) \
       
   344 	)
   339 
   345 
   340   $1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/gtest.txt
   346   $1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/gtest.txt
   341 
   347 
   342   parse-test-$1: run-test-$1
   348   parse-test-$1: run-test-$1
   343 	$$(call LogWarn, Finished running test '$$($1_TEST)')
   349 	$$(call LogWarn, Finished running test '$$($1_TEST)')
   344 	$$(call LogWarn, Test report is stored in $$(strip \
   350 	$$(call LogWarn, Test report is stored in $$(strip \
   345 	    $$(subst $$(TOPDIR)/, , $$($1_TEST_RESULTS_DIR))))
   351 	    $$(subst $$(TOPDIR)/, , $$($1_TEST_RESULTS_DIR))))
   346 	$$(if  $$(wildcard $$($1_RESULT_FILE)), \
   352 	$$(if $$(wildcard $$($1_RESULT_FILE)), \
   347 	  $$(eval $1_TOTAL := $$(shell $$(AWK) '/==========.* tests? from .* \
   353 	  $$(eval $1_TOTAL := $$(shell $$(AWK) '/==========.* tests? from .* \
   348 	      test cases? ran/ { print $$$$2 }' $$($1_RESULT_FILE))) \
   354 	      test cases? ran/ { print $$$$2 }' $$($1_RESULT_FILE))) \
   349 	  $$(if $$($1_TOTAL), , $$(eval $1_TOTAL := 0)) \
   355 	  $$(if $$($1_TOTAL), , $$(eval $1_TOTAL := 0)) \
   350 	  $$(eval $1_PASSED := $$(shell $$(AWK) '/\[  PASSED  \] .* tests?./ \
   356 	  $$(eval $1_PASSED := $$(shell $$(AWK) '/\[  PASSED  \] .* tests?./ \
   351 	      { print $$$$4 }' $$($1_RESULT_FILE))) \
   357 	      { print $$$$4 }' $$($1_RESULT_FILE))) \
   396 
   402 
   397 SetupRunJtregTest = $(NamedParamsMacroTemplate)
   403 SetupRunJtregTest = $(NamedParamsMacroTemplate)
   398 define SetupRunJtregTestBody
   404 define SetupRunJtregTestBody
   399   $1_TEST_RESULTS_DIR := $$(TEST_RESULTS_DIR)/$1
   405   $1_TEST_RESULTS_DIR := $$(TEST_RESULTS_DIR)/$1
   400   $1_TEST_SUPPORT_DIR := $$(TEST_SUPPORT_DIR)/$1
   406   $1_TEST_SUPPORT_DIR := $$(TEST_SUPPORT_DIR)/$1
       
   407   $1_EXITCODE := $$($1_TEST_RESULTS_DIR)/exitcode.txt
   401 
   408 
   402   $1_TEST_NAME := $$(strip $$(patsubst jtreg:%, %, $$($1_TEST)))
   409   $1_TEST_NAME := $$(strip $$(patsubst jtreg:%, %, $$($1_TEST)))
   403 
   410 
   404   $1_COMPONENT := \
   411   $1_COMPONENT := \
   405       $$(strip $$(foreach root, $$(JTREG_TESTROOTS), \
   412       $$(strip $$(foreach root, $$(JTREG_TESTROOTS), \
   503 	        -dir:$$(JTREG_TOPDIR) \
   510 	        -dir:$$(JTREG_TOPDIR) \
   504 	        -reportDir:$$($1_TEST_RESULTS_DIR) \
   511 	        -reportDir:$$($1_TEST_RESULTS_DIR) \
   505 	        -workDir:$$($1_TEST_SUPPORT_DIR) \
   512 	        -workDir:$$($1_TEST_SUPPORT_DIR) \
   506 	        $$(JTREG_OPTIONS) \
   513 	        $$(JTREG_OPTIONS) \
   507 	        $$(JTREG_FAILURE_HANDLER_OPTIONS) \
   514 	        $$(JTREG_FAILURE_HANDLER_OPTIONS) \
   508 	        $$($1_TEST_NAME) || true )
   515 	        $$($1_TEST_NAME) \
       
   516 	    && $$(ECHO) $$$$? > $$($1_EXITCODE) \
       
   517 	    || $$(ECHO) $$$$? > $$($1_EXITCODE) \
       
   518 	)
   509 
   519 
   510   $1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/text/stats.txt
   520   $1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/text/stats.txt
   511 
   521 
   512   parse-test-$1: run-test-$1
   522   parse-test-$1: run-test-$1
   513 	$$(call LogWarn, Finished running test '$$($1_TEST)')
   523 	$$(call LogWarn, Finished running test '$$($1_TEST)')
   514 	$$(call LogWarn, Test report is stored in $$(strip \
   524 	$$(call LogWarn, Test report is stored in $$(strip \
   515 	    $$(subst $$(TOPDIR)/, , $$($1_TEST_RESULTS_DIR))))
   525 	    $$(subst $$(TOPDIR)/, , $$($1_TEST_RESULTS_DIR))))
   516 	$$(if  $$(wildcard $$($1_RESULT_FILE)), \
   526 	$$(if $$(wildcard $$($1_RESULT_FILE)), \
   517 	  $$(eval $1_PASSED := $$(shell $$(AWK) '{ gsub(/[,;]/, ""); \
   527 	  $$(eval $1_PASSED := $$(shell $$(AWK) '{ gsub(/[,;]/, ""); \
   518 	      for (i=1; i<=NF; i++) { if ($$$$i == "passed:") \
   528 	      for (i=1; i<=NF; i++) { if ($$$$i == "passed:") \
   519 	      print $$$$(i+1) } }' $$($1_RESULT_FILE))) \
   529 	      print $$$$(i+1) } }' $$($1_RESULT_FILE))) \
   520 	  $$(if $$($1_PASSED), , $$(eval $1_PASSED := 0)) \
   530 	  $$(if $$($1_PASSED), , $$(eval $1_PASSED := 0)) \
   521 	  $$(eval $1_FAILED := $$(shell $$(AWK) '{gsub(/[,;]/, ""); \
   531 	  $$(eval $1_FAILED := $$(shell $$(AWK) '{gsub(/[,;]/, ""); \
   553   $(if $(filter jtreg:%, $1), true)
   563   $(if $(filter jtreg:%, $1), true)
   554 
   564 
   555 # Now process each test to run and setup a proper make rule
   565 # Now process each test to run and setup a proper make rule
   556 $(foreach test, $(TESTS_TO_RUN), \
   566 $(foreach test, $(TESTS_TO_RUN), \
   557   $(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \
   567   $(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \
   558       $(TR) -cs '[a-z][A-Z][0-9]\n' '_')) \
   568       $(TR) -cs '[a-z][A-Z][0-9]\n' '[_*1000]')) \
   559   $(eval ALL_TEST_IDS += $(TEST_ID)) \
   569   $(eval ALL_TEST_IDS += $(TEST_ID)) \
   560   $(if $(call UseCustomTestHandler, $(test)), \
   570   $(if $(call UseCustomTestHandler, $(test)), \
   561     $(eval $(call SetupRunCustomTest, $(TEST_ID), \
   571     $(eval $(call SetupRunCustomTest, $(TEST_ID), \
   562         TEST := $(test), \
   572         TEST := $(test), \
   563     )) \
   573     )) \
   590 
   600 
   591 run-test: $(TARGETS)
   601 run-test: $(TARGETS)
   592         # Create and print a table of the result of all tests run
   602         # Create and print a table of the result of all tests run
   593 	$(RM) $(TEST_SUMMARY).old 2> /dev/null
   603 	$(RM) $(TEST_SUMMARY).old 2> /dev/null
   594 	$(MV) $(TEST_SUMMARY) $(TEST_SUMMARY).old 2> /dev/null || true
   604 	$(MV) $(TEST_SUMMARY) $(TEST_SUMMARY).old 2> /dev/null || true
       
   605 	$(RM) $(TEST_LAST_IDS).old 2> /dev/null
       
   606 	$(MV) $(TEST_LAST_IDS) $(TEST_LAST_IDS).old 2> /dev/null || true
   595 	$(ECHO) >> $(TEST_SUMMARY) ==============================
   607 	$(ECHO) >> $(TEST_SUMMARY) ==============================
   596 	$(ECHO) >> $(TEST_SUMMARY) Test summary
   608 	$(ECHO) >> $(TEST_SUMMARY) Test summary
   597 	$(ECHO) >> $(TEST_SUMMARY) ==============================
   609 	$(ECHO) >> $(TEST_SUMMARY) ==============================
   598 	$(PRINTF) >> $(TEST_SUMMARY) "%2s %-49s %5s %5s %5s %5s %2s\n" "  " \
   610 	$(PRINTF) >> $(TEST_SUMMARY) "%2s %-49s %5s %5s %5s %5s %2s\n" "  " \
   599 	    TEST TOTAL PASS FAIL ERROR " "
   611 	    TEST TOTAL PASS FAIL ERROR " "
   600 	$(foreach test, $(TESTS_TO_RUN), \
   612 	$(foreach test, $(TESTS_TO_RUN), \
   601 	  $(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \
   613 	  $(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \
   602 	      $(TR) -cs '[a-z][A-Z][0-9]\n' '_')) \
   614 	      $(TR) -cs '[a-z][A-Z][0-9]\n' '[_*1000]')) \
   603 	  $(eval NAME_PATTERN := $(shell $(ECHO) $(test) | $(TR) -c \\n _)) \
   615 	    $(ECHO) >> $(TEST_LAST_IDS) $(TEST_ID) $(NEWLINE) \
       
   616 	  $(eval NAME_PATTERN := $(shell $(ECHO) $(test) | $(TR) -c '\n' '[_*1000]')) \
   604 	  $(if $(filter __________________________________________________%, $(NAME_PATTERN)), \
   617 	  $(if $(filter __________________________________________________%, $(NAME_PATTERN)), \
   605 	    $(eval TEST_NAME := ) \
   618 	    $(eval TEST_NAME := ) \
   606 	    $(PRINTF) >> $(TEST_SUMMARY) "%2s %-49s\n" "  " "$(test)"  $(NEWLINE) \
   619 	    $(PRINTF) >> $(TEST_SUMMARY) "%2s %-49s\n" "  " "$(test)"  $(NEWLINE) \
   607 	  , \
   620 	  , \
   608 	    $(eval TEST_NAME := $(test)) \
   621 	    $(eval TEST_NAME := $(test)) \