KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > mx4j > tools > stats > StatsMBeansTest


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.mx4j.tools.stats;
10
11 import java.util.Date JavaDoc;
12 import java.util.SortedMap JavaDoc;
13 import javax.management.Attribute JavaDoc;
14 import javax.management.AttributeChangeNotification JavaDoc;
15 import javax.management.MBeanServer JavaDoc;
16 import javax.management.MBeanServerFactory JavaDoc;
17 import javax.management.NotificationBroadcasterSupport JavaDoc;
18 import javax.management.ObjectName JavaDoc;
19
20 import junit.framework.TestCase;
21 import mx4j.tools.stats.PointTime;
22
23 /**
24  * Test the Statistics MBeans
25  *
26  * @version $Revision: 1.4 $
27  */

28 public class StatsMBeansTest extends TestCase
29 {
30    private MBeanServer JavaDoc server;
31
32    /**
33     * Constructor requested by the JUnit framework
34     */

35    public StatsMBeansTest()
36    {
37       super("StatsMBeansTest Test");
38    }
39
40    /**
41     * Constructor requested by the JUnit framework
42     */

43    public StatsMBeansTest(String JavaDoc name)
44    {
45       super(name);
46    }
47
48    public void setUp()
49    {
50       try
51       {
52          server = MBeanServerFactory.createMBeanServer("Stats");
53       }
54       catch (Exception JavaDoc e)
55       {
56          e.printStackTrace();
57       }
58    }
59
60    public void tearDown()
61    {
62       try
63       {
64          MBeanServerFactory.releaseMBeanServer(server);
65       }
66       catch (Exception JavaDoc e)
67       {
68          e.printStackTrace();
69       }
70    }
71
72    public void testValueMBean() throws Exception JavaDoc
73    {
74       ObjectName JavaDoc name = new ObjectName JavaDoc("Domain:name=value");
75       try
76       {
77          server.createMBean("mx4j.tools.stats.ValueStatisticsRecorder", name, null);
78
79          // Test that nothing happens if not started
80

81          //Every time the value is set the statistics are updated
82
server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
83          server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(5)));
84          server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
85
86          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Max"));
87          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Min"));
88          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Average"));
89          assertNull(server.getAttribute(name, "RecordingStart"));
90          assertEquals(0, ((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size());
91
92          // start it
93
server.invoke(name, "start", null, null);
94
95          //Every time the value is set the statistics are updated
96
server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
97          server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(5)));
98          server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
99
100          assertEquals(new Double JavaDoc(20), server.getAttribute(name, "Max"));
101          assertEquals(new Double JavaDoc(5), server.getAttribute(name, "Min"));
102          assertEquals(11.6, ((Double JavaDoc)server.getAttribute(name, "Average")).doubleValue(), 0.1);
103          assertEquals(3, ((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size());
104          Date JavaDoc start1 = (Date JavaDoc)server.getAttribute(name, "RecordingStart");
105
106          // start it
107
server.invoke(name, "stop", null, null);
108          server.invoke(name, "start", null, null);
109
110          // Restart with longs
111
server.setAttribute(name, new Attribute JavaDoc("Value", new Long JavaDoc(10)));
112          server.setAttribute(name, new Attribute JavaDoc("Value", new Long JavaDoc(5)));
113          server.setAttribute(name, new Attribute JavaDoc("Value", new Long JavaDoc(20)));
114
115          assertEquals(new Long JavaDoc(20), server.getAttribute(name, "Max"));
116          assertEquals(new Long JavaDoc(5), server.getAttribute(name, "Min"));
117          assertEquals(11, ((Long JavaDoc)server.getAttribute(name, "Average")).longValue());
118          assertEquals(((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size(), 3);
119          Date JavaDoc start2 = (Date JavaDoc)server.getAttribute(name, "RecordingStart");
120
121          assertTrue(start1.equals(start2) || start1.before(start2));
122          SortedMap JavaDoc values = (SortedMap JavaDoc)server.getAttribute(name, "Entries");
123          PointTime point1 = (PointTime)values.firstKey();
124          PointTime point2 = (PointTime)values.lastKey();
125          assertTrue(point1.getDate().equals(point2.getDate()) || point1.getDate().before(point2.getDate()));
126
127          // re start it
128
server.invoke(name, "stop", null, null);
129          server.invoke(name, "start", null, null);
130
131          int maxSize = ((Integer JavaDoc)server.getAttribute(name, "MaxEntries")).intValue();
132          // set some random number
133
for (int i = 0; i < maxSize * 2; i++)
134          {
135             server.setAttribute(name, new Attribute JavaDoc("Value", new Double JavaDoc(Math.random())));
136          }
137
138          // min has to be higher than 0
139
assertTrue(((Double JavaDoc)server.getAttribute(name, "Min")).doubleValue() >= 0);
140          // max has to be less than 1
141
assertTrue(((Double JavaDoc)server.getAttribute(name, "Max")).doubleValue() <= 1);
142
143          //check than max size of entries has been kept
144
assertEquals(((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size(), maxSize);
145       }
146       finally
147       {
148          server.unregisterMBean(name);
149       }
150    }
151
152    public void testNotificationMBean() throws Exception JavaDoc
153    {
154       ObjectName JavaDoc name = new ObjectName JavaDoc("Domain:name=notification");
155       ObjectName JavaDoc beanName = new ObjectName JavaDoc("Domain:name=observed");
156       try
157       {
158          server.createMBean("mx4j.tools.stats.NotificationStatisticsRecorder", name, null);
159          Test t = new Test();
160          server.registerMBean(t, beanName);
161          server.setAttribute(name, new Attribute JavaDoc("ObservedObject", beanName));
162          server.setAttribute(name, new Attribute JavaDoc("ObservedAttribute", "Value"));
163
164          // Test that nothing happens if not started
165

166          //Every time the value is set the statistics are updated
167
server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
168          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(5)));
169          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
170
171          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Max"));
172          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Min"));
173          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Average"));
174          assertEquals(0, ((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size());
175
176          // start it
177
server.invoke(name, "start", null, null);
178
179          //Every time the value is set the statistics are updated
180
server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
181          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(5)));
182          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
183
184          assertEquals(new Double JavaDoc(20), server.getAttribute(name, "Max"));
185          assertEquals(new Double JavaDoc(5), server.getAttribute(name, "Min"));
186          assertEquals(11.6, ((Double JavaDoc)server.getAttribute(name, "Average")).doubleValue(), 0.1);
187          assertEquals(3, ((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size());
188
189          // start it
190
server.invoke(name, "stop", null, null);
191          server.invoke(name, "start", null, null);
192
193          // Restart with longs
194
server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
195          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(15)));
196          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
197
198          assertEquals(new Double JavaDoc(20), server.getAttribute(name, "Max"));
199          assertEquals(new Double JavaDoc(10), server.getAttribute(name, "Min"));
200          assertEquals(15, ((Double JavaDoc)server.getAttribute(name, "Average")).longValue());
201          assertEquals(((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size(), 3);
202
203       }
204       finally
205       {
206          server.unregisterMBean(name);
207       }
208    }
209
210    public synchronized void testTimedMBean() throws Exception JavaDoc
211    {
212       ObjectName JavaDoc name = new ObjectName JavaDoc("Domain:name=notification");
213       ObjectName JavaDoc beanName = new ObjectName JavaDoc("Domain:name=observed");
214       try
215       {
216          server.createMBean("mx4j.tools.stats.TimedStatisticsRecorder", name, null);
217          Test t = new Test();
218          server.registerMBean(t, beanName);
219          server.setAttribute(name, new Attribute JavaDoc("ObservedObject", beanName));
220          server.setAttribute(name, new Attribute JavaDoc("ObservedAttribute", "Value"));
221          server.setAttribute(name, new Attribute JavaDoc("Granularity", new Long JavaDoc(1000)));
222
223          // Test that nothing happens if not started
224

225          //Every time the value is set the statistics are updated
226
server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
227          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(5)));
228          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
229
230          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Max"));
231          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Min"));
232          assertEquals(new Long JavaDoc(0), server.getAttribute(name, "Average"));
233          assertEquals(0, ((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size());
234
235          // start it
236
server.invoke(name, "start", null, null);
237
238          //Every time the value is set the statistics are updated
239
server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
240          Thread.currentThread().sleep(1500);
241          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(5)));
242          Thread.currentThread().sleep(1500);
243          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
244          Thread.currentThread().sleep(1500);
245
246          assertEquals(new Double JavaDoc(20), server.getAttribute(name, "Max"));
247          assertEquals(new Double JavaDoc(5), server.getAttribute(name, "Min"));
248          // difficult to predict an exact value
249
assertTrue(((Double JavaDoc)server.getAttribute(name, "Average")).longValue() > 5 && ((Double JavaDoc)server.getAttribute(name, "Average")).longValue() < 20);
250          assertTrue(((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size() >= 3);
251
252          // start it
253
server.invoke(name, "stop", null, null);
254          server.invoke(name, "start", null, null);
255
256          // Restart with longs
257
server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(10)));
258          Thread.currentThread().sleep(1500);
259          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(15)));
260          Thread.currentThread().sleep(1500);
261          server.setAttribute(beanName, new Attribute JavaDoc("Value", new Double JavaDoc(20)));
262          Thread.currentThread().sleep(1500);
263
264          assertEquals(new Double JavaDoc(20), server.getAttribute(name, "Max"));
265          assertEquals(new Double JavaDoc(10), server.getAttribute(name, "Min"));
266          // difficult to predict an exact value
267
assertTrue(((Double JavaDoc)server.getAttribute(name, "Average")).longValue() >= 15 && ((Double JavaDoc)server.getAttribute(name, "Average")).longValue() <= 20);
268          assertTrue(((SortedMap JavaDoc)server.getAttribute(name, "Entries")).size() >= 3);
269
270       }
271       finally
272       {
273          server.unregisterMBean(name);
274       }
275    }
276
277    public interface TestMBean
278    {
279       public double getValue();
280
281       public void setValue(double value);
282    }
283
284    public class Test extends NotificationBroadcasterSupport JavaDoc implements TestMBean
285    {
286       private double value;
287
288       public double getValue()
289       {
290          return value;
291       }
292
293       public void setValue(double value)
294       {
295          double oldValue = this.value;
296          this.value = value;
297          sendNotification(new AttributeChangeNotification JavaDoc(this, 0L, System.currentTimeMillis(), "test", "Value", Double JavaDoc.class.toString(), new Double JavaDoc(oldValue), new Double JavaDoc(value)));
298       }
299    }
300
301 }
302
303
Popular Tags