view test/Makefile @ 94:0834225a7916

6634032: CMS: Need CMSInitiatingPermOccupancyFraction for perm, divorcing from CMSInitiatingOccupancyFraction Summary: The option CMSInitiatingPermOccupancyFraction now controls perm triggering threshold. Even though the actual value of the threshold has not yet been changed, so there is no change in policy, we now have the infrastructure in place for dynamically deciding when to collect the perm gen, an issue that will be addressed in the near future. Reviewed-by: jmasa
author ysr
date Sun, 16 Mar 2008 21:57:25 -0700
parents a61af66fc99e
children 68e0443dfd9c
line wrap: on
line source

#
# Copyright 2006 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
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# 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
#

OSNAME = $(shell uname -s)
ifeq ($(OSNAME), SunOS)
  PLATFORM = solaris
  JCT_PLATFORM = solaris
  ARCH = $(shell uname -p)
  ifeq ($(ARCH), i386)
    ARCH=i586
  endif
endif
ifeq ($(OSNAME), Linux)
  PLATFORM = linux
  JCT_PLATFORM = linux
  ARCH = $(shell uname -m)
  ifeq ($(ARCH), i386)
    ARCH=i586
  endif
endif
ifeq ($(OSNAME), Windows_NT)
  PLATFORM = windows
  JCT_PLATFORM = win32
  ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
    ARCH=ia64
  else
    ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
      ARCH=x64
    else
      ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T)
        ARCH=x64
      else
        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
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)

# 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 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)

# 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)

# 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

# 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 "---------------------------------------------------"

# Cleanup
clean:
	rm -f -r $(JTREG_ALL_OUTPUT_DIR)
	rm -f $(JPRT_ARCHIVE_BUNDLE)

FRC: