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 }