changeset 327:68e0443dfd9c

6745363: Add ability to run packtest to hotspot/test/makefile Reviewed-by: ksrini
author ohair
date Thu, 11 Sep 2008 11:04:55 -0700
parents f9847b70eccd
children 0ba3ec980ae5
files make/jprt.properties test/Makefile
diffstat 2 files changed, 145 insertions(+), 176 deletions(-) [+]
line wrap: on
line diff
--- a/make/jprt.properties	Wed Sep 10 06:15:02 2008 -0700
+++ b/make/jprt.properties	Thu Sep 11 11:04:55 2008 -0700
@@ -295,3 +295,9 @@
   ${jprt.my.windows.i586.test.targets}, \
   ${jprt.my.windows.x64.test.targets}
 
+# The default test/Makefile targets that should be run
+
+# Example:
+#   jprt.make.rule.test.targets=*-*-*-packtest
+#jprt.make.rule.test.targets=*-product-*-packtest
+
--- a/test/Makefile	Wed Sep 10 06:15:02 2008 -0700
+++ b/test/Makefile	Thu Sep 11 11:04:55 2008 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -19,17 +19,18 @@
 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 # CA 95054 USA or visit www.sun.com if you need additional information or
 # have any questions.
-#  
+#
 #
 
 #
-# Makefile to run jtreg
+# Makefile to run various jdk tests
 #
 
+# Get OS/ARCH specifics
 OSNAME = $(shell uname -s)
+SLASH_JAVA = /java
 ifeq ($(OSNAME), SunOS)
   PLATFORM = solaris
-  JCT_PLATFORM = solaris
   ARCH = $(shell uname -p)
   ifeq ($(ARCH), i386)
     ARCH=i586
@@ -37,203 +38,165 @@
 endif
 ifeq ($(OSNAME), Linux)
   PLATFORM = linux
-  JCT_PLATFORM = linux
   ARCH = $(shell uname -m)
   ifeq ($(ARCH), i386)
-    ARCH=i586
+    ARCH = i586
   endif
 endif
 ifeq ($(OSNAME), Windows_NT)
   PLATFORM = windows
-  JCT_PLATFORM = win32
+  SLASH_JAVA = J:
   ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
-    ARCH=ia64
+    ARCH = ia64
   else
     ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
-      ARCH=x64
+      ARCH = x64
     else
       ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T)
-        ARCH=x64
+        ARCH = x64
       else
-        ARCH=i586
+        ARCH = i586
       endif
     endif
   endif
-endif
-
-# Default bundle of all test results (passed or not)
-JPRT_ARCHIVE_BUNDLE=$(TEST_ROOT)/JPRT_ARCHIVE_BUNDLE.zip
-
-# Default home for JTREG
-ifeq ($(PLATFORM), windows)
-  JT_HOME = J:/svc/jct-tools3.2.2_01
-else
-  JT_HOME = /java/svc/jct-tools3.2.2_01
+  EXESUFFIX = .exe
 endif
 
-# Default JTREG to run
-JTREG = $(JT_HOME)/$(JCT_PLATFORM)/bin/jtreg
-
-# Root of this test area
-TEST_ROOT := $(shell pwd)
-
-# Default JDK to test
-JAVA_HOME = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
+# Utilities used
+CD    = cd
+CP    = cp
+ECHO  = echo
+MKDIR = mkdir
+ZIP   = zip
 
-# The test directories to run
-DEFAULT_TESTDIRS = serviceability
-TESTDIRS = $(DEFAULT_TESTDIRS)
-
-# Files that hold total passed and failed counts (passed==0 is bad)
-JTREG_TOTALS_DIR = $(TEST_ROOT)/JTREG_TOTALS_$(PLATFORM)_$(ARCH)
-JTREG_FAILED = $(JTREG_TOTALS_DIR)/failed_count
-JTREG_PASSED = $(JTREG_TOTALS_DIR)/passed_count
+# Root of this test area (important to use full paths in some places)
+TEST_ROOT := $(shell pwd)
 
 # Root of all test results
