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 the ObjectName.apply(ObjectName) method 28 * with wildcards in the key properties value part. 29 * @author Luis-Miguel Alventosa 30 * @modules java.management 31 * @run clean ApplyWildcardTest 32 * @run build ApplyWildcardTest 33 * @run main ApplyWildcardTest 34 */ 35 36 import javax.management.ObjectName; 37 38 public class ApplyWildcardTest { 39 40 private static final String positiveTests[][] = { 41 { "d:k=*", "d:k=\"\"" }, 42 43 { "d:k=*", "d:k=" }, 44 { "d:k=*", "d:k=v" }, 45 { "d:k=a*b", "d:k=axyzb" }, 46 { "d:k=a*b,*", "d:k=axyzb,k2=v2" }, 47 { "d:*,k=a*b", "d:k=axyzb,k2=v2" }, 48 { "d:k=?", "d:k=v" }, 49 { "d:k=a?b", "d:k=axb" }, 50 { "d:k=a?b,*", "d:k=axb,k2=v2" }, 51 { "d:*,k=a?b", "d:k=axb,k2=v2" }, 52 { "d:k=?*", "d:k=axyzb" }, 53 { "d:k=a?bc*d", "d:k=axbcyzd" }, 54 { "d:k=a?bc*d,*", "d:k=axbcyzd,k2=v2" }, 55 { "d:*,k=a?bc*d", "d:k=axbcyzd,k2=v2" }, 56 { "d:k1=?,k2=*", "d:k1=a,k2=ab" }, 57 { "d:k1=a?b,k2=c*d", "d:k1=axb,k2=cyzd" }, 58 { "d:k1=a?b,k2=c*d,*", "d:k1=axb,k2=cyzd,k3=v3" }, 59 { "d:*,k1=a?b,k2=c*d", "d:k1=axb,k2=cyzd,k3=v3" }, 60 61 { "d:k=\"*\"", "d:k=\"\"" }, 62 { "d:k=\"*\"", "d:k=\"v\"" }, 63 { "d:k=\"a*b\"", "d:k=\"axyzb\"" }, 64 { "d:k=\"a*b\",*", "d:k=\"axyzb\",k2=\"v2\"" }, 65 { "d:*,k=\"a*b\"", "d:k=\"axyzb\",k2=\"v2\"" }, 66 { "d:k=\"?\"", "d:k=\"v\"" }, 67 { "d:k=\"a?b\"", "d:k=\"axb\"" }, 68 { "d:k=\"a?b\",*", "d:k=\"axb\",k2=\"v2\"" }, 69 { "d:*,k=\"a?b\"", "d:k=\"axb\",k2=\"v2\"" }, 70 { "d:k=\"?*\"", "d:k=\"axyzb\"" }, 71 { "d:k=\"a?bc*d\"", "d:k=\"axbcyzd\"" }, 72 { "d:k=\"a?bc*d\",*", "d:k=\"axbcyzd\",k2=\"v2\"" }, 73 { "d:*,k=\"a?bc*d\"", "d:k=\"axbcyzd\",k2=\"v2\"" }, 74 { "d:k1=\"?\",k2=\"*\"", "d:k1=\"a\",k2=\"ab\"" }, 75 { "d:k1=\"a?b\",k2=\"c*d\"", "d:k1=\"axb\",k2=\"cyzd\"" }, 76 { "d:k1=\"a?b\",k2=\"c*d\",*", "d:k1=\"axb\",k2=\"cyzd\",k3=\"v3\"" }, 77 { "d:*,k1=\"a?b\",k2=\"c*d\"", "d:k1=\"axb\",k2=\"cyzd\",k3=\"v3\"" }, 78 }; 79 80 private static final String negativeTests[][] = { 81 { "d:k=\"*\"", "d:k=" }, 82 83 { "d:k=*", "d:k=,k2=" }, 84 { "d:k=*", "d:k=v,k2=v2" }, 85 { "d:k=a*b", "d:k=axyzbc" }, 86 { "d:k=a*b,*", "d:k=axyzbc,k2=v2" }, 87 { "d:*,k=a*b", "d:k=axyzbc,k2=v2" }, 88 { "d:k=?", "d:k=xyz" }, 89 { "d:k=a?b", "d:k=ab" }, 90 { "d:k=a?b,*", "d:k=ab,k2=v2" }, 91 { "d:*,k=a?b", "d:k=ab,k2=v2" }, 92 { "d:k=?*", "d:k=axyzb,k2=v2" }, 93 { "d:k=a?bc*d", "d:k=abcd" }, 94 { "d:k=a?bc*d,*", "d:k=abcd,k2=v2" }, 95 { "d:*,k=a?bc*d", "d:k=abcd,k2=v2" }, 96 { "d:k1=?,k2=*", "d:k1=ab,k2=ab" }, 97 { "d:k1=a?b,k2=c*d", "d:k1=ab,k2=cd" }, 98 { "d:k1=a?b,k2=c*d,*", "d:k1=ab,k2=cd,k3=v3" }, 99 { "d:*,k1=a?b,k2=c*d", "d:k1=ab,k2=cd,k3=v3" }, 100 101 { "d:k=\"*\"", "d:k=\"\",k2=\"\"" }, 102 { "d:k=\"*\"", "d:k=\"v\",k2=\"v2\"" }, 103 { "d:k=\"a*b\"", "d:k=\"axyzbc\"" }, 104 { "d:k=\"a*b\",*", "d:k=\"axyzbc\",k2=\"v2\"" }, 105 { "d:*,k=\"a*b\"", "d:k=\"axyzbc\",k2=\"v2\"" }, 106 { "d:k=\"?\"", "d:k=\"xyz\"" }, 107 { "d:k=\"a?b\"", "d:k=\"ab\"" }, 108 { "d:k=\"a?b\",*", "d:k=\"ab\",k2=\"v2\"" }, 109 { "d:*,k=\"a?b\"", "d:k=\"ab\",k2=\"v2\"" }, 110 { "d:k=\"?*\"", "d:k=\"axyzb\",k2=\"v2\"" }, 111 { "d:k=\"a?bc*d\"", "d:k=\"abcd\"" }, 112 { "d:k=\"a?bc*d\",*", "d:k=\"abcd\",k2=\"v2\"" }, 113 { "d:*,k=\"a?bc*d\"", "d:k=\"abcd\",k2=\"v2\"" }, 114 { "d:k1=\"?\",k2=\"*\"", "d:k1=\"ab\",k2=\"ab\"" }, 115 { "d:k1=\"a?b\",k2=\"c*d\"", "d:k1=\"ab\",k2=\"cd\"" }, 116 { "d:k1=\"a?b\",k2=\"c*d\",*", "d:k1=\"ab\",k2=\"cd\",k3=\"v3\"" }, 117 { "d:*,k1=\"a?b\",k2=\"c*d\"", "d:k1=\"ab\",k2=\"cd\",k3=\"v3\"" }, 118 }; 119 120 private static int runPositiveTests() { 121 int error = 0; 122 for (int i = 0; i < positiveTests.length; i++) { 123 System.out.println("----------------------------------------------"); 124 try { 125 ObjectName on1 = ObjectName.getInstance(positiveTests[i][0]); 126 ObjectName on2 = ObjectName.getInstance(positiveTests[i][1]); 127 System.out.println("\"" + on1 + "\".apply(\"" + on2 + "\")"); 128 boolean result = on1.apply(on2); 129 System.out.println("Result = " + result); 130 if (result == false) { 131 error++; 132 System.out.println("Test failed!"); 133 } else { 134 System.out.println("Test passed!"); 135 } 136 } catch (Exception e) { 137 error++; 138 System.out.println("Got Unexpected Exception = " + e.toString()); 139 System.out.println("Test failed!"); 140 } 141 System.out.println("----------------------------------------------"); 142 } 143 return error; 144 } 145 146 private static int runNegativeTests() { 147 int error = 0; 148 for (int i = 0; i < negativeTests.length; i++) { 149 System.out.println("----------------------------------------------"); 150 try { 151 ObjectName on1 = ObjectName.getInstance(negativeTests[i][0]); 152 ObjectName on2 = ObjectName.getInstance(negativeTests[i][1]); 153 System.out.println("\"" + on1 + "\".apply(\"" + on2 + "\")"); 154 boolean result = on1.apply(on2); 155 System.out.println("Result = " + result); 156 if (result == true) { 157 error++; 158 System.out.println("Test failed!"); 159 } else { 160 System.out.println("Test passed!"); 161 } 162 } catch (Exception e) { 163 error++; 164 System.out.println("Got Unexpected Exception = " + e.toString()); 165 System.out.println("Test failed!"); 166 } 167 System.out.println("----------------------------------------------"); 168 } 169 return error; 170 } 171 172 public static void main(String[] args) throws Exception { 173 174 int error = 0; 175 176 // Check null values 177 // 178 System.out.println("----------------------------------------------"); 179 System.out.println("Test ObjectName.apply(null)"); 180 try { 181 new ObjectName("d:k=v").apply(null); 182 error++; 183 System.out.println("Didn't get expected NullPointerException!"); 184 System.out.println("Test failed!"); 185 } catch (NullPointerException e) { 186 System.out.println("Got expected exception '" + e.toString() + "'"); 187 System.out.println("Test passed!"); 188 } catch (Exception e) { 189 error++; 190 System.out.println("Got unexpected exception '" + e.toString() + "'"); 191 System.out.println("Test failed!"); 192 } 193 System.out.println("----------------------------------------------"); 194 195 // Check domain pattern values 196 // 197 System.out.println("----------------------------------------------"); 198 System.out.println("Test ObjectName.apply(domain_pattern)"); 199 try { 200 if (new ObjectName("d:k=v").apply(new ObjectName("*:k=v"))) { 201 error++; 202 System.out.println("Got 'true' expecting 'false'"); 203 System.out.println("Test failed!"); 204 } else { 205 System.out.println("Got expected return value 'false'"); 206 System.out.println("Test passed!"); 207 } 208 } catch (Exception e) { 209 error++; 210 System.out.println("Got unexpected exception = " + e.toString()); 211 System.out.println("Test failed!"); 212 } 213 System.out.println("----------------------------------------------"); 214 215 // Check key property list pattern values 216 // 217 System.out.println("----------------------------------------------"); 218 System.out.println("Test ObjectName.apply(key_property_list_pattern)"); 219 try { 220 if (new ObjectName("d:k=v").apply(new ObjectName("d:k=v,*"))) { 221 error++; 222 System.out.println("Got 'true' expecting 'false'"); 223 System.out.println("Test failed!"); 224 } else { 225 System.out.println("Got expected return value 'false'"); 226 System.out.println("Test passed!"); 227 } 228 } catch (Exception e) { 229 error++; 230 System.out.println("Got unexpected exception = " + e.toString()); 231 System.out.println("Test failed!"); 232 } 233 System.out.println("----------------------------------------------"); 234 235 // Check key property value pattern values 236 // 237 System.out.println("----------------------------------------------"); 238 System.out.println("Test ObjectName.apply(key_property_value_pattern)"); 239 try { 240 if (new ObjectName("d:k=v").apply(new ObjectName("d:k=*"))) { 241 error++; 242 System.out.println("Got 'true' expecting 'false'"); 243 System.out.println("Test failed!"); 244 } else { 245 System.out.println("Got expected return value 'false'"); 246 System.out.println("Test passed!"); 247 } 248 } catch (Exception e) { 249 error++; 250 System.out.println("Got unexpected exception = " + e.toString()); 251 System.out.println("Test failed!"); 252 } 253 System.out.println("----------------------------------------------"); 254 255 error += runPositiveTests(); 256 error += runNegativeTests(); 257 258 if (error > 0) { 259 final String msg = "Test FAILED! Got " + error + " error(s)"; 260 System.out.println(msg); 261 throw new IllegalArgumentException(msg); 262 } else { 263 System.out.println("Test PASSED!"); 264 } 265 } 266 }