blob: 394a41f9ef6e6b5c7539d38af2534e5468315930 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2005 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25 * @test
26 * @bug 4886033
27 * @summary Query.{initial,any,final}SubString fail if the
28 * matching constraint string contains wildcards.
29 * @author Luis-Miguel Alventosa
30 * @run clean QuerySubstringTest
31 * @run build QuerySubstringTest
32 * @run main QuerySubstringTest
33 */
34
35import java.lang.management.ManagementFactory;
36import javax.management.MBeanServer;
37import javax.management.ObjectName;
38import javax.management.Query;
39import javax.management.QueryExp;
40
41public class QuerySubstringTest {
42
43 public static interface SimpleMBean {
44 public String getString();
45 }
46
47 public static class Simple implements SimpleMBean {
48 public Simple(String value) {
49 this.value = value;
50 }
51 public String getString() {
52 return value;
53 }
54 private String value;
55 }
56
57 private static String[][] data = {
58 { "a*b?c\\d[e-f]", "OK", "OK", "OK" },
59 { "a*b?c\\d[e-f]g", "OK", "OK", "KO" },
60 { "za*b?c\\d[e-f]", "KO", "OK", "OK" },
61 { "za*b?c\\d[e-f]g", "KO", "OK", "KO" },
62 { "a*b?c\\de", "KO", "KO", "KO" },
63 { "a*b?c\\deg", "KO", "KO", "KO" },
64 { "za*b?c\\de", "KO", "KO", "KO" },
65 { "za*b?c\\deg", "KO", "KO", "KO" },
66 { "a*b?c\\df", "KO", "KO", "KO" },
67 { "a*b?c\\dfg", "KO", "KO", "KO" },
68 { "za*b?c\\df", "KO", "KO", "KO" },
69 { "za*b?c\\dfg", "KO", "KO", "KO" },
70 { "axxbxc\\de", "KO", "KO", "KO" },
71 { "axxbxc\\deg", "KO", "KO", "KO" },
72 { "zaxxbxc\\de", "KO", "KO", "KO" },
73 { "zaxxbxc\\deg", "KO", "KO", "KO" },
74 { "axxbxc\\df", "KO", "KO", "KO" },
75 { "axxbxc\\dfg", "KO", "KO", "KO" },
76 { "zaxxbxc\\df", "KO", "KO", "KO" },
77 { "zaxxbxc\\dfg", "KO", "KO", "KO" },
78 };
79
80 private static int query(MBeanServer mbs,
81 int type,
82 String substring,
83 String[][] data) throws Exception {
84
85 int error = 0;
86
87 String querySubString = null;
88 switch (type) {
89 case 1:
90 querySubString = "InitialSubString";
91 break;
92 case 2:
93 querySubString = "AnySubString";
94 break;
95 case 3:
96 querySubString = "FinalSubString";
97 break;
98 }
99
100 System.out.println("\n" + querySubString + " = " + substring + "\n");
101
102 for (int i = 0; i < data.length; i++) {
103 ObjectName on = new ObjectName("test:type=Simple,query=" +
104 querySubString + ",name=" + i);
105 Simple s = new Simple(data[i][0]);
106 mbs.registerMBean(s, on);
107 QueryExp q = null;
108 switch (type) {
109 case 1:
110 q = Query.initialSubString(Query.attr("String"),
111 Query.value(substring));
112 break;
113 case 2:
114 q = Query.anySubString(Query.attr("String"),
115 Query.value(substring));
116 break;
117 case 3:
118 q = Query.finalSubString(Query.attr("String"),
119 Query.value(substring));
120 break;
121 }
122 q.setMBeanServer(mbs);
123 boolean r = q.apply(on);
124 System.out.print("Attribute Value = " +
125 mbs.getAttribute(on, "String"));
126 if (r && "OK".equals(data[i][type])) {
127 System.out.println(" OK");
128 } else if (!r && "KO".equals(data[i][type])) {
129 System.out.println(" KO");
130 } else {
131 System.out.println(" Error");
132 error++;
133 }
134 }
135
136 return error;
137 }
138
139 public static void main(String[] args) throws Exception {
140
141 int error = 0;
142
143 String pattern = "a*b?c\\d[e-f]";
144
145 System.out.println(
146 "\n--- Test javax.management.Query.{initial|any|final}SubString ---");
147
148 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
149
150 error += query(mbs, 1, pattern, data);
151
152 error += query(mbs, 2, pattern, data);
153
154 error += query(mbs, 3, pattern, data);
155
156 if (error > 0) {
157 System.out.println("\nTest failed! " + error + " errors.\n");
158 throw new IllegalArgumentException("Test failed");
159 } else {
160 System.out.println("\nTest passed!\n");
161 }
162 }
163}