24 import java.lang.management.ManagementFactory; |
24 import java.lang.management.ManagementFactory; |
25 import java.util.ArrayList; |
25 import java.util.ArrayList; |
26 import java.util.HashMap; |
26 import java.util.HashMap; |
27 import java.util.List; |
27 import java.util.List; |
28 import java.util.Map; |
28 import java.util.Map; |
|
29 import javax.management.ClientContext; |
29 import javax.management.MBeanServer; |
30 import javax.management.MBeanServer; |
30 import javax.management.event.EventClientDelegate; |
31 import javax.management.event.EventClientDelegate; |
31 import javax.management.remote.JMXConnectorServer; |
32 import javax.management.remote.JMXConnectorServer; |
32 |
33 |
33 /* |
34 /* |
60 private static enum Status {DISABLED, ENABLED, DEFAULT} |
61 private static enum Status {DISABLED, ENABLED, DEFAULT} |
61 |
62 |
62 public static void main(String[] args) throws Exception { |
63 public static void main(String[] args) throws Exception { |
63 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); |
64 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); |
64 |
65 |
|
66 MBeanServerForwarder ctxFwd = ClientContext.newContextForwarder(mbs, null); |
|
67 Forwarder ctx = new Forwarder( |
|
68 JMXConnectorServer.CONTEXT_FORWARDER, true, ctxFwd.getClass()); |
|
69 |
|
70 MBeanServerForwarder locFwd = |
|
71 ClientContext.newLocalizeMBeanInfoForwarder(mbs); |
|
72 Forwarder loc = new Forwarder( |
|
73 JMXConnectorServer.LOCALIZE_MBEAN_INFO_FORWARDER, false, |
|
74 locFwd.getClass()); |
|
75 |
65 MBeanServerForwarder ecdFwd = |
76 MBeanServerForwarder ecdFwd = |
66 EventClientDelegate.newForwarder(); |
77 EventClientDelegate.newForwarder(mbs, null); |
67 Forwarder ecd = new Forwarder( |
78 Forwarder ecd = new Forwarder( |
68 JMXConnectorServer.EVENT_CLIENT_DELEGATE_FORWARDER, true, |
79 JMXConnectorServer.EVENT_CLIENT_DELEGATE_FORWARDER, true, |
69 ecdFwd.getClass()); |
80 ecdFwd.getClass()); |
70 |
81 |
71 Forwarder[] forwarders = {ecd}; |
82 Forwarder[] forwarders = {ctx, loc, ecd}; |
72 |
83 |
73 // Now go through every combination of forwarders. Each forwarder |
84 // Now go through every combination of forwarders. Each forwarder |
74 // may be explicitly enabled, explicitly disabled, or left to its |
85 // may be explicitly enabled, explicitly disabled, or left to its |
75 // default value. |
86 // default value. |
76 int nStatus = Status.values().length; |
87 int nStatus = Status.values().length; |
152 (status[i] == Status.DEFAULT && forwarders[i].defaultEnabled)) |
163 (status[i] == Status.DEFAULT && forwarders[i].defaultEnabled)) |
153 expectedClasses.add(forwarders[i].expectedClass); |
164 expectedClasses.add(forwarders[i].expectedClass); |
154 } |
165 } |
155 MBeanServer stop = cs.getMBeanServer(); |
166 MBeanServer stop = cs.getMBeanServer(); |
156 List<Class<?>> foundClasses = new ArrayList<Class<?>>(); |
167 List<Class<?>> foundClasses = new ArrayList<Class<?>>(); |
157 for (MBeanServer mbs = cs.getSystemMBeanServer(); mbs != stop; |
168 for (MBeanServer mbs = cs.getSystemMBeanServerForwarder().getMBeanServer(); |
158 mbs = ((MBeanServerForwarder) mbs).getMBeanServer()) |
169 mbs != stop; |
|
170 mbs = ((MBeanServerForwarder) mbs).getMBeanServer()) { |
159 foundClasses.add(mbs.getClass()); |
171 foundClasses.add(mbs.getClass()); |
|
172 } |
160 if (!expectedClasses.equals(foundClasses)) { |
173 if (!expectedClasses.equals(foundClasses)) { |
161 fail("Incorrect forwarder chain: expected " + expectedClasses + |
174 fail("Incorrect forwarder chain: expected " + expectedClasses + |
162 "; found " + foundClasses); |
175 "; found " + foundClasses); |
163 } |
176 } |
164 } |
177 } |
165 |
178 |
166 // env is consistent if either (a) localizer is not enabled or (b) |
179 // env is consistent if either (a) localizer is not enabled or (b) |
167 // localizer is enabled and context is enabled. |
180 // localizer is enabled and context is enabled. |
168 // Neither of those is present in this codebase so env is always consistent. |
|
169 private static boolean isConsistent(Map<String, String> env) { |
181 private static boolean isConsistent(Map<String, String> env) { |
170 return true; |
182 String ctxS = env.get(JMXConnectorServer.CONTEXT_FORWARDER); |
|
183 boolean ctx = (ctxS == null) ? true : Boolean.parseBoolean(ctxS); |
|
184 String locS = env.get(JMXConnectorServer.LOCALIZE_MBEAN_INFO_FORWARDER); |
|
185 boolean loc = (locS == null) ? false : Boolean.parseBoolean(locS); |
|
186 return !loc || ctx; |
171 } |
187 } |
172 |
188 |
173 private static void fail(String why) { |
189 private static void fail(String why) { |
174 System.out.println("FAILED: " + why); |
190 System.out.println("FAILED: " + why); |
175 failure = why; |
191 failure = why; |