CircularityErrorTest.sh revision 12973:2e63fa2efdb1
1#
2# Copyright (c) 2005, 2015, 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
25# @bug 6173575
26# @summary Unit tests for appendToBootstrapClassLoaderSearch and
27#   appendToSystemClasLoaderSearch methods.
28#
29# @run shell/timeout=240 CircularityErrorTest.sh
30
31if [ "${TESTSRC}" = "" ]
32then
33  echo "TESTSRC not set.  Test cannot execute.  Failed."
34  exit 1
35fi
36
37if [ "${COMPILEJAVA}" = "" ]
38then
39  COMPILEJAVA="${TESTJAVA}"
40fi
41
42. ${TESTSRC}/CommonSetup.sh
43
44# Setup to create circularity condition
45
46# B extends A
47# This yields us A.jar (containing A.class) and B.keep (class file)
48rm -f "${TESTCLASSES}"/A.java "${TESTCLASSES}"/B.java
49cp "${TESTSRC}"/A.1 "${TESTCLASSES}"/A.java
50cp "${TESTSRC}"/B.1 "${TESTCLASSES}"/B.java
51(cd "${TESTCLASSES}"; \
52    $JAVAC ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} A.java B.java; \
53    $JAVAC ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . "${TESTSRC}"/CircularityErrorTest.java; \
54    $JAR ${TESTTOOLVMOPTS} cf A.jar A.class; \
55    rm -f A.class; mv B.class B.keep)
56
57# A extends B
58# This yields us A.class
59rm -f "${TESTCLASSES}"/A.java "${TESTCLASSES}"/B.java
60cp "${TESTSRC}"/A.2 "${TESTCLASSES}"/A.java
61cp "${TESTSRC}"/B.2 "${TESTCLASSES}"/B.java
62(cd "${TESTCLASSES}"; \
63     $JAVAC ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} A.java B.java; rm -f B.class A.java B.java)
64
65# Move B.keep to B.class creates the A extends B and
66# B extends A condition.
67(cd "${TESTCLASSES}"; mv B.keep B.class)
68
69# Create the manifest
70MANIFEST="${TESTCLASSES}"/agent.mf
71rm -f "${MANIFEST}"
72echo "Premain-Class: CircularityErrorTest" > "${MANIFEST}"
73
74# Setup test case as an agent
75$JAR ${TESTTOOLVMOPTS} -cfm "${TESTCLASSES}"/CircularityErrorTest.jar "${MANIFEST}" \
76  -C "${TESTCLASSES}" CircularityErrorTest.class
77
78# Finally we run the test
79(cd "${TESTCLASSES}";
80  $JAVA ${TESTVMOPTS} -javaagent:CircularityErrorTest.jar CircularityErrorTest)
81