test/hotspot/jtreg/vmTestbase/nsk/jdi/ReferenceType/instances/instances003/instances003.java
author pliden
Tue, 12 Jun 2018 17:40:28 +0200
changeset 50525 767cdb97f103
parent 50018 3ba0d8631f24
child 52574 8ba2479fe7fa
permissions -rw-r--r--
8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental) Reviewed-by: pliden, stefank, eosterlund, ehelin, sjohanss, rbackman, coleenp, ihse, jgeorge, lmesnik, rkennke Contributed-by: per.liden@oracle.com, stefan.karlsson@oracle.com, erik.osterlund@oracle.com, mikael.gerdin@oracle.com, kim.barrett@oracle.com, nils.eliasson@oracle.com, rickard.backman@oracle.com, rwestrel@redhat.com, coleen.phillimore@oracle.com, robbin.ehn@oracle.com, gerard.ziemski@oracle.com, hugh.wilkinson@intel.com, sandhya.viswanathan@intel.com, bill.npo.wheeler@intel.com, vinay.k.awasthi@intel.com, yasuenag@gmail.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50018
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     1
/*
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     2
 * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     4
 *
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     8
 *
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    13
 * accompanied this code).
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    14
 *
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    18
 *
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    21
 * questions.
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    22
 */
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    23
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    24
/*
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    25
 * @test
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    26
 *
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    27
 * @summary converted from VM Testbase nsk/jdi/ReferenceType/instances/instances003.
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    28
 * VM Testbase keywords: [jpda, jdi, feature_jdk6_jpda, vm6]
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    29
 * VM Testbase readme:
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    30
 * DESCRIPTION
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    31
 *      The test scenario is following:
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    32
 *         - Debugger VM
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    33
 *         for refererence_type in <Strong, JNI_Local_Ref, JNI_Global_Ref, JNI_Weak_Ref, PhantomReference, SoftReference, WeakReference>
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    34
 *                 - initiate creation test class instances  of type 'refererence_type' in debuggee VM
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    35
 *                 - prevent some instances from being garbage collected using ObjectReference.disableCollection
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    36
 *                 - initiate GarbageCollection in Debuggee VM
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    37
 *                 - check the number of instances is left is correct
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    38
 *                 - enables Garbage Collection for instances for which it were previously disabled using ObjectReference.enableCollection
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    39
 *                 - initiate GarbageCollection in Debuggee VM
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    40
 *                 - check the number of instances is 0
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    41
 *         done
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    42
 *         Test is executed for following sublcasses of ObjectReference: StringReference, ThreadReference, ClassLoaderReference
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    43
 *
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents: 50018
diff changeset
    44
 * @requires vm.gc != "Z"
50018
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    45
 * @library /vmTestbase
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    46
 *          /test/lib
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    47
 * @run driver jdk.test.lib.FileInstaller . .
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    48
 * @build nsk.jdi.ReferenceType.instances.instances003.instances003
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    49
 * @run main/othervm/native PropertyResolvingWrapper
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    50
 *      nsk.jdi.ReferenceType.instances.instances003.instances003
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    51
 *      -verbose
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    52
 *      -arch=${os.family}-${os.simpleArch}
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    53
 *      -waittime=5
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    54
 *      -debugee.vmkind=java
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    55
 *      -transport.address=dynamic
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    56
 *      "-debugee.vmkeys=-Xmx128M ${test.vm.opts} ${test.java.opts}"
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    57
 *      -testClassNames nsk.jdi.ReferenceType.instances.instances003.instances003$TestClassLoader:java.lang.String:java.lang.Thread
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    58
 */
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    59
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    60
package nsk.jdi.ReferenceType.instances.instances003;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    61
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    62
import java.io.PrintStream;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    63
import java.util.*;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    64
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    65
import com.sun.jdi.ObjectReference;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    66
import com.sun.jdi.ReferenceType;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    67
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    68
import nsk.share.Consts;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    69
import nsk.share.ObjectInstancesManager;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    70
import nsk.share.TestBug;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    71
import nsk.share.jdi.HeapwalkingDebuggee;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    72
import nsk.share.jdi.HeapwalkingDebugger;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    73
import nsk.share.jpda.AbstractDebuggeeTest;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    74
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    75
public class instances003 extends HeapwalkingDebugger {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    76
    // use subclass of java.lang.ClassLoader to be sure that there are no its instances in debuggee VM
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    77
    public static class TestClassLoader extends ClassLoader {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    78
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    79
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    80
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    81
    private String testClasses[];
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    82
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    83
    protected String[] doInit(String[] args, PrintStream out) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    84
        args = super.doInit(args, out);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    85
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    86
        ArrayList<String> standardArgs = new ArrayList<String>();
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    87
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    88
        for (int i = 0; i < args.length; i++) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    89
            if (args[i].equals("-testClassNames") && (i < args.length - 1)) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    90
                testClasses = args[i + 1].split(":");
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    91
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    92
                i++;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    93
            } else
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    94
                standardArgs.add(args[i]);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    95
        }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    96
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    97
        if ((testClasses == null) || (testClasses.length == 0))
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    98
            throw new TestBug("Test class names was not specified, use test parameter '-testClassNames'");
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
    99
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   100
        return standardArgs.toArray(new String[] {});
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   101
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   102
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   103
    public static void main(String argv[]) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   104
        System.exit(run(argv, System.out) + Consts.JCK_STATUS_BASE);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   105
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   106
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   107
    public static int run(String argv[], PrintStream out) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   108
        return new instances003().runIt(argv, out);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   109
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   110
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   111
    protected String debuggeeClassName() {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   112
        return nsk.share.jdi.HeapwalkingDebuggee.class.getName();
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   113
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   114
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   115
    protected void testClass(String className, String referrerType) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   116
        final int createInstanceCount = 50;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   117
        final int referrerCount = 1;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   118
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   119
        List<ObjectReference> objectsToFilter = HeapwalkingDebugger.getObjectReferences(className, vm);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   120
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   121
        // create 'createInstanceCount' instances of test class
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   122
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   123
        // create temporary strong references to prevent the weakly referred instances being GCed
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   124
        // during the time between creating them and disabling collection on them
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   125
        pipe.println(HeapwalkingDebuggee.COMMAND_CREATE_INSTANCES + ":" + className + ":" + createInstanceCount +
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   126
            ":" + referrerCount + ":" + referrerType +
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   127
            (referrerType.equals(ObjectInstancesManager.WEAK_REFERENCE) ? "|" + ObjectInstancesManager.STRONG_REFERENCE : ""));
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   128
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents: 50018
diff changeset
   129
        // Note! This test is broken, in the sense that it incorrectly assumes
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents: 50018
diff changeset
   130
        // that no GC can happen before it walks the heap. In practice, it seems
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents: 50018
diff changeset
   131
        // to only affect this test when using ZGC. However, this test will also
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents: 50018
diff changeset
   132
        // fail when using other GCs if an explicit GC is done here.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents: 50018
diff changeset
   133
50018
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   134
        // the instance counts should not be affected by creating multiple references
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   135
        checkDebugeeAnswer_instanceCounts(className, createInstanceCount, objectsToFilter);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   136
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   137
        ReferenceType referenceType = debuggee.classByName(className);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   138
        List<ObjectReference> instances = HeapwalkingDebugger.filterObjectReferrence(objectsToFilter, referenceType.instances(0));
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   139
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   140
        for (ObjectReference or : instances) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   141
            or.disableCollection();
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   142
        }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   143
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   144
        // remove the temporary strong references so the weak references can be properly tested
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   145
        if (referrerType.equals(ObjectInstancesManager.WEAK_REFERENCE)) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   146
            pipe.println(HeapwalkingDebuggee.COMMAND_DELETE_REFERRERS + ":" + className + ":" + referrerCount + ":" + ObjectInstancesManager.STRONG_REFERENCE);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   147
            if (!isDebuggeeReady()) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   148
                return;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   149
            }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   150
        }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   151
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   152
        // prevent half of instances from GC, delete references and force GC
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   153
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   154
        int preventGCCount = createInstanceCount / 2;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   155
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   156
        for (int i = 0; i < preventGCCount; i++) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   157
            instances.get(i).enableCollection();
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   158
        }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   159
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   160
        pipe.println(HeapwalkingDebuggee.COMMAND_DELETE_INSTANCES + ":" + className + ":" + createInstanceCount);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   161
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   162
        if (!isDebuggeeReady())
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   163
            return;
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   164
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   165
        pipe.println(AbstractDebuggeeTest.COMMAND_FORCE_GC);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   166
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   167
        checkDebugeeAnswer_instanceCounts(className, createInstanceCount - preventGCCount, objectsToFilter);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   168
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   169
        // enable garbage collection for all instances and force GC
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   170
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   171
        for (ObjectReference reference : referenceType.instances(0)) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   172
            reference.enableCollection();
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   173
        }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   174
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   175
        pipe.println(AbstractDebuggeeTest.COMMAND_FORCE_GC);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   176
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   177
        checkDebugeeAnswer_instanceCounts(className, 0, objectsToFilter);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   178
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   179
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   180
    protected void doTest() {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   181
        for (String referenceType : HeapwalkingDebuggee.includedIntoInstancesCountTypes) {
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   182
            for (String className : testClasses)
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   183
                testClass(className, referenceType);
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   184
        }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   185
    }
3ba0d8631f24 8199382: [TESTBUG] Open source VM testbase JDI tests
iignatyev
parents:
diff changeset
   186
}