-JTREG_ALL_OUTPUT_DIRNAME = JTREG_OUTPUT_$(PLATFORM)_$(ARCH)
-JTREG_ALL_OUTPUT_DIR = $(TEST_ROOT)/$(JTREG_ALL_OUTPUT_DIRNAME)
-
-# Test results for one test directory
-JTREG_TEST_OUTPUT_DIR = $(JTREG_ALL_OUTPUT_DIR)/$@
-JTREG_TEST_REPORT_DIR = $(JTREG_TEST_OUTPUT_DIR)/JTreport
-JTREG_TEST_WORK_DIR   = $(JTREG_TEST_OUTPUT_DIR)/JTwork
-JTREG_TEST_SUMMARY    =	$(JTREG_TEST_REPORT_DIR)/summary.txt
-
-# Temp files used by this Makefile
-JTREG_TEST_TEMP_DIR   = $(JTREG_ALL_OUTPUT_DIR)/$@/temp
-JTREG_TEMP_PASSED     = $(JTREG_TEST_TEMP_DIR)/passed
-JTREG_TEMP_FAILED     = $(JTREG_TEST_TEMP_DIR)/failed
-JTREG_TEMP_OUTPUT     = $(JTREG_TEST_TEMP_DIR)/output
-JTREG_TEMP_RESULTS    = $(JTREG_TEST_TEMP_DIR)/results
-
-# JTREG options (different for 2.1.6 and 3.2.2_01)
-JTREG_COMMON_OPTIONS = -r:$(JTREG_TEST_REPORT_DIR) \
-                       -w:$(JTREG_TEST_WORK_DIR) \
-                       -testjdk:$(JAVA_HOME) \
-                       -automatic \
-	               -verbose:all
-JTREG_216_OPTIONS = $(JTREG_COMMON_OPTIONS) $@ $(JAVA_ARGS)
-JTREG_322_OPTIONS = $(JTREG_COMMON_OPTIONS) $(JAVA_ARGS:%=-vmoption:%) $@
-
-# Default make rule
-all: clean check tests
-
-# Chaeck to make sure these directories exist
-check: $(JT_HOME) $(JAVA_HOME) $(JTREG)
+ABS_BUILD_ROOT = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
+ABS_TEST_OUTPUT_DIR = $(ABS_BUILD_ROOT)/testoutput
 
-# Prime the test run
-primecounts: FRC
-	@rm -f -r $(JTREG_TOTALS_DIR)
-	@mkdir -p $(JTREG_TOTALS_DIR)
-	@echo "0" > $(JTREG_FAILED)
-	@echo "0" > $(JTREG_PASSED)
+# Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
+ifndef PRODUCT_HOME
+  # Try to use j2sdk-image if it exists
+  ABS_JDK_IMAGE = $(ABS_BUILD_ROOT)/j2sdk-image
+  PRODUCT_HOME :=                       \
+    $(shell                             \
+      if [ -d $(ABS_JDK_IMAGE) ] ; then \
+         $(ECHO) "$(ABS_JDK_IMAGE)";    \
+       else                             \
+         $(ECHO) "$(ABS_BUILD_ROOT)" ;  \
+       fi)
+endif
 
-# Run the tests and determine the 'make' command exit status
-#   Ultimately we determine the make exit code based on the passed/failed count
-tests: primecounts $(TESTDIRS)
-	@echo "JTREG TOTAL: passed=`cat $(JTREG_PASSED)` failed=`cat $(JTREG_FAILED)`"
-	zip -q -r $(JPRT_ARCHIVE_BUNDLE) $(JTREG_ALL_OUTPUT_DIRNAME)
-	@if [ `cat $(JTREG_FAILED)` -ne 0 -o \
-	     `cat $(JTREG_PASSED)` -le 0 ] ; then \
-	  echo "JTREG FAILED"; \
-	  exit 1; \
-	else \
-	  echo "JTREG PASSED"; \
-	  exit 0; \
-	fi
-
-# Just make sure these directires exist
-$(JT_HOME) $(JAVA_HOME): FRC
-	@if [ ! -d $@ ] ; then \
-	    echo "ERROR: Directory $@ does not exist"; \
-	    exit 1; \
-	fi
-
-# Make sure this file exists
-$(JTREG): FRC
-	@if [ ! -f $@ ] ; then \
-	    echo "ERROR: File $@ does not exist"; \
-	    exit 1; \
-	fi
+# Expect JPRT to set JAVA_ARGS (e.g. -server etc.)
+JAVA_OPTIONS = 
+ifdef JAVA_ARGS
+  JAVA_OPTIONS = $(JAVA_ARGS)
+endif
 
