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