test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/disableCollection/disablecollection001.java
changeset 50018 3ba0d8631f24
child 53869 34906de6c017
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jdi/ObjectReference/disableCollection/disablecollection001.java	Sat May 05 09:24:29 2018 -0700
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package nsk.jdi.ObjectReference.disableCollection;
+
+import nsk.share.*;
+import nsk.share.jpda.*;
+import nsk.share.jdi.*;
+
+import com.sun.jdi.*;
+import java.util.*;
+import java.io.*;
+
+/**
+ * The test for the implementation of an object of the type     <BR>
+ * ObjectReference.                                             <BR>
+ *                                                              <BR>
+ * The test checks up that results of the method                <BR>
+ * <code>com.sun.jdi.ObjectReference.disableCollection()</code> <BR>
+ * complies with its specification.                             <BR>
+ * <BR>
+ * The case for testing includes  not throwing                  <BR>
+ *       ObjectCollectedException                               <BR>
+ * provided a mirrored object is not collected.                 <BR>
+ */
+
+public class disablecollection001 {
+
+    //----------------------------------------------------- templete section
+    static final int PASSED = 0;
+    static final int FAILED = 2;
+    static final int PASS_BASE = 95;
+
+    //----------------------------------------------------- templete parameters
+    static final String
+    sHeader1 = "\n==> nsk/jdi/ObjectReference/disableCollection/disablecollection001  ",
+    sHeader2 = "--> debugger: ",
+    sHeader3 = "##> debugger: ";
+
+    //----------------------------------------------------- main method
+
+    public static void main (String argv[]) {
+        int result = run(argv, System.out);
+        System.exit(result + PASS_BASE);
+    }
+
+    public static int run (String argv[], PrintStream out) {
+        return new disablecollection001().runThis(argv, out);
+    }
+
+    //--------------------------------------------------   log procedures
+
+    private static Log  logHandler;
+
+    private static void log1(String message) {
+        logHandler.display(sHeader1 + message);
+    }
+    private static void log2(String message) {
+        logHandler.display(sHeader2 + message);
+    }
+    private static void log3(String message) {
+        logHandler.complain(sHeader3 + message);
+    }
+
+    //  ************************************************    test parameters
+
+    private String debuggeeName =
+        "nsk.jdi.ObjectReference.disableCollection.disablecollection001a";
+
+    private String testedClassName =
+        "nsk.jdi.ObjectReference.disableCollection.TestClass";
+
+    //String mName = "nsk.jdi.ObjectReference.disableCollection";
+
+    //====================================================== test program
+    //------------------------------------------------------ common section
+
+    static ArgumentHandler      argsHandler;
+
+    static int waitTime;
+
+    static VirtualMachine      vm  = null;
+
+    ReferenceType     testedClass  = null;
+
+    static int  testExitCode = PASSED;
+
+    static final int returnCode0 = 0;
+    static final int returnCode1 = 1;
+    static final int returnCode2 = 2;
+    static final int returnCode3 = 3;
+    static final int returnCode4 = 4;
+
+    //------------------------------------------------------ methods
+
+    private int runThis (String argv[], PrintStream out) {
+
+        Debugee debuggee;
+
+        argsHandler     = new ArgumentHandler(argv);
+        logHandler      = new Log(out, argsHandler);
+        Binder binder   = new Binder(argsHandler, logHandler);
+
+        if (argsHandler.verbose()) {
+            debuggee = binder.bindToDebugee(debuggeeName + " -vbs");
+        } else {
+            debuggee = binder.bindToDebugee(debuggeeName);
+        }
+
+        waitTime = argsHandler.getWaitTime();
+
+
+        IOPipe pipe     = new IOPipe(debuggee);
+
+        debuggee.redirectStderr(out);
+        log2("issuspended002a debuggee launched");
+        debuggee.resume();
+
+        String line = pipe.readln();
+        if ((line == null) || !line.equals("ready")) {
+            log3("signal received is not 'ready' but: " + line);
+            return FAILED;
+        } else {
+            log2("'ready' recieved");
+        }
+
+        vm = debuggee.VM();
+
+    //------------------------------------------------------  testing section
+        log1("      TESTING BEGINS");
+
+        for (int i = 0; ; i++) {
+
+            pipe.println("newcheck");
+            line = pipe.readln();
+
+            if (line.equals("checkend")) {
+                log2("     : returned string is 'checkend'");
+                break ;
+            } else if (!line.equals("checkready")) {
+                log3("ERROR: returned string is not 'checkready'");
+                testExitCode = FAILED;
+                break ;
+            }
+
+            log1("new checkready: #" + i);
+
+            //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ variable part
+
+            String objName = "testObj";
+
+            log2("getting testedClass object");
+            try {
+
+                testedClass = (ReferenceType)
+                              vm.classesByName(debuggeeName).get(0);
+
+                ObjectReference objRef = (ObjectReference)
+                     testedClass.getValue(testedClass.fieldByName(objName));
+
+
+                log2(".......checking up on not throwing ObjectCollectedException ");
+
+                try {
+                    objRef.disableCollection();
+                    log2("        ObjectCollectedException is not thrown");
+                } catch ( UnsupportedOperationException e1 ) {
+                    log3("ERROR: ObjectCollectedException");
+                    testExitCode = FAILED;
+                } catch ( Exception e2 ) {
+                    testExitCode = FAILED;
+                    log3("ERROR: UNEXPECTED Exception is thrown : " + e2);
+                }
+
+            } catch ( Exception e) {
+                log3("ERROR: Exception at very beginning !? : " + e);
+                testExitCode = FAILED;
+            }
+
+            //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        }
+        log1("      TESTING ENDS");
+
+    //--------------------------------------------------   test summary section
+    //-------------------------------------------------    standard end section
+
+        pipe.println("quit");
+        log2("waiting for the debuggee to finish ...");
+        debuggee.waitFor();
+
+        int status = debuggee.getStatus();
+        if (status != PASSED + PASS_BASE) {
+            log3("debuggee returned UNEXPECTED exit status: " +
+                    status + " != PASS_BASE");
+            testExitCode = FAILED;
+        } else {
+            log2("debuggee returned expected exit status: " +
+                    status + " == PASS_BASE");
+        }
+
+        if (testExitCode != PASSED) {
+            logHandler.complain("TEST FAILED");
+        }
+        return testExitCode;
+    }
+}