public static void main(String[] args) {

    System.out.println("\nRegression test for bug 4115696\n");

    TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");

    try {
      LocateRegistry.createRegistry(REGISTRY_PORT);
    } catch (Exception e) {
      TestLibrary.bomb("creating registry", e);
    }

    RMID rmid = null;

    try {
      rmid = RMID.createRMID(true);
      rmid.addArguments(
          new String[] {
            "-C-Djava.security.policy="
                + TestParams.defaultGroupPolicy
                + " -C-Djava.security.manager=java.rmi.RMISecurityManager "
          });
      rmid.start();

      Echo[] echo = spawnAndTest();
      reactivateAndTest(echo);
    } catch (IOException e) {
      TestLibrary.bomb("creating rmid", e);
    } finally {
      if (rmid != null) rmid.destroy();
    }
  }
  public static void main(String[] args) {

    RMID rmid = null;

    System.out.println("\nRegression test for bug 4510355\n");

    try {
      TestLibrary.suggestSecurityManager("java.lang.SecurityManager");

      /*
       * Install group class file in codebase.
       */
      System.err.println("install class file in codebase");
      URL groupURL = TestLibrary.installClassInCodebase("MyActivationGroupImpl", "group");
      System.err.println("class file installed");

      /*
       * Start rmid.
       */
      RMID.removeLog();
      rmid = RMID.createRMID();
      String execPolicyOption = "-Dsun.rmi.activation.execPolicy=none";
      rmid.addOptions(new String[] {execPolicyOption});
      rmid.start();

      /*
       * Create and register descriptors for custom group and an
       * activatable object in that group.
       */
      System.err.println("register group");

      Properties p = new Properties();
      p.put("java.security.policy", TestParams.defaultGroupPolicy);

      ActivationGroupDesc groupDesc =
          new ActivationGroupDesc(
              "MyActivationGroupImpl", groupURL.toExternalForm(), null, p, null);
      ActivationGroupID groupID = ActivationGroup.getSystem().registerGroup(groupDesc);

      System.err.println("register activatable object");
      ActivationDesc desc = new ActivationDesc(groupID, "DownloadActivationGroup", null, null);
      Ping obj = (Ping) Activatable.register(desc);

      /*
       * Start group (by calling ping).
       */
      System.err.println("ping object (forces download of group's class)");
      obj.ping();
      System.err.println("TEST PASSED: group's class downloaded successfully");
      System.err.println("shutdown object");
      obj.shutdown();
      System.err.println("TEST PASSED");

    } catch (Exception e) {
      TestLibrary.bomb(e);
    } finally {
      rmid.cleanup();
    }
  }
  private static Echo[] spawnAndTest() {

    System.err.println("\nCreate Test-->");

    Echo[] echo = new Echo[protocol.length];

    for (int i = 0; i < protocol.length; i++) {

      JavaVM serverVM =
          new JavaVM("EchoImpl", "-Djava.security.policy=" + TestParams.defaultPolicy, protocol[i]);

      System.err.println("\nusing protocol: " + (protocol[i] == "" ? "none" : protocol[i]));

      try {
        /* spawn VM for EchoServer */
        serverVM.start();

        /* lookup server */
        int tries = 12; // need enough tries for slow machine.
        echo[i] = null;
        do {
          try {
            echo[i] = (Echo) Naming.lookup("//:" + REGISTRY_PORT + "/EchoServer");
            break;
          } catch (NotBoundException e) {
            try {
              Thread.sleep(2000);
            } catch (Exception ignore) {
            }
            continue;
          }
        } while (--tries > 0);

        if (echo[i] == null) TestLibrary.bomb("server not bound in 12 tries", null);

        /* invoke remote method and print result*/
        System.err.println("Bound to " + echo[i]);
        byte[] data = ("Greetings, citizen " + System.getProperty("user.name") + "!").getBytes();
        byte[] result = echo[i].echoNot(data);
        for (int j = 0; j < result.length; j++) result[j] = (byte) ~result[j];
        System.err.println("Result: " + new String(result));
        echo[i].shutdown();

      } catch (Exception e) {
        TestLibrary.bomb("test failed", e);

      } finally {
        serverVM.destroy();
        try {
          Naming.unbind("//:" + REGISTRY_PORT + "/EchoServer");
        } catch (Exception e) {
          TestLibrary.bomb("unbinding EchoServer", e);
        }
      }
    }
    return echo;
  }
  private static void reactivateAndTest(Echo[] echo) {

    System.err.println("\nReactivate Test-->");

    for (int i = 0; i < echo.length; i++) {
      try {
        System.err.println("\nusing protocol: " + (protocol[i] == "" ? "none" : protocol[i]));
        byte[] data = ("Greetings, citizen " + System.getProperty("user.name") + "!").getBytes();
        byte[] result = echo[i].echoNot(data);
        for (int j = 0; j < result.length; j++) result[j] = (byte) ~result[j];
        System.err.println("Result: " + new String(result));
        echo[i].shutdown();
      } catch (Exception e) {
        TestLibrary.bomb("activating EchoServer for protocol " + protocol[i], e);
      }
    }
  }
  public static void main(String[] args) {

    System.out.println("\nRegression test for bug 4095165, 4140736\n");

    TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");

    RMID rmid = null;
    RestartCrashedService unicastObj = null;

    try {
      RMID.removeLog();
      rmid = RMID.createRMID();
      rmid.start();

      /* Cause activation groups to have a security policy that will
       * allow security managers to be downloaded and installed
       */
      final Properties p = new Properties();
      // this test must always set policies/managers in its
      // activation groups
      p.put("java.security.policy", TestParams.defaultGroupPolicy);
      p.put("java.security.manager", TestParams.defaultSecurityManager);

      /*
       * Create unicast object to be contacted when service is activated.
       */
      unicastObj = new RestartCrashedService();
      /*
       * Create and register descriptors for a restartable and
       * non-restartable service (respectively) in a group other than
       * this VM's group.
       */
      System.err.println("Creating descriptors");

      Object[] stuff = new Object[] {RESTARTABLE, unicastObj};
      MarshalledObject restartMobj = new MarshalledObject(stuff);
      ActivationGroupDesc groupDesc = new ActivationGroupDesc(p, null);

      stuff[0] = ACTIVATABLE;
      MarshalledObject activateMobj = new MarshalledObject(stuff);
      ActivationGroupID groupID = ActivationGroup.getSystem().registerGroup(groupDesc);
      ActivationDesc restartableDesc =
          new ActivationDesc(groupID, "RestartCrashedService", null, restartMobj, true);

      ActivationDesc activatableDesc =
          new ActivationDesc(groupID, "RestartCrashedService", null, activateMobj, false);

      System.err.println("Registering descriptors");
      ActivateMe restartableObj = (ActivateMe) Activatable.register(restartableDesc);

      ActivateMe activatableObj = (ActivateMe) Activatable.register(activatableDesc);

      /*
       * Restart rmid; it should start up the restartable service
       */
      rmid.restart();

      /*
       * Wait for service to be automatically restarted.
       */
      int repeat = 1;

      do {

        for (int i = 0; i < 15; i++) {
          synchronized (lock) {
            if (unicastObj.receivedPing(RESTARTABLE) != true) {
              lock.wait(5000);
              if (unicastObj.receivedPing(RESTARTABLE) == true) {
                System.err.println("Test1 passed: rmid " + "restarted service");
                break;
              }
            } else {
              break;
            }
          }
        }

        if (unicastObj.receivedPing(RESTARTABLE) != true)
          TestLibrary.bomb("Test1 failed: service not restarted by timeout", null);

        /*
         * Make sure activatable services wasn't automatically
         * restarted.
         */
        synchronized (lock) {
          if (unicastObj.receivedPing(ACTIVATABLE) != true) {
            lock.wait(5000);
            if (unicastObj.receivedPing(ACTIVATABLE) != true) {
              System.err.println("Test2 passed: rmid did not " + "restart activatable service");
            } else {
              TestLibrary.bomb("Test2 failed: activatable service restarted", null);
            }
          } else {
            TestLibrary.bomb("Test2 failed: activatable service restarted!", null);
          }
        }

        if (repeat > 0) {
          try {
            System.err.println("\nCrash restartable object");
            unicastObj.resetResponders();
            restartableObj.crash();
          } catch (Exception e) {
          }
        }

      } while (repeat-- > 0);

    } catch (Exception e) {
      TestLibrary.bomb("test failed", e);
    } finally {
      ActivationLibrary.rmidCleanup(rmid);
      TestLibrary.unexport(unicastObj);
    }
  }
  public static void main(String args[]) {
    /*
     * The following line is required with the JDK 1.2 VM so that the
     * VM can exit gracefully when this test completes.  Otherwise, the
     * conservative garbage collector will find a handle to the server
     * object on the native stack and not clear the weak reference to
     * it in the RMI runtime's object table.
     */
    Object dummy1 = new Object();
    RMID rmid = null;

    System.err.println("\nRegression test for bug/rfe 4109103\n");

    try {

      // Set security manager according to the
      // testlibrary.
      TestLibrary.suggestSecurityManager(TestParams.defaultSecurityManager);

      // start an rmid.
      RMID.removeLog();
      rmid = RMID.createRMID(rmidOut, rmidErr, false);
      rmid.start();

      /* Cause activation groups to have a security policy that will
       * allow security managers to be downloaded and installed
       */
      Properties p = new Properties();
      // this test must always set policies/managers in its
      // activation groups
      p.put("java.security.policy", TestParams.defaultGroupPolicy);
      p.put("java.security.manager", TestParams.defaultSecurityManager);

      /* new desc - we will reuse in order to get multiple vms.*/
      System.err.println("Create activation group in this VM");
      ActivationGroupDesc groupDesc = new ActivationGroupDesc(p, null);
      ActivationSystem system = ActivationGroup.getSystem();
      ActivationGroupID groupID = system.registerGroup(groupDesc);
      ActivationGroup.createGroup(groupID, groupDesc, 0);

      ActivationDesc desc = new ActivationDesc("CheckAnnotations", null, null);
      myRMI = (MyRMI) Activatable.register(desc);

      /* The test-
       * Loop a bunch of times to force activator to
       * spawn VMs (groups)
       */
      for (int i = 0; i < 3; i++) {

        // object activated in annotation check via method call
        if (!checkAnnotations(i - 1)) {
          TestLibrary.bomb("Test failed: output improperly annotated.");
        }

        /*
         * Clean up object too.
         */
        System.err.println("Deactivate object via method call");
        myRMI.shutdown();
      }
      System.err.println("\nsuccess: CheckAnnotations test passed ");

    } catch (Exception e) {
      TestLibrary.bomb("\nfailure: unexpected exception ", e);
    } finally {
      try {
        Thread.sleep(4000);
      } catch (InterruptedException e) {
      }

      myRMI = null;
      System.err.println("rmid shut down");
      ActivationLibrary.rmidCleanup(rmid);
    }
  }
