jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java
author tyan
Fri, 20 Dec 2013 15:10:11 -0800
changeset 22085 752c27397429
parent 14778 5947768d173d
child 23010 6dadb192ad81
permissions -rw-r--r--
7168267: Cleanup of rmi regression tests Reviewed-by: smarks
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     2
 * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    21
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
/* @test
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
 * @bug 4116082
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
 * @summary synopsis: rmid should not destroy group when it reports
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
 * inactiveGroup
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
 * @author Ann Wollrath
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
 * @library ../../../testlibrary
14778
5947768d173d 8004748: clean up @build tags in RMI tests
smarks
parents: 5506
diff changeset
    32
 * @build TestLibrary RMID ActivationLibrary ActivateMe InactiveGroup_Stub
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
 * @run main/othervm/policy=security.policy/timeout=240 InactiveGroup
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
import java.io.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
import java.rmi.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
import java.rmi.activation.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
import java.rmi.server.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
import java.rmi.registry.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
import java.util.Properties;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
public class InactiveGroup
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
        implements ActivateMe, Runnable
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
    private ActivationID id;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
    public InactiveGroup(ActivationID id, MarshalledObject obj)
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
        throws ActivationException, RemoteException
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
        this.id = id;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
        Activatable.exportObject(this, id, 0);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
    public InactiveGroup() throws RemoteException {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
        UnicastRemoteObject.exportObject(this, 0);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
    public void ping()
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
    {}
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
    public ActivateMe getUnicastVersion() throws RemoteException {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
        return new InactiveGroup();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
    public ActivationID getID() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
        return id;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
     * Spawns a thread to deactivate the object.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
    public void shutdown() throws Exception
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
        (new Thread(this,"InactiveGroup")).start();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
     * Thread to deactivate object. First attempts to make object
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
     * inactive (via the inactive method).  If that fails (the
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
     * object may still have pending/executing calls), then
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
     * unexport the object forcibly.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
    public void run()
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
    {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
        ActivationLibrary.deactivate(this, getID());
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
    public static void main(String[] args) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
        System.out.println("\nRegression test for bug 4116082\n");
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
        TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
        RMID rmid = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
        try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
            RMID.removeLog();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
            rmid = RMID.createRMID();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
            rmid.start();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
            /* Cause activation groups to have a security policy that will
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
             * allow security managers to be downloaded and installed
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
             */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
            Properties p = new Properties();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
            // this test must always set policies/managers in its
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
            // activation groups
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
            p.put("java.security.policy",
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
                  TestParams.defaultGroupPolicy);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
            p.put("java.security.manager",
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
                  TestParams.defaultSecurityManager);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
            /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
             * Create descriptor and activate object in a separate VM.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
             */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
            System.err.println("Creating descriptor");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
            ActivationGroupDesc groupDesc =
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
                new ActivationGroupDesc(p, null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
            ActivationGroupID groupID =
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
                ActivationGroup.getSystem().registerGroup(groupDesc);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   122
            ActivationDesc desc =
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
                new ActivationDesc(groupID, "InactiveGroup", null, null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
            System.err.println("Registering descriptor");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
            ActivateMe activatableObj = (ActivateMe) Activatable.register(desc);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
            System.err.println("Activate object via method call");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
            activatableObj.ping();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
90ce3da70b43 Initial load
duke
parents:
diff changeset
   131
            /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
             * Create a unicast object in the activatable object's VM.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   133
             */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
            System.err.println("Obtain unicast object");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
            ActivateMe unicastObj = activatableObj.getUnicastVersion();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
            /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
             * Make activatable object (and therefore group) inactive.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
             */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
            System.err.println("Make activatable object inactive");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
            activatableObj.shutdown();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
90ce3da70b43 Initial load
duke
parents:
diff changeset
   143
            /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   144
             * Ping the unicast object a few times to make sure that the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
             * activation group's process hasn't gone away.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
             */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
            System.err.println("Ping unicast object for existence");
22085
752c27397429 7168267: Cleanup of rmi regression tests
tyan
parents: 14778
diff changeset
   148
            // set timeout 5 seconds
752c27397429 7168267: Cleanup of rmi regression tests
tyan
parents: 14778
diff changeset
   149
            final long stopTime = System.currentTimeMillis() + 5000;
752c27397429 7168267: Cleanup of rmi regression tests
tyan
parents: 14778
diff changeset
   150
            while (System.currentTimeMillis() < stopTime) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
                unicastObj.ping();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
                Thread.sleep(500);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
            /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   156
             * Now, reactivate the activatable object; the unicast object
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
             * should no longer be accessible, since reactivating the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
             * activatable object should kill the previous group's VM
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
             * and the unicast object along with it.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
             */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
            System.err.println("Reactivate activatable obj");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   162
            activatableObj.ping();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
            try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
                System.err.println("Ping unicast object again");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
                unicastObj.ping();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   167
            } catch (Exception thisShouldFail) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   168
                System.err.println("Test passed: couldn't reach unicast obj: " +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   169
                                   thisShouldFail.getMessage());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   170
                return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
            TestLibrary.bomb("Test failed: unicast obj accessible after group reactivates",
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
                 null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
90ce3da70b43 Initial load
duke
parents:
diff changeset
   176
        } catch (Exception e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   177
            TestLibrary.bomb("test failed", e);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   178
        } finally {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
            ActivationLibrary.rmidCleanup(rmid);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   180
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   181
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   182
}