jdk/test/javax/management/namespace/LeadingSeparatorsTest.java
author dfuchs
Wed, 10 Sep 2008 16:27:13 +0200
changeset 1227 4546977d0d66
child 1709 392dd6db361a
permissions -rw-r--r--
6746754: jmx namespace: test for leading separator missing 6669137: RFE: InstanceNotFoundException should have a constructor that takes an ObjectName 6746796: jmx namespaces: Several tests are missing an @bug or @run keyword Summary: Note on 6669137: first implementation of 6669137 was actually pushed with 5072476 - here we only have a small update and a test case. Also re-fixes 6737133: Compilation failure of test/javax/management/eventService/LeaseManagerDeadlockTest.java which had failed. Reviewed-by: emcmanus, yjoan
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1227
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     1
/*
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     2
 * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     4
 *
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     7
 * published by the Free Software Foundation.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     8
 *
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    13
 * accompanied this code).
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    14
 *
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    18
 *
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    21
 * have any questions.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    22
 */
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    23
/*
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    24
 * @test LeadingSeparatorsTest.java
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    25
 * @summary Test that the semantics of a leading // in ObjectName is respected.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    26
 * @author Daniel Fuchs
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    27
 * @bug 5072476
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    28
 * @run clean LeadingSeparatorsTest Wombat WombatMBean
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    29
 * @compile -XDignore.symbol.file=true  LeadingSeparatorsTest.java
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    30
 * @run build LeadingSeparatorsTest Wombat WombatMBean
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    31
 * @run main LeadingSeparatorsTest
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    32
 */
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    33
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    34
import java.lang.management.ManagementFactory;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    35
import java.util.Arrays;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    36
import java.util.Set;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    37
import java.util.HashSet;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    38
import java.util.logging.Logger;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    39
import javax.management.MBeanServer;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    40
import javax.management.MBeanServerFactory;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    41
import javax.management.NotCompliantMBeanException;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    42
import javax.management.ObjectName;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    43
import javax.management.namespace.JMXNamespaces;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    44
import javax.management.namespace.JMXRemoteNamespace;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    45
import javax.management.namespace.JMXNamespace;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    46
import javax.management.remote.JMXConnectorServer;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    47
import javax.management.remote.JMXConnectorServerFactory;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    48
import javax.management.remote.JMXServiceURL;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    49
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    50
/**
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    51
 * Class LeadingSeparatorsTest
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    52
 * @author Sun Microsystems, 2005 - All rights reserved.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    53
 */
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    54
public class LeadingSeparatorsTest {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    55
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    56
    /**
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    57
     * A logger for this class.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    58
     **/
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    59
    private static final Logger LOG =
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    60
            Logger.getLogger(LeadingSeparatorsTest.class.getName());
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    61
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    62
    /** Creates a new instance of NullObjectNameTest */
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    63
    public LeadingSeparatorsTest() {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    64
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    65
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    66
    public static interface MyWombatMBean extends WombatMBean {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    67
        public Set<ObjectName> untrue(ObjectName pat) throws Exception;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    68
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    69
    public static class MyWombat
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    70
            extends Wombat implements MyWombatMBean {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    71
        public MyWombat() throws NotCompliantMBeanException {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    72
            super(MyWombatMBean.class);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    73
        }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    74
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    75
        public Set<ObjectName> untrue(ObjectName pat) throws Exception {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    76
            final Set<ObjectName> res=listMatching(pat.withDomain("*"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    77
            final Set<ObjectName> untrue = new HashSet<ObjectName>();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    78
            for (ObjectName a:res) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    79
                untrue.add(a.withDomain(pat.getDomain()+"//"+a.getDomain()));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    80
            }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    81
            return untrue;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    82
        }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    83
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    84
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    85
    static String failure=null;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    86
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    87
    public static void testRegister() throws Exception {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    88
        final MBeanServer top = ManagementFactory.getPlatformMBeanServer();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    89
        final MBeanServer sub = MBeanServerFactory.createMBeanServer();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    90
        final JMXServiceURL url = new JMXServiceURL("rmi",null,0);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    91
        final JMXConnectorServer srv =
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    92
                JMXConnectorServerFactory.newJMXConnectorServer(url,null,sub);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    93
        srv.start();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    94
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    95
        try {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    96
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    97
            // Create a namespace rmi// that points to 'sub' and flows through
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    98
            // a JMXRemoteNamespace connected to 'srv'
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
    99
            // The namespace rmi// will accept createMBean, but not registerMBean.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   100
            //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   101
            final JMXRemoteNamespace rmiHandler = JMXRemoteNamespace.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   102
                    newJMXRemoteNamespace(srv.getAddress(),null);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   103
            top.registerMBean(rmiHandler,
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   104
                    JMXNamespaces.getNamespaceObjectName("rmi"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   105
            top.invoke(JMXNamespaces.getNamespaceObjectName("rmi"),
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   106
                    "connect", null, null);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   107
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   108
            // Create a namespace direct// that points to 'sub' and flows
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   109
            // through a direct reference to 'sub'.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   110
            // The namespace direct// will accept createMBean, and registerMBean.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   111
            //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   112
            final JMXNamespace directHandler = new JMXNamespace(sub);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   113
            top.registerMBean(directHandler,
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   114
                    JMXNamespaces.getNamespaceObjectName("direct"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   115
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   116
            final ObjectName n1 = new ObjectName("//direct//w:type=Wombat");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   117
            final ObjectName n2 = new ObjectName("direct//w:type=Wombat");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   118
            final ObjectName n3 = new ObjectName("//rmi//w:type=Wombat");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   119
            final ObjectName n4 = new ObjectName("rmi//w:type=Wombat");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   120
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   121
            // register wombat using an object name with a leading //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   122
            final Object     obj = new MyWombat();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   123
            // check that returned object name doesn't have the leading //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   124
            assertEquals(n2,top.registerMBean(obj, n1).getObjectName());
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   125
            System.out.println(n1+" registered");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   126
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   127
            // check that the registered Wombat can be accessed with all its
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   128
            // names.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   129
            System.out.println(n2+" mood is: "+top.getAttribute(n2, "Mood"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   130
            System.out.println(n1+" mood is: "+top.getAttribute(n1, "Mood"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   131
            System.out.println(n4+" mood is: "+top.getAttribute(n4, "Mood"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   132
            System.out.println(n3+" mood is: "+top.getAttribute(n3, "Mood"));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   133
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   134
            // call listMatching. The result should not contain any prefix.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   135
            final Set<ObjectName> res = (Set<ObjectName>)
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   136
                    top.invoke(n3, "listMatching",
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   137
                    // remove rmi// from rmi//*:*
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   138
                    JMXNamespaces.deepReplaceHeadNamespace(
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   139
                    new Object[] {ObjectName.WILDCARD.withDomain("rmi//*")},
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   140
                    "rmi", ""), new String[] {ObjectName.class.getName()});
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   141
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   142
            // add rmi// prefix to all names in res.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   143
            final Set<ObjectName> res1 =
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   144
                   JMXNamespaces.deepReplaceHeadNamespace(res, "", "rmi");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   145
            System.out.println("got: "+res1);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   146
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   147
            // compute expected result
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   148
            final Set<ObjectName> res2 = sub.queryNames(null,null);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   149
            final Set<ObjectName> res3 = new HashSet<ObjectName>();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   150
            for (ObjectName o:res2) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   151
               res3.add(o.withDomain("rmi//"+o.getDomain()));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   152
            }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   153
            System.out.println("expected: "+res3);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   154
            assertEquals(res1, res3);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   155
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   156
            // invoke "untrue(//niark//niark:*)"
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   157
            // should return a set were all ObjectNames begin with
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   158
            // //niark//niark//
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   159
            //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   160
            final Set<ObjectName> res4 = (Set<ObjectName>)
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   161
                    top.invoke(n3, "untrue",
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   162
                    // remove niark//niark : should remove nothing since
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   163
                    // our ObjectName begins with a leading //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   164
                    JMXNamespaces.deepReplaceHeadNamespace(
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   165
                    new Object[] {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   166
                       ObjectName.WILDCARD.withDomain("//niark//niark")},
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   167
                    "niark//niark", ""),
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   168
                    new String[] {ObjectName.class.getName()});
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   169
            System.out.println("got: "+res4);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   170
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   171
            // add rmi// should add nothing since the returned names have a
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   172
            // leading //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   173
            //
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   174
            final Set<ObjectName> res5 =
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   175
                   JMXNamespaces.deepReplaceHeadNamespace(res4, "", "rmi");
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   176
            System.out.println("got#2: "+res5);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   177
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   178
            // compute expected result
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   179
            final Set<ObjectName> res6 = new HashSet<ObjectName>();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   180
            for (ObjectName o:res2) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   181
               res6.add(o.withDomain("//niark//niark//"+o.getDomain()));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   182
            }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   183
            System.out.println("expected: "+res6);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   184
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   185
            // both res4 and res5 should be equals to the expected result.
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   186
            assertEquals(res4, res6);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   187
            assertEquals(res5, res6);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   188
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   189
        } finally {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   190
            srv.stop();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   191
        }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   192
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   193
        if (failure != null)
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   194
            throw new Exception(failure);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   195
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   196
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   197
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   198
    private static void assertEquals(Object x, Object y) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   199
        if (!equal(x, y))
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   200
            failed("expected " + string(x) + "; got " + string(y));
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   201
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   202
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   203
    private static boolean equal(Object x, Object y) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   204
        if (x == y)
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   205
            return true;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   206
        if (x == null || y == null)
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   207
            return false;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   208
        if (x.getClass().isArray())
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   209
            return Arrays.deepEquals(new Object[] {x}, new Object[] {y});
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   210
        return x.equals(y);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   211
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   212
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   213
    private static String string(Object x) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   214
        String s = Arrays.deepToString(new Object[] {x});
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   215
        return s.substring(1, s.length() - 1);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   216
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   217
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   218
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   219
    private static void failed(String why) {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   220
        failure = why;
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   221
        new Throwable("FAILED: " + why).printStackTrace(System.out);
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   222
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   223
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   224
    public static void main(String[] args) throws Exception {
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   225
        testRegister();
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   226
    }
4546977d0d66 6746754: jmx namespace: test for leading separator missing
dfuchs
parents:
diff changeset
   227
}