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 }