blob: 3cd17696cabfcc8b212154a4d713a4dfcad3e8e3 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1998-1999 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/* @test
25 * @bug 4115683
26 * @summary Endpoint hostnames should always be fully qualified or
27 * should be an ip address. When references to remote
28 * objects are passed outside of the local domain their
29 * endpoints may contain hostnames that are not fully
30 * qualified. Hence remote clients won't be able to contact
31 * the referenced remote obect.
32 *
33 * @author Laird Dornin
34 *
35 * @library ../../testlibrary
36 * @build CheckFQDN CheckFQDNClient CheckFQDN_Stub TellServerName
37 * @run main/othervm/timeout=120 CheckFQDN
38 */
39
40/**
41 * Get the hostname used by rmi using different rmi properities:
42 *
43 * if set java.rmi.server.hostname, hostname should equal this
44 * property.
45 *
46 * if set java.rmi.server.useLocalHostname, hostname must contain a '.'
47 *
48 * if set no properties hostname should be an ipaddress.
49 *
50 * if set java.rmi.server.hostname, hostname should equal this
51 * property even if set java.rmi.server.useLocalHostname is true.
52 *
53 */
54
55import java.rmi.*;
56import java.rmi.registry.*;
57import java.rmi.server.*;
58import java.io.*;
59
60/**
61 * Export a remote object through which the exec'ed client vm can
62 * inform the main test what its host name is.
63 */
64public class CheckFQDN extends UnicastRemoteObject
65 implements TellServerName {
66
67 static String propertyBeingTested = null;
68 static String propertyBeingTestedValue = null;
69
70 public static void main(String args[]) {
71
72 Object dummy = new Object();
73 CheckFQDN checkFQDN = null;
74 try {
75 checkFQDN = new CheckFQDN();
76
77 System.err.println
78 ("\nRegression test for bug/rfe 4115683\n");
79
80 Registry registry = java.rmi.registry.LocateRegistry.
81 createRegistry(TestLibrary.REGISTRY_PORT);
82 registry.bind("CheckFQDN", checkFQDN);
83
84 /* test the host name scheme in different environments.*/
85 testProperty("java.rmi.server.useLocalHostname", "true", "");
86 testProperty("java.rmi.server.hostname", "thisIsJustAnRMITest", "");
87 testProperty("java.rmi.server.hostname", "thisIsJustAnRMITest",
88 " -Djava.rmi.server.useLocalHostname=true ");
89 testProperty("", "", "");
90
91 } catch (Exception e) {
92 TestLibrary.bomb(e);
93 } finally {
94 if (checkFQDN != null) {
95 TestLibrary.unexport(checkFQDN);
96 }
97 }
98 System.err.println("\nTest for bug/ref 4115683 passed.\n");
99 }
100
101 /**
102 * Spawn a vm and feed it a property which sets the client's rmi
103 * hostname.
104 */
105 public static void testProperty(String property,
106 String propertyValue,
107 String extraProp)
108 {
109 try {
110 String propOption = "";
111 String equal = "";
112 if (!property.equals("")) {
113 propOption = " -D";
114 equal = "=";
115 }
116
117 JavaVM jvm = new JavaVM("CheckFQDNClient",
118 propOption + property +
119 equal +
120 propertyValue + extraProp,
121 "");
122
123 propertyBeingTested=property;
124 propertyBeingTestedValue=propertyValue;
125
126 // create a client to tell checkFQDN what its rmi name is. */
127 jvm.start();
128
129 if (jvm.getVM().waitFor() != 0 ) {
130 TestLibrary.bomb("Test failed, error in client.");
131 }
132
133 } catch (Exception e) {
134 TestLibrary.bomb(e);
135 }
136 }
137
138 CheckFQDN() throws RemoteException { }
139
140 /**
141 * Remote method to allow client vm to tell the main test what its
142 * host name is .
143 */
144 public void tellServerName(String serverName)
145 throws RemoteException {
146
147 if (propertyBeingTested.equals("java.rmi.server.hostname")) {
148 if ( !propertyBeingTestedValue.equals(serverName)) {
149 TestLibrary.bomb(propertyBeingTested +
150 ":\n Client rmi server name does " +
151 "not equal the one specified " +
152 "by java.rmi.server.hostname: " +
153 serverName +" != " +
154 propertyBeingTestedValue);
155 }
156
157 /** use local host name, must contain a '.' */
158 } else if (propertyBeingTested.equals
159 ("java.rmi.server.useLocalHostname")) {
160 if (serverName.indexOf('.') < 0) {
161 TestLibrary.bomb(propertyBeingTested +
162 ":\nThe client servername contains no '.'");
163 }
164 } else {
165 // no propety set, must be ip address
166 if ((serverName.indexOf('.') < 0) ||
167 (!Character.isDigit(serverName.charAt(0)))) {
168 TestLibrary.bomb("Default name scheme:\n"+
169 " The client servername contains no '.'"+
170 "or is not an ip address");
171 }
172 }
173 System.err.println("Servername used: " + serverName);
174 }
175}