comparison test/Makefile @ 328: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 a61af66fc99e
children b79faa366fbd
comparison
equal deleted inserted replaced
322:f9847b70eccd 328:68e0443dfd9c
1 # 1 #
2 # Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. 2 # Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 # 4 #
5 # This code is free software; you can redistribute it and/or modify it 5 # This code is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License version 2 only, as 6 # under the terms of the GNU General Public License version 2 only, as
7 # published by the Free Software Foundation. 7 # published by the Free Software Foundation.
17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 # 18 #
19 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 19 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 # CA 95054 USA or visit www.sun.com if you need additional information or 20 # CA 95054 USA or visit www.sun.com if you need additional information or
21 # have any questions. 21 # have any questions.
22 # 22 #
23 # 23 #
24 24
25 # 25 #
26 # Makefile to run jtreg 26 # Makefile to run various jdk tests
27 # 27 #
28 28
29 # Get OS/ARCH specifics
29 OSNAME = $(shell uname -s) 30 OSNAME = $(shell uname -s)
31 SLASH_JAVA = /java
30 ifeq ($(OSNAME), SunOS) 32 ifeq ($(OSNAME), SunOS)
31 PLATFORM = solaris 33 PLATFORM = solaris
32 JCT_PLATFORM = solaris
33 ARCH = $(shell uname -p) 34 ARCH = $(shell uname -p)
34 ifeq ($(ARCH), i386) 35 ifeq ($(ARCH), i386)
35 ARCH=i586 36 ARCH=i586
36 endif 37 endif
37 endif 38 endif
38 ifeq ($(OSNAME), Linux) 39 ifeq ($(OSNAME), Linux)
39 PLATFORM = linux 40 PLATFORM = linux
40 JCT_PLATFORM = linux
41 ARCH = $(shell uname -m) 41 ARCH = $(shell uname -m)
42 ifeq ($(ARCH), i386) 42 ifeq ($(ARCH), i386)
43 ARCH=i586 43 ARCH = i586
44 endif 44 endif
45 endif 45 endif
46 ifeq ($(OSNAME), Windows_NT) 46 ifeq ($(OSNAME), Windows_NT)
47 PLATFORM = windows 47 PLATFORM = windows
48 JCT_PLATFORM = win32 48 SLASH_JAVA = J:
49 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64) 49 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
50 ARCH=ia64 50 ARCH = ia64
51 else 51 else
52 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64) 52 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
53 ARCH=x64 53 ARCH = x64
54 else 54 else
55 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T) 55 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T)
56 ARCH=x64 56 ARCH = x64
57 else 57 else
58 ARCH=i586 58 ARCH = i586
59 endif 59 endif
60 endif 60 endif
61 endif 61 endif
62 endif 62 EXESUFFIX = .exe
63 63 endif
64 # Default bundle of all test results (passed or not) 64
65 JPRT_ARCHIVE_BUNDLE=$(TEST_ROOT)/JPRT_ARCHIVE_BUNDLE.zip 65 # Utilities used
66 66 CD = cd
67 # Default home for JTREG 67 CP = cp
68 ifeq ($(PLATFORM), windows) 68 ECHO = echo
69 JT_HOME = J:/svc/jct-tools3.2.2_01 69 MKDIR = mkdir
70 else 70 ZIP = zip
71 JT_HOME = /java/svc/jct-tools3.2.2_01 71
72 endif 72 # Root of this test area (important to use full paths in some places)
73
74 # Default JTREG to run
75 JTREG = $(JT_HOME)/$(JCT_PLATFORM)/bin/jtreg
76
77 # Root of this test area
78 TEST_ROOT := $(shell pwd) 73 TEST_ROOT := $(shell pwd)
79 74
80 # Default JDK to test
81 JAVA_HOME = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
82
83 # The test directories to run
84 DEFAULT_TESTDIRS = serviceability
85 TESTDIRS = $(DEFAULT_TESTDIRS)
86
87 # Files that hold total passed and failed counts (passed==0 is bad)
88 JTREG_TOTALS_DIR = $(TEST_ROOT)/JTREG_TOTALS_$(PLATFORM)_$(ARCH)
89 JTREG_FAILED = $(JTREG_TOTALS_DIR)/failed_count
90 JTREG_PASSED = $(JTREG_TOTALS_DIR)/passed_count
91
92 # Root of all test results 75 # Root of all test results
93 JTREG_ALL_OUTPUT_DIRNAME = JTREG_OUTPUT_$(PLATFORM)_$(ARCH) 76 ABS_BUILD_ROOT = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
94 JTREG_ALL_OUTPUT_DIR = $(TEST_ROOT)/$(JTREG_ALL_OUTPUT_DIRNAME) 77 ABS_TEST_OUTPUT_DIR = $(ABS_BUILD_ROOT)/testoutput
95 78
96 # Test results for one test directory 79 # Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
97 JTREG_TEST_OUTPUT_DIR = $(JTREG_ALL_OUTPUT_DIR)/$@ 80 ifndef PRODUCT_HOME
98 JTREG_TEST_REPORT_DIR = $(JTREG_TEST_OUTPUT_DIR)/JTreport 81 # Try to use j2sdk-image if it exists
99 JTREG_TEST_WORK_DIR = $(JTREG_TEST_OUTPUT_DIR)/JTwork 82 ABS_JDK_IMAGE = $(ABS_BUILD_ROOT)/j2sdk-image
100 JTREG_TEST_SUMMARY = $(JTREG_TEST_REPORT_DIR)/summary.txt 83 PRODUCT_HOME := \
101 84 $(shell \
102 # Temp files used by this Makefile 85 if [ -d $(ABS_JDK_IMAGE) ] ; then \
103 JTREG_TEST_TEMP_DIR = $(JTREG_ALL_OUTPUT_DIR)/$@/temp 86 $(ECHO) "$(ABS_JDK_IMAGE)"; \
104 JTREG_TEMP_PASSED = $(JTREG_TEST_TEMP_DIR)/passed 87 else \
105 JTREG_TEMP_FAILED = $(JTREG_TEST_TEMP_DIR)/failed 88 $(ECHO) "$(ABS_BUILD_ROOT)" ; \
106 JTREG_TEMP_OUTPUT = $(JTREG_TEST_TEMP_DIR)/output 89 fi)
107 JTREG_TEMP_RESULTS = $(JTREG_TEST_TEMP_DIR)/results 90 endif
108 91
109 # JTREG options (different for 2.1.6 and 3.2.2_01) 92 # Expect JPRT to set JAVA_ARGS (e.g. -server etc.)
110 JTREG_COMMON_OPTIONS = -r:$(JTREG_TEST_REPORT_DIR) \ 93 JAVA_OPTIONS =
111 -w:$(JTREG_TEST_WORK_DIR) \ 94 ifdef JAVA_ARGS
112 -testjdk:$(JAVA_HOME) \ 95 JAVA_OPTIONS = $(JAVA_ARGS)
113 -automatic \ 96 endif
114 -verbose:all 97
115 JTREG_216_OPTIONS = $(JTREG_COMMON_OPTIONS) $@ $(JAVA_ARGS) 98 # Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results)
116 JTREG_322_OPTIONS = $(JTREG_COMMON_OPTIONS) $(JAVA_ARGS:%=-vmoption:%) $@ 99 ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip
117 100 ifdef JPRT_ARCHIVE_BUNDLE
118 # Default make rule 101 ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE)
119 all: clean check tests 102 endif
120 103
121 # Chaeck to make sure these directories exist 104 # How to create the test bundle (pass or fail, we want to create this)
122 check: $(JT_HOME) $(JAVA_HOME) $(JTREG) 105 BUNDLE_UP = ( $(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` \
123 106 && $(CD) $(ABS_TEST_OUTPUT_DIR) \
124 # Prime the test run 107 && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . )
125 primecounts: FRC 108 BUNDLE_UP_FAILED = ( exitCode=$$? && $(BUNDLE_UP) && exit $${exitCode} )
126 @rm -f -r $(JTREG_TOTALS_DIR) 109
127 @mkdir -p $(JTREG_TOTALS_DIR) 110 ################################################################
128 @echo "0" > $(JTREG_FAILED) 111
129 @echo "0" > $(JTREG_PASSED) 112 # Default make rule (runs jtreg_tests)
130 113 all: jtreg_tests
131 # Run the tests and determine the 'make' command exit status 114 @$(ECHO) "Testing completed successfully"
132 # Ultimately we determine the make exit code based on the passed/failed count 115
133 tests: primecounts $(TESTDIRS) 116 # Prep for output
134 @echo "JTREG TOTAL: passed=`cat $(JTREG_PASSED)` failed=`cat $(JTREG_FAILED)`" 117 prep: clean
135 zip -q -r $(JPRT_ARCHIVE_BUNDLE) $(JTREG_ALL_OUTPUT_DIRNAME) 118 @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
136 @if [ `cat $(JTREG_FAILED)` -ne 0 -o \ 119 @$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)`
137 `cat $(JTREG_PASSED)` -le 0 ] ; then \
138 echo "JTREG FAILED"; \
139 exit 1; \
140 else \
141 echo "JTREG PASSED"; \
142 exit 0; \
143 fi
144
145 # Just make sure these directires exist
146 $(JT_HOME) $(JAVA_HOME): FRC
147 @if [ ! -d $@ ] ; then \
148 echo "ERROR: Directory $@ does not exist"; \
149 exit 1; \
150 fi
151
152 # Make sure this file exists
153 $(JTREG): FRC
154 @if [ ! -f $@ ] ; then \
155 echo "ERROR: File $@ does not exist"; \
156 exit 1; \
157 fi
158
159 # Process each test directory one by one, this rule always completes.
160 # Note that the use of 'tee' tosses the jtreg process exit status, this
161 # is as expected because even if jtreg fails, we need to save the
162 # output. So we update the JTREG_PASSED and JTREG_FAILED count files.
163 # Note that missing the 'results:' line in the last few lines of output
164 # will indicate a failure (or a bump by one of the JTREG_FAILED file.
165 # Note that passed: 0 or no passed: indication means a failure.
166 # Note that any indication of the word 'failed' indicates failure.
167 # Ultimately if the contents of JTREG_FAILED is not 0, we have failed
168 # tests, and if the contents of JTREG_PASSED is 0, we consider that a
169 # failure.
170 $(TESTDIRS): FRC
171 @if [ ! -d $@ ] ; then \
172 echo "ERROR: Directory $@ does not exist"; \
173 exit 1; \
174 fi
175 @echo "---------------------------------------------------"
176 @rm -f -r $(JTREG_TEST_OUTPUT_DIR)
177 @mkdir -p $(JTREG_TEST_OUTPUT_DIR)
178 @mkdir -p $(JTREG_TEST_WORK_DIR)
179 @mkdir -p $(JTREG_TEST_WORK_DIR)/scratch
180 @mkdir -p $(JTREG_TEST_REPORT_DIR)
181 @mkdir -p $(JTREG_TEST_TEMP_DIR)
182 @echo "Testing $@"
183 @echo "Using JAVA_HOME=$(JAVA_HOME)"
184 @echo "Using JAVA_ARGS=$(JAVA_ARGS)"
185 @if [ "`$(JTREG) -help 2>&1 | fgrep -- -vmoption`" != "" ] ; then \
186 echo "Assume we are using jtreg 3.2.2_01 or newer"; \
187 echo "$(JTREG) $(JTREG_322_OPTIONS)"; \
188 $(JTREG) $(JTREG_322_OPTIONS) 2>&1 | tee $(JTREG_TEMP_OUTPUT) ; \
189 else \
190 echo "Assume we are using jtreg 2.1.6"; \
191 echo "$(JTREG) $(JTREG_216_OPTIONS)"; \
192 $(JTREG) $(JTREG_216_OPTIONS) 2>&1 | tee $(JTREG_TEMP_OUTPUT) ; \
193 fi
194 @echo "---------------------------------------------------"
195 @echo "Extracting passed and failed counts from jtreg output"
196 @tail -10 $(JTREG_TEMP_OUTPUT) | fgrep -i 'results:' | \
197 tail -1 | tee $(JTREG_TEMP_RESULTS)
198 @sed -e 's@.*\ passed:\ \([1-9][0-9]*\).*@\1@' $(JTREG_TEMP_RESULTS) \
199 > $(JTREG_TEMP_PASSED)
200 @if [ "`cat $(JTREG_TEMP_PASSED)`" = "" ] ; then \
201 echo "ERROR: No passed indication in results"; \
202 expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
203 elif [ `cat $(JTREG_TEMP_PASSED)` -le 0 ] ; then \
204 echo "ERROR: Passed count appears to be 0"; \
205 expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
206 elif [ "`fgrep -i failed $(JTREG_TEMP_RESULTS)`" = "" ] ; then \
207 echo "No indication anything failed"; \
208 expr `cat $(JTREG_PASSED)` '+' `cat $(JTREG_TEMP_PASSED)` \
209 > $(JTREG_PASSED); \
210 else \
211 sed -e 's@.*\ failed:\ \([1-9][0-9]*\).*@\1@' $(JTREG_TEMP_FAILED) \
212 > $(JTREG_TEMP_FAILED); \
213 if [ "`cat $(JTREG_TEMP_FAILED)`" = "" ] ; then \
214 echo "ERROR: Failed pattern but no failed count in results"; \
215 expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
216 elif [ `cat $(JTREG_TEMP_FAILED)` -le 0 ] ; then \
217 echo "ERROR: Failed count is 0, did something failed or not?"; \
218 expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
219 else \
220 expr `cat $(JTREG_FAILED)` '+' `cat $(JTREG_TEMP_FAILED)` \
221 > $(JTREG_FAILED); \
222 fi; \
223 fi
224 @echo "---------------------------------------------------"
225 @echo "Summary: "
226 @if [ -f $(JTREG_TEST_SUMMARY) ] ; then \
227 cat $(JTREG_TEST_SUMMARY) ; \
228 else \
229 echo "ERROR: Missing $(JTREG_TEST_SUMMARY)"; \
230 fi
231 @echo "---------------------------------------------------"
232 120
233 # Cleanup 121 # Cleanup
234 clean: 122 clean:
235 rm -f -r $(JTREG_ALL_OUTPUT_DIR) 123 $(RM) -r $(ABS_TEST_OUTPUT_DIR)
236 rm -f $(JPRT_ARCHIVE_BUNDLE) 124 $(RM) $(ARCHIVE_BUNDLE)
237 125
238 FRC: 126 ################################################################
239 127
128 # jtreg tests
129
130 # Expect JT_HOME to be set for jtreg tests. (home for jtreg)
131 JT_HOME = $(SLASH_JAVA)/re/jtreg/4.0/promoted/latest/binaries/jtreg
132 ifdef JPRT_JTREG_HOME
133 JT_HOME = $(JPRT_JTREG_HOME)
134 endif
135
136 # Expect JPRT to set TESTDIRS to the jtreg test dirs
137 JTREG_TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof
138 ifdef TESTDIRS
139 JTREG_TESTDIRS = $(TESTDIRS)
140 endif
141
142 # Default JTREG to run (win32 script works for everybody)
143 JTREG = $(JT_HOME)/win32/bin/jtreg
144
145 # Option to tell jtreg to not run tests marked with "ignore"
146 ifeq ($(PLATFORM), windows)
147 JTREG_KEY_OPTION = -k:!ignore
148 else
149 JTREG_KEY_OPTION = -k:\!ignore
150 endif
151
152 #EXTRA_JTREG_OPTIONS =
153
154 jtreg_tests: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG)
155 $(JTREG) -a -v:fail,error \
156 $(JTREG_KEY_OPTION) \
157 $(EXTRA_JTREG_OPTIONS) \
158 -r:$(ABS_TEST_OUTPUT_DIR)/JTreport \
159 -w:$(ABS_TEST_OUTPUT_DIR)/JTwork \
160 -jdk:$(PRODUCT_HOME) \
161 $(JAVA_OPTIONS:%=-vmoption:%) \
162 $(JTREG_TESTDIRS) \
163 || $(BUNDLE_UP_FAILED)
164 $(BUNDLE_UP)
165
166 PHONY_LIST += jtreg_tests
167
168 ################################################################
169
170 # packtest
171
172 # Expect JPRT to set JPRT_PACKTEST_HOME.
173 PACKTEST_HOME = /net/jprt-web.sfbay.sun.com/jprt/allproducts/packtest
174 ifdef JPRT_PACKTEST_HOME
175 PACKTEST_HOME = $(JPRT_PACKTEST_HOME)
176 endif
177
178 #EXTRA_PACKTEST_OPTIONS =
179
180 packtest: prep $(PACKTEST_HOME)/ptest $(PRODUCT_HOME)
181 ( $(CD) $(PACKTEST_HOME) && \
182 $(PACKTEST_HOME)/ptest \
183 -t "$(PRODUCT_HOME)" \
184 $(PACKTEST_STRESS_OPTION) \
185 $(EXTRA_PACKTEST_OPTIONS) \
186 -W $(ABS_TEST_OUTPUT_DIR) \
187 $(JAVA_OPTIONS:%=-J %) \
188 ) || $(BUNDLE_UP_FAILED)
189 $(BUNDLE_UP)
190
191 packtest_stress: PACKTEST_STRESS_OPTION=-s
192 packtest_stress: packtest
193
194 PHONY_LIST += packtest packtest_stress
195
196 ################################################################
197
198 # Phony targets (e.g. these are not filenames)
199 .PHONY: all clean prep $(PHONY_LIST)
200
201 ################################################################
202