21 # questions. |
21 # questions. |
22 # |
22 # |
23 # |
23 # |
24 |
24 |
25 # |
25 # |
26 # Makefile to run various jdk tests |
26 # Makefile to run various hotspot tests |
27 # |
27 # |
28 |
28 |
29 GETMIXEDPATH=echo |
29 GETMIXEDPATH=echo |
30 |
30 |
31 # Get OS/ARCH specifics |
31 # Utilities used |
32 OSNAME = $(shell uname -s) |
32 AWK = awk |
33 ifeq ($(OSNAME), SunOS) |
33 CAT = cat |
|
34 CD = cd |
|
35 CHMOD = chmod |
|
36 CP = cp |
|
37 CUT = cut |
|
38 DIRNAME = dirname |
|
39 ECHO = echo |
|
40 EGREP = egrep |
|
41 EXPAND = expand |
|
42 FIND = find |
|
43 MKDIR = mkdir |
|
44 PWD = pwd |
|
45 SED = sed |
|
46 SORT = sort |
|
47 TEE = tee |
|
48 UNAME = uname |
|
49 UNIQ = uniq |
|
50 WC = wc |
|
51 ZIP = zip |
|
52 |
|
53 # Get OS name from uname (Cygwin inexplicably adds _NT-5.1) |
|
54 UNAME_S := $(shell $(UNAME) -s | $(CUT) -f1 -d_) |
|
55 ifeq ($(UNAME_S), SunOS) |
34 PLATFORM = solaris |
56 PLATFORM = solaris |
35 SLASH_JAVA = /java |
57 SLASH_JAVA = /java |
36 ARCH = $(shell uname -p) |
58 ARCH = $(shell uname -p) |
37 ifeq ($(ARCH), i386) |
59 ifeq ($(ARCH), i386) |
38 ARCH=i586 |
60 ARCH=i586 |
39 endif |
61 endif |
40 endif |
62 endif |
41 ifeq ($(OSNAME), Linux) |
63 ifeq ($(UNAME_S), Linux) |
42 PLATFORM = linux |
64 PLATFORM = linux |
43 SLASH_JAVA = /java |
65 SLASH_JAVA = /java |
44 ARCH = $(shell uname -m) |
66 ARCH = $(shell uname -m) |
45 ifeq ($(ARCH), i386) |
67 ifeq ($(ARCH), i386) |
46 ARCH = i586 |
68 ARCH = i586 |
47 endif |
69 endif |
48 endif |
70 endif |
49 ifeq ($(OSNAME), Darwin) |
71 ifeq ($(UNAME_S), Darwin) |
50 PLATFORM = bsd |
72 PLATFORM = bsd |
51 SLASH_JAVA = /java |
73 SLASH_JAVA = /java |
52 ARCH = $(shell uname -m) |
74 ARCH = $(shell uname -m) |
53 ifeq ($(ARCH), i386) |
75 ifeq ($(ARCH), i386) |
54 ARCH = i586 |
76 ARCH = i586 |
55 endif |
77 endif |
56 endif |
78 endif |
57 ifeq ($(findstring BSD,$(OSNAME)), BSD) |
79 ifeq ($(findstring BSD,$(UNAME_S)), BSD) |
58 PLATFORM = bsd |
80 PLATFORM = bsd |
59 SLASH_JAVA = /java |
81 SLASH_JAVA = /java |
60 ARCH = $(shell uname -m) |
82 ARCH = $(shell uname -m) |
61 ifeq ($(ARCH), i386) |
83 ifeq ($(ARCH), i386) |
62 ARCH = i586 |
84 ARCH = i586 |
63 endif |
85 endif |
64 endif |
86 endif |
65 ifeq ($(PLATFORM),) |
87 ifeq ($(PLATFORM),) |
66 # detect wether we're running in MKS or cygwin |
88 # detect whether we're running in MKS or cygwin |
67 ifeq ($(OSNAME), Windows_NT) # MKS |
89 ifeq ($(UNAME_S), Windows_NT) # MKS |
68 GETMIXEDPATH=dosname -s |
90 GETMIXEDPATH=dosname -s |
69 endif |
91 endif |
70 ifeq ($(findstring CYGWIN,$(OSNAME)), CYGWIN) |
92 ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN) |
71 GETMIXEDPATH=cygpath -m -s |
93 GETMIXEDPATH=cygpath -m |
72 endif |
94 endif |
73 PLATFORM = windows |
95 PLATFORM = windows |
74 SLASH_JAVA = J: |
96 SLASH_JAVA = J: |
75 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64) |
97 ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64) |
76 ARCH = ia64 |
98 ARCH = ia64 |
134 ifdef JPRT_ARCHIVE_BUNDLE |
149 ifdef JPRT_ARCHIVE_BUNDLE |
135 ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE) |
150 ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE) |
136 endif |
151 endif |
137 |
152 |
138 # How to create the test bundle (pass or fail, we want to create this) |
153 # How to create the test bundle (pass or fail, we want to create this) |
139 BUNDLE_UP = ( $(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` \ |
154 # Follow command with ";$(BUNDLE_UP_AND_EXIT)", so it always gets executed. |
140 && $(CD) $(ABS_TEST_OUTPUT_DIR) \ |
155 ZIP_UP_RESULTS = ( $(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)` \ |
141 && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . ) |
156 && $(CD) $(ABS_TEST_OUTPUT_DIR) \ |
142 BUNDLE_UP_FAILED = ( exitCode=$$? && $(BUNDLE_UP) && exit $${exitCode} ) |
157 && $(CHMOD) -R a+r . \ |
|
158 && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . ) |
|
159 |
|
160 # important results files |
|
161 SUMMARY_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport/text/summary.txt") |
|
162 STATS_TXT_NAME = Stats.txt |
|
163 STATS_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/$(STATS_TXT_NAME)") |
|
164 RUNLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/runlist.txt") |
|
165 PASSLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/passlist.txt") |
|
166 FAILLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/faillist.txt") |
|
167 EXITCODE = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/exitcode.txt") |
|
168 |
|
169 TESTEXIT = \ |
|
170 if [ ! -s $(EXITCODE) ] ; then \ |
|
171 $(ECHO) "ERROR: EXITCODE file not filled in."; \ |
|
172 $(ECHO) "1" > $(EXITCODE); \ |
|
173 fi ; \ |
|
174 testExitCode=`$(CAT) $(EXITCODE)`; \ |
|
175 $(ECHO) "EXIT CODE: $${testExitCode}"; \ |
|
176 exit $${testExitCode} |
|
177 |
|
178 BUNDLE_UP_AND_EXIT = \ |
|
179 ( \ |
|
180 jtregExitCode=$$? && \ |
|
181 _summary="$(SUMMARY_TXT)"; \ |
|
182 $(RM) -f $(STATS_TXT) $(RUNLIST) $(PASSLIST) $(FAILLIST) $(EXITCODE); \ |
|
183 $(ECHO) "$${jtregExitCode}" > $(EXITCODE); \ |
|
184 if [ -r "$${_summary}" ] ; then \ |
|
185 $(ECHO) "Summary: $(UNIQUE_DIR)" > $(STATS_TXT); \ |
|
186 $(EXPAND) $${_summary} | $(EGREP) -v ' Not run\.' > $(RUNLIST); \ |
|
187 $(EGREP) ' Passed\.' $(RUNLIST) \ |
|
188 | $(EGREP) -v ' Error\.' \ |
|
189 | $(EGREP) -v ' Failed\.' > $(PASSLIST); \ |
|
190 ( $(EGREP) ' Failed\.' $(RUNLIST); \ |
|
191 $(EGREP) ' Error\.' $(RUNLIST); \ |
|
192 $(EGREP) -v ' Passed\.' $(RUNLIST) ) \ |
|
193 | $(SORT) | $(UNIQ) > $(FAILLIST); \ |
|
194 if [ $${jtregExitCode} != 0 -o -s $(FAILLIST) ] ; then \ |
|
195 $(EXPAND) $(FAILLIST) \ |
|
196 | $(CUT) -d' ' -f1 \ |
|
197 | $(SED) -e 's@^@FAILED: @' >> $(STATS_TXT); \ |
|
198 if [ $${jtregExitCode} = 0 ] ; then \ |
|
199 jtregExitCode=1; \ |
|
200 fi; \ |
|
201 fi; \ |
|
202 runc="`$(CAT) $(RUNLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ |
|
203 passc="`$(CAT) $(PASSLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ |
|
204 failc="`$(CAT) $(FAILLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ |
|
205 exclc="FIXME CODETOOLS-7900176"; \ |
|
206 $(ECHO) "TEST STATS: name=$(UNIQUE_DIR) run=$${runc} pass=$${passc} fail=$${failc}" \ |
|
207 >> $(STATS_TXT); \ |
|
208 else \ |
|
209 $(ECHO) "Missing file: $${_summary}" >> $(STATS_TXT); \ |
|
210 fi; \ |
|
211 if [ -f $(STATS_TXT) ] ; then \ |
|
212 $(CAT) $(STATS_TXT); \ |
|
213 fi; \ |
|
214 $(ZIP_UP_RESULTS) ; \ |
|
215 $(TESTEXIT) \ |
|
216 ) |
143 |
217 |
144 ################################################################ |
218 ################################################################ |
145 |
219 |
146 # Default make rule (runs jtreg_tests) |
220 # Default make rule (runs jtreg_tests) |
147 all: jtreg_tests |
221 all: hotspot_all |
148 @$(ECHO) "Testing completed successfully" |
222 @$(ECHO) "Testing completed successfully" |
149 |
223 |
150 # Support "hotspot_" prefixed test make targets too |
224 # Support "hotspot_" prefixed test make targets (too) |
151 # The hotspot_% targets are for example invoked by the top level Makefile |
225 # The hotspot_% targets are used by the top level Makefile |
|
226 # Unless explicitly defined below, hotspot_<x> is interpreted as a jtreg test group name |
152 hotspot_%: |
227 hotspot_%: |
153 $(MAKE) $* |
228 $(ECHO) "Running tests: $@" |
|
229 $(MAKE) -j 1 TEST_SELECTION=":$@" UNIQUE_DIR=$@ jtreg_tests; |
154 |
230 |
155 # Prep for output |
231 # Prep for output |
156 prep: clean |
232 prep: clean |
157 @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR) |
233 @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR) |
158 @$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` |
234 @$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` |
166 |
242 |
167 # jtreg tests |
243 # jtreg tests |
168 |
244 |
169 # Expect JT_HOME to be set for jtreg tests. (home for jtreg) |
245 # Expect JT_HOME to be set for jtreg tests. (home for jtreg) |
170 ifndef JT_HOME |
246 ifndef JT_HOME |
171 JT_HOME = $(SLASH_JAVA)/re/jtreg/4.0/promoted/latest/binaries/jtreg |
247 JT_HOME = $(SLASH_JAVA)/re/jtreg/4.1/promoted/latest/binaries/jtreg |
172 endif |
248 ifdef JPRT_JTREG_HOME |
173 ifdef JPRT_JTREG_HOME |
249 JT_HOME = $(JPRT_JTREG_HOME) |
174 JT_HOME = $(JPRT_JTREG_HOME) |
250 endif |
175 endif |
251 endif |
176 |
252 |
177 # Expect JPRT to set TESTDIRS to the jtreg test dirs |
253 # When called from JPRT the TESTDIRS variable is set to the jtreg tests to run |
178 JTREG_TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof |
|
179 ifdef TESTDIRS |
254 ifdef TESTDIRS |
180 JTREG_TESTDIRS = $(TESTDIRS) |
255 TEST_SELECTION = $(TESTDIRS) |
|
256 endif |
|
257 |
|
258 ifdef CONCURRENCY |
|
259 EXTRA_JTREG_OPTIONS += -concurrency:$(CONCURRENCY) |
181 endif |
260 endif |
182 |
261 |
183 # Default JTREG to run (win32 script works for everybody) |
262 # Default JTREG to run (win32 script works for everybody) |
184 JTREG = $(JT_HOME)/win32/bin/jtreg |
263 JTREG = $(JT_HOME)/win32/bin/jtreg |
|
264 |
|
265 # Only run automatic tests |
|
266 JTREG_BASIC_OPTIONS += -a |
|
267 # Report details on all failed or error tests, times too |
|
268 JTREG_BASIC_OPTIONS += -v:fail,error,time |
|
269 # Retain all files for failing tests |
|
270 JTREG_BASIC_OPTIONS += -retain:fail,error |
|
271 # Ignore tests are not run and completely silent about it |
|
272 JTREG_IGNORE_OPTION = -ignore:quiet |
|
273 JTREG_BASIC_OPTIONS += $(JTREG_IGNORE_OPTION) |
|
274 # Add any extra options |
|
275 JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS) |
|
276 # Set other vm and test options |
|
277 JTREG_TEST_OPTIONS = $(JAVA_ARGS:%=-javaoptions:%) $(JAVA_OPTIONS:%=-vmoption:%) $(JAVA_VM_ARGS:%=-vmoption:%) |
185 |
278 |
186 # Option to tell jtreg to not run tests marked with "ignore" |
279 # Option to tell jtreg to not run tests marked with "ignore" |
187 ifeq ($(PLATFORM), windows) |
280 ifeq ($(PLATFORM), windows) |
188 JTREG_KEY_OPTION = -k:!ignore |
281 JTREG_KEY_OPTION = -k:!ignore |
189 else |
282 else |
190 JTREG_KEY_OPTION = -k:\!ignore |
283 JTREG_KEY_OPTION = -k:\!ignore |
191 endif |
284 endif |
192 |
285 JTREG_BASIC_OPTIONS += $(JTREG_KEY_OPTION) |
193 #EXTRA_JTREG_OPTIONS = |
286 |
194 |
287 # Make sure jtreg exists |
195 jtreg_tests: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG) |
288 $(JTREG): $(JT_HOME) |
196 $(JTREG) -a -v:fail,error \ |
289 |
197 $(JTREG_KEY_OPTION) \ |
290 jtreg_tests: prep $(PRODUCT_HOME) $(JTREG) |
198 $(EXTRA_JTREG_OPTIONS) \ |
291 ( \ |
199 -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)")/JTreport \ |
292 ( JT_HOME=$(shell $(GETMIXEDPATH) "$(JT_HOME)"); \ |
200 -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)")/JTwork \ |
293 export JT_HOME; \ |
201 -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \ |
294 $(shell $(GETMIXEDPATH) "$(JTREG)") \ |
202 $(JAVA_OPTIONS:%=-vmoption:%) \ |
295 $(JTREG_BASIC_OPTIONS) \ |
203 $(JTREG_TESTDIRS) \ |
296 -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport") \ |
204 || $(BUNDLE_UP_FAILED) |
297 -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTwork") \ |
205 $(BUNDLE_UP) |
298 -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \ |
|
299 $(JTREG_EXCLUSIONS) \ |
|
300 $(JTREG_TEST_OPTIONS) \ |
|
301 $(TEST_SELECTION) \ |
|
302 ) ; \ |
|
303 $(BUNDLE_UP_AND_EXIT) \ |
|
304 ) 2>&1 | $(TEE) $(ABS_TEST_OUTPUT_DIR)/output.txt ; $(TESTEXIT) |
206 |
305 |
207 PHONY_LIST += jtreg_tests |
306 PHONY_LIST += jtreg_tests |
208 |
307 |
209 ################################################################ |
308 ################################################################ |
210 |
309 |
211 # clienttest (make sure various basic java client options work) |
310 # clienttest (make sure various basic java client options work) |
212 |
311 |
213 clienttest: prep $(PRODUCT_HOME) |
312 hotspot_clienttest clienttest: prep $(PRODUCT_HOME) |
214 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version |
313 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version |
215 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help |
314 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help |
216 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X |
315 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X |
217 $(RM) $(PRODUCT_HOME)/jre/lib/*/client/classes.jsa |
316 $(RM) $(PRODUCT_HOME)/jre/lib/*/client/classes.jsa |
218 $(RM) $(PRODUCT_HOME)/jre/bin/client/classes.jsa |
317 $(RM) $(PRODUCT_HOME)/jre/bin/client/classes.jsa |
219 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -Xshare:dump |
318 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -Xshare:dump |
220 |
319 |
221 PHONY_LIST += clienttest |
320 PHONY_LIST += hotspot_clienttest clienttest |
222 |
321 |
223 ################################################################ |
322 ################################################################ |
224 |
323 |
225 # servertest (make sure various basic java server options work) |
324 # servertest (make sure various basic java server options work) |
226 |
325 |
227 servertest: prep $(PRODUCT_HOME) |
326 hotspot_servertest servertest: prep $(PRODUCT_HOME) |
228 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version |
327 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version |
229 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help |
328 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help |
230 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X |
329 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X |
231 |
330 |
232 PHONY_LIST += servertest |
331 PHONY_LIST += hotspot_servertest servertest |
233 |
332 |
234 ################################################################ |
333 ################################################################ |
235 |
334 |
236 # internalvmtests (run internal unit tests inside the VM) |
335 # internalvmtests (run internal unit tests inside the VM) |
237 |
336 |
238 internalvmtests: prep $(PRODUCT_HOME) |
337 hotspot_internalvmtests internalvmtests: prep $(PRODUCT_HOME) |
239 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -XX:+ExecuteInternalVMTests -version |
338 $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -XX:+ExecuteInternalVMTests -version |
240 |
339 |
241 PHONY_LIST += internalvmtests |
340 PHONY_LIST += hotspot_internalvmtests internalvmtests |
242 |
|
243 ################################################################ |
|
244 |
|
245 # wbapitest (make sure the whitebox testing api classes work |
|
246 |
|
247 wbapitest: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG) |
|
248 $(JTREG) -a -v:fail,error \ |
|
249 $(JTREG_KEY_OPTION) \ |
|
250 $(EXTRA_JTREG_OPTIONS) \ |
|
251 -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)")/JTreport \ |
|
252 -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)")/JTwork \ |
|
253 -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \ |
|
254 $(JAVA_OPTIONS:%=-vmoption:%) \ |
|
255 $(shell $(GETMIXEDPATH) "$(TEST_ROOT)")/sanity \ |
|
256 || $(BUNDLE_UP_FAILED) |
|
257 $(BUNDLE_UP) |
|
258 |
|
259 PHONY_LIST += wbapitest |
|
260 |
|
261 ################################################################ |
|
262 |
|
263 # packtest |
|
264 |
|
265 # Expect JPRT to set JPRT_PACKTEST_HOME. |
|
266 PACKTEST_HOME = /net/jprt-web.sfbay.sun.com/jprt/allproducts/packtest |
|
267 ifdef JPRT_PACKTEST_HOME |
|
268 PACKTEST_HOME = $(JPRT_PACKTEST_HOME) |
|
269 endif |
|
270 |
|
271 #EXTRA_PACKTEST_OPTIONS = |
|
272 |
|
273 packtest: prep $(PACKTEST_HOME)/ptest $(PRODUCT_HOME) |
|
274 ( $(CD) $(PACKTEST_HOME) && \ |
|
275 $(PACKTEST_HOME)/ptest \ |
|
276 -t "$(PRODUCT_HOME)" \ |
|
277 $(PACKTEST_STRESS_OPTION) \ |
|
278 $(EXTRA_PACKTEST_OPTIONS) \ |
|
279 -W $(ABS_TEST_OUTPUT_DIR) \ |
|
280 $(JAVA_OPTIONS:%=-J %) \ |
|
281 ) || $(BUNDLE_UP_FAILED) |
|
282 $(BUNDLE_UP) |
|
283 |
|
284 packtest_stress: PACKTEST_STRESS_OPTION=-s |
|
285 packtest_stress: packtest |
|
286 |
|
287 PHONY_LIST += packtest packtest_stress |
|
288 |
341 |
289 ################################################################ |
342 ################################################################ |
290 |
343 |
291 # Phony targets (e.g. these are not filenames) |
344 # Phony targets (e.g. these are not filenames) |
292 .PHONY: all clean prep $(PHONY_LIST) |
345 .PHONY: all clean prep $(PHONY_LIST) |
293 |
346 |
294 ################################################################ |
347 ################################################################ |
295 |
|