1 /* 2 * Copyright (c) 2005, 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 4716807 27 * @summary Test if the repository supports correctly the use of 28 * wildcards in the ObjectName key properties value part. 29 * @author Luis-Miguel Alventosa 30 * 31 * @run clean RepositoryWildcardTest 32 * @run build RepositoryWildcardTest 33 * @run main RepositoryWildcardTest 34 */ 35 36 import java.util.HashSet; 37 import java.util.Set; 38 import java.util.TreeSet; 39 import javax.management.InstanceNotFoundException; 40 import javax.management.MBeanServer; 41 import javax.management.MBeanServerDelegate; 42 import javax.management.MBeanServerFactory; 43 import javax.management.ObjectName; 44 import javax.management.RuntimeOperationsException; 45 46 public class RepositoryWildcardTest { 47 48 private static final String classname = 49 "javax.management.monitor.StringMonitor"; 50 51 private static int mbeanCreation(MBeanServer mbs, String name) 52 throws Exception { 53 int error = 0; 54 try { 55 System.out.println("Test: createMBean(" + name + ")"); 56 mbs.createMBean(classname, ObjectName.getInstance(name)); 57 error++; 58 System.out.println("Didn't get expected exception!"); 59 System.out.println("Test failed!"); 60 } catch (RuntimeOperationsException e) { 61 System.out.println("Got expected exception = " + 62 e.getCause().toString()); 63 System.out.println("Test passed!"); 64 } 65 return error; 66 } 67 68 private static int mbeanDeletion(MBeanServer mbs, String name) 69 throws Exception { 70 int error = 0; 71 try { 72 System.out.println("Test: unregisterMBean(" + name + ")"); 73 mbs.unregisterMBean(ObjectName.getInstance(name)); 74 error++; 75 System.out.println("Didn't get expected exception!"); 76 System.out.println("Test failed!"); 77 } catch (InstanceNotFoundException e) { 78 System.out.println("Got expected exception = " + e.toString()); 79 System.out.println("Test passed!"); 80 } 81 return error; 82 } 83 84 private static int mbeanQuery(MBeanServer mbs, 85 String name, 86 Set<ObjectName> expectedSet) 87 throws Exception { 88 int error = 0; 89 System.out.println("Test: queryNames(" + name + ")"); 90 Set<ObjectName> returnedSet = 91 mbs.queryNames(ObjectName.getInstance(name), null); 92 System.out.println("ReturnedSet = " + new TreeSet(returnedSet)); 93 System.out.println("ExpectedSet = " + new TreeSet(expectedSet)); 94 if (returnedSet.equals(expectedSet)) { 95 System.out.println("Test passed!"); 96 } else { 97 error++; 98 System.out.println("Test failed!"); 99 } 100 return error; 101 } 102 103 public static void main(String[] args) throws Exception { 104 105 int error = 0; 106 107 MBeanServer mbs = MBeanServerFactory.newMBeanServer(); 108 109 ObjectName[] namesArray = { 110 ObjectName.getInstance("d:k=abc"), 111 ObjectName.getInstance("d:k=abcd"), 112 ObjectName.getInstance("d:k=abcde"), 113 ObjectName.getInstance("d:k=abc,k2=v2"), 114 ObjectName.getInstance("d:k=abcd,k2=v2"), 115 ObjectName.getInstance("d:k=abcde,k2=v2"), 116 ObjectName.getInstance("d:k=\"abc\""), 117 ObjectName.getInstance("d:k=\"abc\",k2=v2"), 118 ObjectName.getInstance("d:p1=v1,p2=v2,p3=v3,p4=v4,p5=v5,p6=v6," + 119 "p7=v7,p8=v8,p9=v9,p10=v10,p11=v11,p12=v12") 120 }; 121 122 for (ObjectName name : namesArray) 123 mbs.createMBean(classname, name); 124 125 System.out.println("----------------------------------------------"); 126 System.out.println("TEST createMBean WITH PATTERNS"); 127 System.out.println("----------------------------------------------"); 128 129 error += mbeanCreation(mbs, "d:k=v,*"); 130 error += mbeanCreation(mbs, "d:k=*"); 131 error += mbeanCreation(mbs, "d:k=a?b"); 132 error += mbeanCreation(mbs, "d:k=\"?\""); 133 error += mbeanCreation(mbs, "d:k=\"a*b\""); 134 135 System.out.println("----------------------------------------------"); 136 System.out.println("TEST queryNames WITH PATTERNS"); 137 System.out.println("----------------------------------------------"); 138 139 Set<ObjectName> expectedSet = new HashSet<ObjectName>(); 140 for (ObjectName name : namesArray) 141 expectedSet.add(name); 142 expectedSet.add(MBeanServerDelegate.DELEGATE_NAME); 143 Set<ObjectName> returnedSet = 144 mbs.queryNames(ObjectName.getInstance("*:*"), null); 145 error += mbeanQuery(mbs, "*:*", expectedSet); 146 147 expectedSet = new HashSet<ObjectName>(); 148 for (ObjectName name : namesArray) 149 expectedSet.add(name); 150 error += mbeanQuery(mbs, "d:*", expectedSet); 151 152 expectedSet = new HashSet<ObjectName>(); 153 expectedSet.add(namesArray[0]); 154 expectedSet.add(namesArray[1]); 155 expectedSet.add(namesArray[2]); 156 expectedSet.add(namesArray[6]); 157 error += mbeanQuery(mbs, "d:k=*", expectedSet); 158 159 expectedSet = new HashSet<ObjectName>(); 160 expectedSet.add(namesArray[3]); 161 expectedSet.add(namesArray[4]); 162 expectedSet.add(namesArray[5]); 163 expectedSet.add(namesArray[7]); 164 error += mbeanQuery(mbs, "d:k=*,k2=v2", expectedSet); 165 166 expectedSet = new HashSet<ObjectName>(); 167 expectedSet.add(namesArray[3]); 168 expectedSet.add(namesArray[4]); 169 expectedSet.add(namesArray[5]); 170 expectedSet.add(namesArray[7]); 171 error += mbeanQuery(mbs, "d:k=*,k2=v?", expectedSet); 172 173 expectedSet = new HashSet<ObjectName>(); 174 expectedSet.add(namesArray[3]); 175 expectedSet.add(namesArray[4]); 176 expectedSet.add(namesArray[5]); 177 expectedSet.add(namesArray[7]); 178 error += mbeanQuery(mbs, "d:*,k2=v2", expectedSet); 179 180 expectedSet = new HashSet<ObjectName>(); 181 expectedSet.add(namesArray[1]); 182 error += mbeanQuery(mbs, "d:k=ab?d", expectedSet); 183 184 expectedSet = new HashSet<ObjectName>(); 185 expectedSet.add(namesArray[1]); 186 expectedSet.add(namesArray[4]); 187 error += mbeanQuery(mbs, "d:k=ab?d,*", expectedSet); 188 189 expectedSet = new HashSet<ObjectName>(); 190 expectedSet.add(namesArray[6]); 191 error += mbeanQuery(mbs, "d:k=\"*\"", expectedSet); 192 193 expectedSet = new HashSet<ObjectName>(); 194 expectedSet.add(namesArray[7]); 195 error += mbeanQuery(mbs, "d:k=\"*\",k2=v?", expectedSet); 196 197 expectedSet = new HashSet<ObjectName>(); 198 expectedSet.add(namesArray[8]); 199 error += mbeanQuery(mbs, 200 "d:p1=v?,p2=v?,p3=v?,p4=v?,p5=v?,p6=v?," + 201 "p7=v?,p8=v?,p9=v?,p10=v??,p11=v??,p12=v??", 202 expectedSet); 203 204 System.out.println("----------------------------------------------"); 205 System.out.println("TEST unregisterMBean WITH PATTERNS"); 206 System.out.println("----------------------------------------------"); 207 208 error += mbeanDeletion(mbs, "d:k=*"); 209 error += mbeanDeletion(mbs, "d:k=\"*\""); 210 211 if (error > 0) { 212 final String msg = "Test FAILED! Got " + error + " error(s)"; 213 System.out.println(msg); 214 throw new IllegalArgumentException(msg); 215 } else { 216 System.out.println("Test PASSED!"); 217 } 218 } 219 }