NotificationBufferCreationTest.java revision 16603:db6e995edd0a
1/*
2 * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @bug 4934236
27 * @summary Tests that NotificationBuffer is created when used.
28 * @author jfd@...
29 * @modules java.management.rmi
30 * @run clean NotificationBufferCreationTest NotificationSender
31 * @run build NotificationBufferCreationTest
32 * @run main NotificationBufferCreationTest
33 */
34import java.net.MalformedURLException;
35
36import javax.management.MBeanServerFactory;
37import javax.management.MBeanServer;
38import javax.management.MBeanServerConnection;
39import javax.management.NotificationListener;
40import javax.management.ObjectName;
41import javax.management.Notification;
42
43import javax.management.remote.JMXConnector;
44import javax.management.remote.JMXConnectorFactory;
45import javax.management.remote.JMXConnectorServer;
46import javax.management.remote.JMXConnectorServerFactory;
47import javax.management.remote.JMXServiceURL;
48
49public class NotificationBufferCreationTest {
50    private static final MBeanServer mbs =
51        MBeanServerFactory.createMBeanServer();
52    private static final String[] protocols = {"rmi", "iiop", "jmxmp"};
53    public static void main(String[] args) {
54        try {
55            boolean error = false;
56            ObjectName notifierName =
57                new ObjectName("TestDomain:type=NotificationSender");
58
59            NotificationSender s = new NotificationSender();
60            mbs.registerMBean(s, notifierName);
61
62            for(int i = 0; i < protocols.length; i++) {
63                try {
64                    System.out.println("dotest for " + protocols[i]);
65                    dotest(protocols[i], s, notifierName);
66                }catch(Exception e) {
67                    e.printStackTrace();
68                    error = true;
69                }
70            }
71
72            if(error)
73                System.exit(1);
74
75            System.out.println("Test OK");
76
77        }catch(Exception e) {
78            e.printStackTrace();
79            System.exit(1);
80        }
81    }
82    private static void dotest(String protocol,
83                               NotificationSender s,
84                               ObjectName notifierName) throws Exception {
85        JMXConnector client = null;
86        JMXConnectorServer server = null;
87        JMXServiceURL u = null;
88        try {
89            u = new JMXServiceURL(protocol, null, 0);
90            server =
91                JMXConnectorServerFactory.newJMXConnectorServer(u,
92                                                                null,
93                                                                mbs);
94            checkNotifier(s, 0, "new ConnectorServer");
95
96            server.start();
97
98            checkNotifier(s, 0, "ConnectorServer start");
99
100            JMXServiceURL addr = server.getAddress();
101            client = JMXConnectorFactory.newJMXConnector(addr, null);
102
103            checkNotifier(s, 0, "new Connector");
104
105            client.connect(null);
106
107            checkNotifier(s, 0, "Connector connect");
108
109            MBeanServerConnection mbsc = client.getMBeanServerConnection();
110
111            final NotificationListener dummyListener =
112                new NotificationListener() {
113                        public void handleNotification(Notification n,
114                                                       Object o) {
115                            // do nothing
116                            return;
117                        }
118                    };
119
120            mbsc.addNotificationListener(notifierName,
121                                         dummyListener,
122                                         null,
123                                         null);
124
125            // 1 Listener is expected to be added by the ServerNotifForwader
126            checkNotifier(s, 1, "addNotificationListener");
127
128            mbsc.removeNotificationListener(notifierName,
129                                            dummyListener);
130            System.out.println("Test OK for " + protocol);
131        }catch(MalformedURLException e) {
132            System.out.println("Skipping URL " + u);
133        }
134        finally {
135            if(client != null)
136                client.close();
137            if(server != null)
138                server.stop();
139        }
140    }
141
142    private static void checkNotifier(NotificationSender s,
143                                      int expectedListenerCount,
144                                      String msg) throws Exception {
145        int count = s.getListenerCount();
146        if(count != expectedListenerCount) {
147            String errorMsg = "Invalid expected listener count [" +
148                expectedListenerCount + "], real [" +  count +"] for " + msg;
149            System.out.println(errorMsg);
150            throw new Exception(errorMsg);
151        }
152
153    }
154}
155