jdk/test/tools/pack200/Pack200Simple.sh
changeset 6486 85f30f8aa7f3
parent 6485 5e6b2f2666ae
parent 6325 adf468d05745
child 6487 d6ad2c68a522
equal deleted inserted replaced
6485:5e6b2f2666ae 6486:85f30f8aa7f3
     1 #
       
     2 # Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
       
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4 #
       
     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
       
     7 # published by the Free Software Foundation.
       
     8 #
       
     9 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12 # version 2 for more details (a copy is included in the LICENSE file that
       
    13 # accompanied this code).
       
    14 #
       
    15 # You should have received a copy of the GNU General Public License version
       
    16 # 2 along with this work; if not, write to the Free Software Foundation,
       
    17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18 #
       
    19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20 # or visit www.oracle.com if you need additional information or have any
       
    21 # questions.
       
    22 #
       
    23 
       
    24 # @test Pack200Simple.sh
       
    25 # @bug  6521334
       
    26 # @build Pack200Test
       
    27 # @run shell/timeout=1200 Pack200Simple.sh
       
    28 # @summary An ad hoc test to verify class-file format.
       
    29 # @author Kumar Srinivasan
       
    30 
       
    31 # The goal of this test is to assist javac or other developers 
       
    32 # who modify class file formats, to quickly test those modifications
       
    33 # without having to build the install workspace. However it must
       
    34 # be noted that building the install workspace is the only know
       
    35 # way to prevent build breakages.
       
    36 
       
    37 # Pack200 developers could use this  as a basic smoke-test, however 
       
    38 # please note, there are other more elaborate and  thorough tests for 
       
    39 # this very purpose. 
       
    40 
       
    41 # We try a potpouri of things ie. we have pack.conf to setup some 
       
    42 # options as well as a couple of command line options. We also test
       
    43 # the packing and unpacking mechanism using the Java APIs.
       
    44 
       
    45 # print error and exit with a message 
       
    46 errorOut() {
       
    47   if [ "x$1" = "x" ]; then
       
    48     printf "Error: Unknown error\n"
       
    49   else
       
    50     printf "Error: %s\n" "$1"
       
    51   fi
       
    52 
       
    53   exit 1
       
    54 }
       
    55 
       
    56 # Verify directory context variables are set
       
    57 if [ "${TESTJAVA}" = "" ]; then
       
    58   errorOut "TESTJAVA not set.  Test cannot execute.  Failed."
       
    59 fi
       
    60 
       
    61 if [ "${TESTSRC}" = "" ]; then
       
    62   errorOut "TESTSRC not set.  Test cannot execute.  Failed."
       
    63 fi
       
    64 
       
    65 
       
    66 if [ "${TESTCLASSES}" = "" ]; then
       
    67   errorOut "TESTCLASSES not set.  Test cannot execute.  Failed."
       
    68 fi
       
    69 
       
    70 # The common java utils we need
       
    71 PACK200=${TESTJAVA}/bin/pack200
       
    72 UNPACK200=${TESTJAVA}/bin/unpack200
       
    73 JAR=${TESTJAVA}/bin/jar
       
    74 
       
    75 # For Windows and Linux needs the heap to be set, for others ergonomics
       
    76 # will do the rest. It is important to use ea, which can expose class
       
    77 # format errors much earlier than later.
       
    78 
       
    79 OS=`uname -s`
       
    80 
       
    81 
       
    82 case "$OS" in
       
    83   Windows*|CYGWIN* )
       
    84     PackOptions="-J-Xmx512m -J-ea"
       
    85     break
       
    86     ;;
       
    87 
       
    88   Linux )
       
    89     PackOptions="-J-Xmx512m -J-ea"
       
    90     break
       
    91     ;;
       
    92 
       
    93   * )
       
    94     PackOptions="-J-ea"
       
    95     ;;
       
    96 esac
       
    97 
       
    98 # Creates a packfile of choice expects 1 argument the filename
       
    99 createConfigFile() {
       
   100  # optimize for speed
       
   101  printf "pack.effort=1\n" > $1
       
   102  # we DO want to know about new attributes
       
   103  printf "pack.unknown.attribute=error\n" >> $1
       
   104  # optimize for speed
       
   105  printf "pack.deflate.hint=false\n" >> $1
       
   106  # keep the ordering for easy compare
       
   107  printf "pack.keep.class.order=true\n" >> $1
       
   108 }
       
   109 
       
   110 
       
   111 # Tests a given jar, expects 1 argument the fully qualified
       
   112 # name to a test jar, it writes all output to the current
       
   113 # directory which is a scratch  area.
       
   114 testAJar() {
       
   115   PackConf="pack.conf"
       
   116   createConfigFile $PackConf
       
   117 
       
   118   # Try some command line options
       
   119   CLIPackOptions="$PackOptions -v --no-gzip --segment-limit=10000 --config-file=$PackConf"
       
   120 
       
   121   jfName=`basename $1`
       
   122 
       
   123   ${PACK200}   $CLIPackOptions  ${jfName}.pack $1 > ${jfName}.pack.log 2>&1
       
   124   if [ $? != 0 ]; then
       
   125     errorOut "$jfName packing failed"
       
   126   fi
       
   127 
       
   128   # We want to test unpack200, therefore we dont use -r with pack
       
   129   ${UNPACK200} -v ${jfName}.pack $jfName > ${jfName}.unpack.log 2>&1
       
   130   if [ $? != 0 ]; then
       
   131     errorOut "$jfName unpacking failed"
       
   132   fi
       
   133 
       
   134   # A quick crc compare test to ensure a well formed zip
       
   135   # archive, this is a critical unpack200 behaviour.
       
   136 
       
   137   unzip -t $jfName > ${jfName}.unzip.log 2>&1 
       
   138   if [ $? != 0 ]; then
       
   139     errorOut "$jfName unzip -t test failed"
       
   140   fi
       
   141 
       
   142   # The PACK200 signature should be at the top of the log
       
   143   # this tag is critical for deployment related tools.
       
   144 
       
   145   head -5 ${jfName}.unzip.log | grep PACK200 > /dev/null 2>&1
       
   146   if [ $? != 0 ]; then
       
   147     errorOut "$jfName PACK200 signature missing"
       
   148   fi
       
   149 
       
   150 
       
   151   # we know  the size fields don't match, strip 'em out, its
       
   152   # extremely important to ensure that the date stamps match up.
       
   153   # Don't EVER sort the output we are checking for correct ordering.
       
   154 
       
   155   ${JAR} -tvf $1 | sed -e 's/^ *[0-9]* //g'> ${jfName}.ref.txt
       
   156   ${JAR} -tvf $jfName | sed -e 's/^ *[0-9]* //g'> ${jfName}.cmp.txt
       
   157 
       
   158   diff ${jfName}.ref.txt ${jfName}.cmp.txt > ${jfName}.diff.log 2>&1
       
   159   if [ $? != 0 ]; then
       
   160     errorOut "$jfName files missing"
       
   161   fi
       
   162 }
       
   163 
       
   164 # These JARs are the largest and also the most likely specimens to 
       
   165 # expose class format issues and stress the packer as well.
       
   166 
       
   167 JLIST="${TESTJAVA}/lib/tools.jar ${TESTJAVA}/jre/lib/rt.jar"
       
   168 
       
   169 
       
   170 # Test the Command Line Interfaces (CLI).
       
   171 mkdir cliTestDir 
       
   172 _pwd=`pwd`
       
   173 cd cliTestDir
       
   174 
       
   175 for jarfile in $JLIST ; do 
       
   176   if [ -f $jarfile ]; then
       
   177     testAJar $jarfile
       
   178   else
       
   179     errorOut "Error: '$jarFile' does not exist\nTest requires a j2sdk-image\n"
       
   180   fi
       
   181 done
       
   182 cd $_pwd
       
   183 
       
   184 # Test the Java APIs.
       
   185 mkdir apiTestDir 
       
   186 _pwd=`pwd`
       
   187 cd  apiTestDir
       
   188 
       
   189 # Strip out the -J prefixes.
       
   190 JavaPackOptions=`printf %s "$PackOptions" | sed -e 's/-J//g'`
       
   191 
       
   192 # Test the Java APIs now.
       
   193 $TESTJAVA/bin/java $JavaPackOptions -cp $TESTCLASSES Pack200Test $JLIST || exit 1
       
   194 
       
   195 cd $_pwd
       
   196 
       
   197 exit 0