blob: d833e5eb9aba5f4026134fe2edc3dac8af60f52c [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2004 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 4982289
27 * @summary Test MemoryNotificationInfo.from to return a valid
28 * MemoryNotificationInfo object. Or throw exception if
29 * the input CompositeData is invalid.
30 * @author Mandy Chung
31 *
32 * @compile -source 1.5 OpenTypeConverter.java
33 * @build MemoryNotifInfoCompositeData
34 * @run main MemoryNotifInfoCompositeData
35 */
36
37import javax.management.openmbean.*;
38import java.lang.management.MemoryNotificationInfo;
39import java.lang.management.MemoryUsage;
40import sun.management.MemoryUsageCompositeData;
41
42public class MemoryNotifInfoCompositeData {
43 public static void main(String[] argv) throws Exception {
44 createGoodCompositeData();
45 badNameCompositeData();
46 badTypeCompositeData();
47 System.out.println("Test passed");
48 }
49
50 private static final int POOL_NAME = 1;
51 private static final int COUNT = 2;
52 private static final int USAGE = 3;
53 private static final String[] validItemNames = {
54 "dummy1",
55 "poolName",
56 "count",
57 "usage",
58 "dummy2",
59 };
60
61 // these values are synchronized with the item names
62 private static final Object[] values = {
63 "Dummy",
64 "Foo",
65 new Long(100),
66 MemoryUsageCompositeData.
67 toCompositeData(new MemoryUsage(0, 100, 1000, 5000)),
68 "Dummy",
69 };
70
71 public static void createGoodCompositeData() throws Exception {
72
73 // get the CompositeType for MemoryUsage
74 validItemTypes[USAGE] = OpenTypeConverter.toOpenType(MemoryUsage.class);
75 CompositeType ct =
76 new CompositeType("MyCompositeType",
77 "CompositeType for MemoryNotificationInfo",
78 validItemNames,
79 validItemNames,
80 validItemTypes);
81 CompositeData cd =
82 new CompositeDataSupport(ct,
83 validItemNames,
84 values);
85
86 MemoryNotificationInfo info = MemoryNotificationInfo.from(cd);
87 if (!info.getPoolName().equals(values[POOL_NAME])) {
88 throw new RuntimeException("pool name = " + info.getPoolName() +
89 " expected = " + values[POOL_NAME]);
90 }
91 if (info.getCount() != ((Long) values[COUNT]).longValue()) {
92 throw new RuntimeException("count = " + info.getCount() +
93 " expected = " + values[COUNT]);
94 }
95 if (info.getUsage().getInit() != 0) {
96 throw new RuntimeException("usage init = " +
97 info.getUsage().getInit() +
98 " expected = 0");
99 }
100 if (info.getUsage().getUsed() != 100) {
101 throw new RuntimeException("usage used = " +
102 info.getUsage().getUsed() +
103 " expected = 100");
104 }
105 if (info.getUsage().getCommitted () != 1000) {
106 throw new RuntimeException("usage committed = " +
107 info.getUsage().getCommitted() +
108 " expected = 1000");
109 }
110 if (info.getUsage().getMax() != 5000) {
111 throw new RuntimeException("usage max = " +
112 info.getUsage().getMax() +
113 " expected = 5000");
114 }
115 System.out.print("Pool name = " + info.getPoolName());
116 System.out.println(" Count = " + info.getCount());
117 System.out.println("Usage = " + info.getUsage());
118 }
119
120 public static void badNameCompositeData() throws Exception {
121 CompositeType ct =
122 new CompositeType("MyCompositeType",
123 "CompositeType for MemoryNotificationInfo",
124 badItemNames,
125 badItemNames,
126 validItemTypes);
127 CompositeData cd =
128 new CompositeDataSupport(ct,
129 badItemNames,
130 values);
131
132 try {
133 MemoryNotificationInfo info = MemoryNotificationInfo.from(cd);
134 } catch (IllegalArgumentException e) {
135 System.out.println("Expected exception: " +
136 e.getMessage());
137 return;
138 }
139 throw new RuntimeException(
140 "IllegalArgumentException not thrown");
141 }
142
143 public static void badTypeCompositeData() throws Exception {
144 CompositeType ct =
145 new CompositeType("MyCompositeType",
146 "CompositeType for MemoryNotificationInfo",
147 validItemNames,
148 validItemNames,
149 badItemTypes);
150
151 final Object[] values1 = {
152 "Dummy",
153 "Foo",
154 new Long(100),
155 "Bad memory usage object",
156 "Dummy",
157 };
158
159 CompositeData cd =
160 new CompositeDataSupport(ct,
161 validItemNames,
162 values1);
163
164 try {
165 MemoryNotificationInfo info = MemoryNotificationInfo.from(cd);
166 } catch (IllegalArgumentException e) {
167 System.out.println("Expected exception: " +
168 e.getMessage());
169 return;
170 }
171 throw new RuntimeException(
172 "IllegalArgumentException not thrown");
173 }
174
175 private static OpenType[] validItemTypes = {
176 SimpleType.STRING,
177 SimpleType.STRING,
178 SimpleType.LONG,
179 null, // OpenTypeConverter.toOpenType(MemoryUsage.class)
180 SimpleType.STRING,
181 };
182 private static final String[] badItemNames = {
183 "poolName",
184 "BadCountName",
185 "usage",
186 "dummy1",
187 "dummy2",
188 };
189 private static final OpenType[] badItemTypes = {
190 SimpleType.STRING,
191 SimpleType.STRING,
192 SimpleType.LONG,
193 SimpleType.STRING, // Bad type
194 SimpleType.STRING,
195 };
196}