From 8fe1e0ad30893459293900c0596e5919e0a6d3a3 Mon Sep 17 00:00:00 2001 From: Felix Yang Date: Sun, 29 May 2016 18:22:21 -0700 Subject: [PATCH] 8078812: Test RMI with client and servers as modules Reviewed-by: smarks --- jdk/test/java/rmi/module/ModuleTest.java | 159 ++++++++++++++++++ .../module/src/mclient/clientpkg/Client.java | 47 ++++++ .../module/src/mserver/serverpkg/Hello.java | 32 ++++ .../module/src/mserver/serverpkg/Server.java | 37 ++++ .../module/src/mtest/testpkg/DummyApp.java | 55 ++++++ 5 files changed, 330 insertions(+) create mode 100644 jdk/test/java/rmi/module/ModuleTest.java create mode 100644 jdk/test/java/rmi/module/src/mclient/clientpkg/Client.java create mode 100644 jdk/test/java/rmi/module/src/mserver/serverpkg/Hello.java create mode 100644 jdk/test/java/rmi/module/src/mserver/serverpkg/Server.java create mode 100644 jdk/test/java/rmi/module/src/mtest/testpkg/DummyApp.java diff --git a/jdk/test/java/rmi/module/ModuleTest.java b/jdk/test/java/rmi/module/ModuleTest.java new file mode 100644 index 00000000000..ad19a71b9f4 --- /dev/null +++ b/jdk/test/java/rmi/module/ModuleTest.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2016, 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. + */ + +/** + * @test + * @library /lib/testlibrary + * @build jdk.testlibrary.ProcessTools + * ModuleTest CompilerUtils JarUtils + * @run testng ModuleTest + * @summary Basic tests for using rmi in module world + */ + +import static jdk.testlibrary.ProcessTools.executeTestJava; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import java.io.File; +import java.nio.file.Paths; + +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +public class ModuleTest { + + static String fileJoin(String... names) { + return String.join(File.separator, names); + } + + static String pathJoin(String... paths) { + return String.join(File.pathSeparator, paths); + } + + private static final String TEST_SRC = System.getProperty("test.src"); + private static final String CLIENT_EXP = fileJoin("exploded", "mclient"); + private static final String SERVER_EXP = fileJoin("exploded", "mserver"); + private static final String MTEST_EXP = fileJoin("exploded", "mtest"); + private static final String CLIENT_JAR = fileJoin("mods", "mclient.jar"); + private static final String SERVER_JAR = fileJoin("mods", "mserver.jar"); + private static final String MTEST_JAR = fileJoin("mods", "mtest.jar"); + + private static final String DUMMY_MAIN = "testpkg.DummyApp"; + + /** + * Compiles all sample classes + */ + @BeforeTest + public void compileAll() throws Exception { + assertTrue(CompilerUtils.compile( + Paths.get(TEST_SRC, "src", "mserver"), + Paths.get(SERVER_EXP))); + + JarUtils.createJarFile( + Paths.get(SERVER_JAR), + Paths.get(SERVER_EXP)); + + assertTrue(CompilerUtils.compile( + Paths.get(TEST_SRC, "src", "mclient"), + Paths.get(CLIENT_EXP), + "-cp", SERVER_JAR)); + + JarUtils.createJarFile( + Paths.get(CLIENT_JAR), + Paths.get(CLIENT_EXP)); + + assertTrue(CompilerUtils.compile(Paths.get(TEST_SRC, "src", "mtest"), + Paths.get(MTEST_EXP), + "-cp", pathJoin(CLIENT_JAR, SERVER_JAR))); + + JarUtils.createJarFile( + Paths.get(MTEST_JAR), + Paths.get(MTEST_EXP)); + } + + /** + * Test the client, server and dummy application in different modules + * @throws Exception + */ + @Test + public void testAllInModule() throws Exception { + assertEquals(executeTestJava("-mp", pathJoin(MTEST_JAR, CLIENT_JAR, SERVER_JAR), + "-addmods", "mclient,mserver", + "-m", "mtest/" + DUMMY_MAIN) + .outputTo(System.out) + .errorTo(System.out) + .getExitValue(), + 0); + } + + /** + * Test the client and server in unnamed modules, + * while the dummy application is in automatic module + * @throws Exception + */ + @Test + public void testAppInModule() throws Exception { + assertEquals(executeTestJava("-mp", MTEST_JAR, + "-cp", pathJoin(CLIENT_JAR, SERVER_JAR), + "-m", "mtest/" + DUMMY_MAIN) + .outputTo(System.out) + .errorTo(System.out) + .getExitValue(), + 0); + } + + /** + * Test the client and server in automatic modules, + * while the dummy application is in unnamed module + * @throws Exception + */ + @Test + public void testAppInUnnamedModule() throws Exception { + assertEquals(executeTestJava("-mp", pathJoin(CLIENT_JAR, SERVER_JAR), + "-addmods", "mclient,mserver", + "-cp", MTEST_JAR, + DUMMY_MAIN) + .outputTo(System.out) + .errorTo(System.out) + .getExitValue(), + 0); + } + + /** + * Test the server and test application in automatic modules, + * with client in unnamed module + * @throws Exception + */ + @Test + public void testClientInUnamedModule() throws Exception { + assertEquals(executeTestJava("-mp", pathJoin(MTEST_JAR, SERVER_JAR), + "-addmods", "mserver", + "-cp", CLIENT_JAR, + "-m", "mtest/" + DUMMY_MAIN) + .outputTo(System.out) + .errorTo(System.out) + .getExitValue(), + 0); + } +} + diff --git a/jdk/test/java/rmi/module/src/mclient/clientpkg/Client.java b/jdk/test/java/rmi/module/src/mclient/clientpkg/Client.java new file mode 100644 index 00000000000..0907748c1e9 --- /dev/null +++ b/jdk/test/java/rmi/module/src/mclient/clientpkg/Client.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2016, 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 clientpkg; + +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +import serverpkg.Hello; + +public class Client { + int port; + Hello stub; + + public Client(Hello stub) { + this.stub = stub; + } + + public String testStub() throws Exception { + try { + return stub.sayHello(); + } catch (Exception e) { + System.err.println("Client exception: " + e.toString()); + throw e; + } + } +} diff --git a/jdk/test/java/rmi/module/src/mserver/serverpkg/Hello.java b/jdk/test/java/rmi/module/src/mserver/serverpkg/Hello.java new file mode 100644 index 00000000000..4525c09746c --- /dev/null +++ b/jdk/test/java/rmi/module/src/mserver/serverpkg/Hello.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016, 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 serverpkg; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +public interface Hello extends Remote { + + String sayHello() throws RemoteException; +} diff --git a/jdk/test/java/rmi/module/src/mserver/serverpkg/Server.java b/jdk/test/java/rmi/module/src/mserver/serverpkg/Server.java new file mode 100644 index 00000000000..0ba07492b9e --- /dev/null +++ b/jdk/test/java/rmi/module/src/mserver/serverpkg/Server.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, 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 serverpkg; + +public class Server implements Hello { + + private final String hello = "Hello world!"; + + public Server() { + } + + @Override + public String sayHello() { + return hello; + } +} diff --git a/jdk/test/java/rmi/module/src/mtest/testpkg/DummyApp.java b/jdk/test/java/rmi/module/src/mtest/testpkg/DummyApp.java new file mode 100644 index 00000000000..6fc88d01fab --- /dev/null +++ b/jdk/test/java/rmi/module/src/mtest/testpkg/DummyApp.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2016, 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 testpkg; + +import java.rmi.server.UnicastRemoteObject; + +import clientpkg.Client; +import serverpkg.Hello; +import serverpkg.Server; + +public class DummyApp { + + public static void main(String args[]) { + try { + Hello obj = new Server(); + Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); + + Client client = new Client(stub); + String testStubReturn = client.testStub(); + System.out.println("Stub is: " + testStubReturn); + if (!testStubReturn.equals(obj.sayHello())) { + throw new RuntimeException("Unexpected string from stub call, expected \"" + + testStubReturn + "\", actual \"" + obj.sayHello() + "\""); + } else { + System.out.println("Test passed"); + } + + System.exit(0); + } catch (Throwable e) { + e.printStackTrace(); + System.exit(-1); + } + } +}