Example #7
0
  public static void main(String args[]) {

    sameGroup = true;

    RMID rmid = null;

    System.err.println("\nRegression test for bug/rfe 4179055\n");

    try {
      TestLibrary.suggestSecurityManager("java.lang.SecurityManager");

      registry = java.rmi.registry.LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);

      // must run with java.lang.SecurityManager or the test
      // result will be nullified if running with a build where
      // 4180392 has not been fixed.
      String smClassName = System.getSecurityManager().getClass().getName();
      if (!smClassName.equals("java.lang.SecurityManager")) {
        TestLibrary.bomb("Test must run with java.lang.SecurityManager");
      }

      // start an rmid.
      RMID.removeLog();
      rmid = RMID.createRMID();
      rmid.start();

      // rmid.addOptions(new String[] {"-C-Djava.rmi.server.logCalls=true"});

      // Ensure that activation groups run with the correct
      // security manager.
      //
      Properties p = new Properties();
      p.put("java.security.policy", TestParams.defaultGroupPolicy);
      p.put("java.security.manager", "java.lang.SecurityManager");

      // This action causes the following classes to be created
      // in this VM (RMI must permit the creation of these classes):
      //
      // sun.rmi.server.Activation$ActivationSystemImpl_Stub
      // sun.rmi.server.Activation$ActivationMonitorImpl_Stub
      //
      System.err.println("Create activation group, in a new VM");
      ActivationGroupDesc groupDesc = new ActivationGroupDesc(p, null);
      ActivationSystem system = ActivationGroup.getSystem();
      ActivationGroupID groupID = system.registerGroup(groupDesc);

      System.err.println("register activatable");
      // Fix for: 4271615: make sure activation group runs in a new VM
      ActivationDesc desc = new ActivationDesc(groupID, "StubClassesPermitted", null, null);
      canCreateStubs = (CanCreateStubs) Activatable.register(desc);

      // ensure registry stub can be passed in a remote call
      System.err.println("getting the registry");
      registry = canCreateStubs.getRegistry();

      // make sure a client cant load just any sun.* class, just
      // as a sanity check, try to create a class we are not
      // allowed to access but which was passed in a remote call
      try {
        System.err.println("accessing forbidden class");
        Object secureRandom = canCreateStubs.getForbiddenClass();

        TestLibrary.bomb(
            "test allowed to access forbidden class," + " sun.security.provider.SecureRandom");
      } catch (java.security.AccessControlException e) {

        // Make sure we received a *local* AccessControlException
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(bout);
        e.printStackTrace(ps);
        ps.flush();
        String trace = new String(bout.toByteArray());
        if ((trace.indexOf("exceptionReceivedFromServer") >= 0) || trace.equals("")) {
          throw e;
        }
        System.err.println("received expected local access control exception");
      }

      // make sure that an ActivationGroupID can be passed in a
      // remote call; this is slightly more inclusive than
      // just passing a reference to the activation system
      System.err.println("returning group desc");
      canCreateStubs.returnGroupID();

      // Clean up object
      System.err.println("Deactivate object via method call");
      canCreateStubs.shutdown();

      System.err.println("\nsuccess: StubClassesPermitted test passed ");

    } catch (Exception e) {
      TestLibrary.bomb("\nfailure: unexpected exception ", e);
    } finally {
      try {
        Thread.sleep(4000);
      } catch (InterruptedException e) {
      }

      canCreateStubs = null;
      ActivationLibrary.rmidCleanup(rmid);
      System.err.println("rmid shut down");
    }
  }