-# Process each test directory one by one, this rule always completes.
-#    Note that the use of 'tee' tosses the jtreg process exit status, this
-#    is as expected because even if jtreg fails, we need to save the
-#    output. So we update the JTREG_PASSED and JTREG_FAILED count files.
-#    Note that missing the 'results:' line in the last few lines of output
-#    will indicate a failure (or a bump by one of the JTREG_FAILED file.
-#    Note that passed: 0 or no passed: indication means a failure.
-#    Note that any indication of the word 'failed' indicates failure.
-#    Ultimately if the contents of JTREG_FAILED is not 0, we have failed 
-#    tests, and if the contents of JTREG_PASSED is 0, we consider that a
-#    failure.
-$(TESTDIRS):  FRC
-	@if [ ! -d $@ ] ; then \
-	    echo "ERROR: Directory $@ does not exist"; \
-	    exit 1; \
-	fi
-	@echo "---------------------------------------------------"
-	@rm -f -r $(JTREG_TEST_OUTPUT_DIR)
-	@mkdir -p $(JTREG_TEST_OUTPUT_DIR)
-	@mkdir -p $(JTREG_TEST_WORK_DIR)
-	@mkdir -p $(JTREG_TEST_WORK_DIR)/scratch
-	@mkdir -p $(JTREG_TEST_REPORT_DIR)
-	@mkdir -p $(JTREG_TEST_TEMP_DIR)
-	@echo "Testing $@"
-	@echo "Using JAVA_HOME=$(JAVA_HOME)"
-	@echo "Using JAVA_ARGS=$(JAVA_ARGS)"
-	@if [ "`$(JTREG) -help 2>&1 | fgrep -- -vmoption`" != "" ] ; then \
-	  echo "Assume we are using jtreg 3.2.2_01 or newer"; \
-	  echo "$(JTREG) $(JTREG_322_OPTIONS)"; \
-	  $(JTREG) $(JTREG_322_OPTIONS) 2>&1 | tee $(JTREG_TEMP_OUTPUT) ; \
-	else \
-	  echo "Assume we are using jtreg 2.1.6"; \
-	  echo "$(JTREG) $(JTREG_216_OPTIONS)"; \
-	  $(JTREG) $(JTREG_216_OPTIONS) 2>&1 | tee $(JTREG_TEMP_OUTPUT) ; \
-	fi
-	@echo "---------------------------------------------------"
-	@echo "Extracting passed and failed counts from jtreg output"
-	@tail -10 $(JTREG_TEMP_OUTPUT) | fgrep -i 'results:' | \
-	       tail -1 | tee $(JTREG_TEMP_RESULTS)
-	@sed -e 's@.*\ passed:\ \([1-9][0-9]*\).*@\1@' $(JTREG_TEMP_RESULTS) \
-	       > $(JTREG_TEMP_PASSED)
-	@if [ "`cat $(JTREG_TEMP_PASSED)`" = "" ] ; then \
-	  echo "ERROR: No passed indication in results"; \
-	  expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
-	elif [ `cat $(JTREG_TEMP_PASSED)` -le 0 ] ; then \
-	  echo "ERROR: Passed count appears to be 0"; \
-	  expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
-	elif [ "`fgrep -i failed $(JTREG_TEMP_RESULTS)`" = "" ] ; then \
-	  echo "No indication anything failed"; \
-	  expr `cat $(JTREG_PASSED)` '+' `cat $(JTREG_TEMP_PASSED)` \
-		> $(JTREG_PASSED); \
-	else \
-	  sed -e 's@.*\ failed:\ \([1-9][0-9]*\).*@\1@' $(JTREG_TEMP_FAILED) \
-		> $(JTREG_TEMP_FAILED); \
-	  if [ "`cat $(JTREG_TEMP_FAILED)`" = "" ] ; then \
-	    echo "ERROR: Failed pattern but no failed count in results"; \
-	    expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
-	  elif [ `cat $(JTREG_TEMP_FAILED)` -le 0 ] ; then \
-	    echo "ERROR: Failed count is 0, did something failed or not?"; \
-	    expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
-	  else \
-	    expr `cat $(JTREG_FAILED)` '+' `cat $(JTREG_TEMP_FAILED)` \
-		  > $(JTREG_FAILED); \
-	  fi; \
-	fi
-	@echo "---------------------------------------------------"
-	@echo "Summary: "
-	@if [ -f $(JTREG_TEST_SUMMARY) ] ; then \
-	  cat $(JTREG_TEST_SUMMARY) ; \
-	else \
-	  echo "ERROR: Missing $(JTREG_TEST_SUMMARY)"; \
-	fi
-	@echo "---------------------------------------------------"
+# Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results)
+ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip
+ifdef JPRT_ARCHIVE_BUNDLE
+  ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE)
+endif
+
+# How to create the test bundle (pass or fail, we want to create this)
+BUNDLE_UP = ( $(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)`     \
+	      && $(CD) $(ABS_TEST_OUTPUT_DIR)             \
+	      && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . )
+BUNDLE_UP_FAILED = ( exitCode=$$? && $(BUNDLE_UP) && exit $${exitCode} )
+
+################################################################
+
+# Default make rule (runs jtreg_tests)
+all: jtreg_tests
+	@$(ECHO) "Testing completed successfully"
+
+# Prep for output
+prep: clean
+	@$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
+	@$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)`
 
 # Cleanup
 clean:
-	rm -f -r $(JTREG_ALL_OUTPUT_DIR)
-	rm -f $(JPRT_ARCHIVE_BUNDLE)
+	$(RM) -r $(ABS_TEST_OUTPUT_DIR)
+	$(RM) $(ARCHIVE_BUNDLE)
+
+################################################################
+
+# jtreg tests
+
+# Expect JT_HOME to be set for jtreg tests. (home for jtreg)
+JT_HOME = $(SLASH_JAVA)/re/jtreg/4.0/promoted/latest/binaries/jtreg
+ifdef JPRT_JTREG_HOME
+  JT_HOME = $(JPRT_JTREG_HOME)
+endif
+
+# Expect JPRT to set TESTDIRS to the jtreg test dirs
+JTREG_TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof
+ifdef TESTDIRS
+  JTREG_TESTDIRS = $(TESTDIRS)
+endif
+
+# Default JTREG to run (win32 script works for everybody)
+JTREG = $(JT_HOME)/win32/bin/jtreg
+
+# Option to tell jtreg to not run tests marked with "ignore"
+ifeq ($(PLATFORM), windows)
+  JTREG_KEY_OPTION = -k:!ignore
+else
+  JTREG_KEY_OPTION = -k:\!ignore
+endif
+
+#EXTRA_JTREG_OPTIONS =
 
-FRC:
+jtreg_tests: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG)
+	$(JTREG) -a -v:fail,error               \
+          $(JTREG_KEY_OPTION)                   \
+          $(EXTRA_JTREG_OPTIONS)                \
+          -r:$(ABS_TEST_OUTPUT_DIR)/JTreport    \
+          -w:$(ABS_TEST_OUTPUT_DIR)/JTwork      \
+          -jdk:$(PRODUCT_HOME)                  \
+          $(JAVA_OPTIONS:%=-vmoption:%)         \
+          $(JTREG_TESTDIRS)                     \
+	  || $(BUNDLE_UP_FAILED)
+	$(BUNDLE_UP)
+
+PHONY_LIST += jtreg_tests
+
+################################################################
+
+# packtest
+
+# Expect JPRT to set JPRT_PACKTEST_HOME.
+PACKTEST_HOME = /net/jprt-web.sfbay.sun.com/jprt/allproducts/packtest
+ifdef JPRT_PACKTEST_HOME
+  PACKTEST_HOME = $(JPRT_PACKTEST_HOME)
+endif
 
+#EXTRA_PACKTEST_OPTIONS =
+
+packtest: prep $(PACKTEST_HOME)/ptest $(PRODUCT_HOME)
+	( $(CD) $(PACKTEST_HOME) &&            \
+	    $(PACKTEST_HOME)/ptest             \
+		 -t "$(PRODUCT_HOME)"          \
+	         $(PACKTEST_STRESS_OPTION)     \
+		 $(EXTRA_PACKTEST_OPTIONS)     \
+		 -W $(ABS_TEST_OUTPUT_DIR)     \
+                 $(JAVA_OPTIONS:%=-J %)        \
+	 ) || $(BUNDLE_UP_FAILED)
+	$(BUNDLE_UP)
+
+packtest_stress: PACKTEST_STRESS_OPTION=-s
+packtest_stress: packtest
+
+PHONY_LIST += packtest packtest_stress
+
+################################################################
+
+# Phony targets (e.g. these are not filenames)
+.PHONY: all clean prep $(PHONY_LIST)
+
+################################################################
+