Crossfire JXClient, Trunk
DirectoryScannerTest.java
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * - Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * - Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution.
14  *
15  * - Neither the name of Oracle nor the names of its
16  * contributors may be used to endorse or promote products derived
17  * from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 /*
33  * This source code is provided to illustrate the usage of a given feature
34  * or technique and has been deliberately simplified. Additional steps
35  * required for a production-quality application, such as security checks,
36  * input validation and proper error handling, might not be present in
37  * this sample code.
38  */
39 
40 
41 package com.sun.jmx.examples.scandir;
42 
46 import java.util.LinkedList;
47 import java.util.concurrent.BlockingQueue;
48 import junit.framework.*;
52 import java.util.EnumSet;
53 import java.util.concurrent.LinkedBlockingQueue;
54 import java.util.concurrent.TimeUnit;
55 import javax.management.AttributeChangeNotification;
56 import javax.management.Notification;
57 import javax.management.NotificationEmitter;
58 import javax.management.NotificationFilter;
59 import javax.management.NotificationListener;
60 
61 import static com.sun.jmx.examples.scandir.ScanManagerTest.*;
62 import static com.sun.jmx.examples.scandir.TestUtils.*;
63 import java.io.File;
64 import java.lang.management.ManagementFactory;
65 import java.util.List;
66 
72 public class DirectoryScannerTest extends TestCase {
73 
74  public DirectoryScannerTest(String testName) {
75  super(testName);
76  }
77 
78  protected void setUp() throws Exception {
79  }
80 
81  protected void tearDown() throws Exception {
82  }
83 
84  public static Test suite() {
85  TestSuite suite = new TestSuite(DirectoryScannerTest.class);
86 
87  return suite;
88  }
89 
90  private void doTestOperation(
92  Call op,
93  EnumSet<ScanState> after,
94  String testName)
95  throws Exception {
96  System.out.println("doTestOperation: "+testName);
97 
98  final LinkedBlockingQueue<Notification> queue =
99  new LinkedBlockingQueue<Notification>();
100 
101  NotificationListener listener = new NotificationListener() {
102  public void handleNotification(Notification notification,
103  Object handback) {
104  try {
105  queue.put(notification);
106  } catch (Exception x) {
107  System.err.println("Failed to queue notif: "+x);
108  }
109  }
110  };
111  NotificationFilter filter = null;
112  Object handback = null;
113  final ScanState before;
114  final NotificationEmitter emitter = (NotificationEmitter)
115  makeNotificationEmitter(proxy,DirectoryScannerMXBean.class);
116  emitter.addNotificationListener(listener, filter, handback);
117  before = proxy.getState();
118  op.call();
119  try {
120  final Notification notification =
121  queue.poll(3000,TimeUnit.MILLISECONDS);
122  assertEquals(AttributeChangeNotification.ATTRIBUTE_CHANGE,
123  notification.getType());
124  assertEquals(AttributeChangeNotification.class,
125  notification.getClass());
126  assertEquals(getObjectName(proxy),
127  notification.getSource());
128  AttributeChangeNotification acn =
129  (AttributeChangeNotification)notification;
130  assertEquals("State",acn.getAttributeName());
131  assertEquals(ScanState.class.getName(),acn.getAttributeType());
132  assertEquals(before,ScanState.valueOf((String)acn.getOldValue()));
133  assertContained(after,ScanState.valueOf((String)acn.getNewValue()));
134  emitter.removeNotificationListener(listener,filter,handback);
135  } finally {
136  try {
137  op.cancel();
138  } catch (Exception x) {
139  System.err.println("Failed to cleanup: "+x);
140  }
141  }
142  }
143 
144 
148  public void testGetRootDirectory() throws Exception {
149  System.out.println("getRootDirectory");
150 
151  final ScanManagerMXBean manager = ScanManager.register();
152  try {
153  final String tmpdir = System.getProperty("java.io.tmpdir");
154  final ScanDirConfigMXBean config = manager.getConfigurationMBean();
155  System.err.println("Configuration MXBean is: " + config);
156  final DirectoryScannerConfig bean =
157  config.addDirectoryScanner("test",tmpdir,".*",0,0);
158  final String root = bean.getRootDirectory();
159  if (root == null)
160  throw new NullPointerException("bean.getRootDirectory()");
161  if (config.getConfiguration().getScan("test").getRootDirectory() == null)
162  throw new NullPointerException("config.getConfig().getScan(\"test\").getRootDirectory()");
163  manager.applyConfiguration(true);
164  final DirectoryScannerMXBean proxy =
165  manager.getDirectoryScanners().get("test");
166  final File tmpFile = new File(tmpdir);
167  final File rootFile = new File(proxy.getRootDirectory());
168  assertEquals(tmpFile,rootFile);
169  } catch (Exception x) {
170  x.printStackTrace();
171  throw x;
172  } finally {
173  try {
174  ManagementFactory.getPlatformMBeanServer().
175  unregisterMBean(ScanManager.SCAN_MANAGER_NAME);
176  } catch (Exception x) {
177  System.err.println("Failed to cleanup: "+x);
178  }
179  }
180  }
181 
182 
186  public void testScan() throws Exception {
187  System.out.println("scan");
188 
189  final ScanManagerMXBean manager = ScanManager.register();
190  try {
191  final String tmpdir = System.getProperty("java.io.tmpdir");
192  final ScanDirConfigMXBean config = manager.getConfigurationMBean();
193  final DirectoryScannerConfig bean =
194  config.addDirectoryScanner("test1",tmpdir,".*",0,0);
195  config.addDirectoryScanner("test2",tmpdir,".*",0,0);
196  config.addDirectoryScanner("test3",tmpdir,".*",0,0);
197  manager.applyConfiguration(true);
198  final DirectoryScannerMXBean proxy =
199  manager.getDirectoryScanners().get("test1");
200  final Call op = new Call() {
201  public void call() throws Exception {
202  final BlockingQueue<Notification> queue =
203  new LinkedBlockingQueue<Notification>();
204  final NotificationListener listener = new NotificationListener() {
205  public void handleNotification(Notification notification,
206  Object handback) {
207  try {
208  queue.put(notification);
209  } catch (Exception e) {
210  e.printStackTrace();
211  }
212  }
213  };
214  manager.start();
215  while(true) {
216  final Notification n = queue.poll(10,TimeUnit.SECONDS);
217  if (n == null) break;
218  final AttributeChangeNotification at =
219  (AttributeChangeNotification) n;
220  if (RUNNING == ScanState.valueOf((String)at.getNewValue()))
221  break;
222  else {
223  System.err.println("New state: "+(String)at.getNewValue()
224  +" isn't "+RUNNING);
225  }
226  }
227  assertContained(EnumSet.of(SCHEDULED,RUNNING,COMPLETED),
228  proxy.getState());
229  }
230  public void cancel() throws Exception {
231  manager.stop();
232  }
233  };
234  doTestOperation(proxy,op,
235  EnumSet.of(RUNNING,SCHEDULED,COMPLETED),
236  "scan");
237  } catch (Exception x) {
238  x.printStackTrace();
239  throw x;
240  } finally {
241  try {
242  manager.stop();
243  } catch (Exception x) {
244  System.err.println("Failed to stop: "+x);
245  }
246  try {
247  ManagementFactory.getPlatformMBeanServer().
248  unregisterMBean(ScanManager.SCAN_MANAGER_NAME);
249  } catch (Exception x) {
250  System.err.println("Failed to cleanup: "+x);
251  }
252  }
253  }
254 
258  public void testGetState() {
259  System.out.println("getState");
260 
261  final DirectoryScannerConfig bean =
262  new DirectoryScannerConfig("test");
263  bean.setRootDirectory(System.getProperty("java.io.tmpdir"));
264  final ResultLogManager log = new ResultLogManager();
265  DirectoryScanner instance =
266  new DirectoryScanner(bean,log);
267 
268  ScanState expResult = STOPPED;
269  ScanState result = instance.getState();
270  assertEquals(STOPPED, result);
271  instance.scan();
272  result = instance.getState();
273  assertEquals(COMPLETED, result);
274  }
275 
279  public void testAddNotificationListener() throws Exception {
280  System.out.println("addNotificationListener");
281 
282  final ScanManagerMXBean manager = ScanManager.register();
283  final Call op = new Call() {
284  public void call() throws Exception {
285  manager.start();
286  }
287  public void cancel() throws Exception {
288  manager.stop();
289  }
290  };
291  try {
292  final String tmpdir = System.getProperty("java.io.tmpdir");
293  final ScanDirConfigMXBean config = manager.getConfigurationMBean();
294  final DirectoryScannerConfig bean =
295  config.addDirectoryScanner("test1",tmpdir,".*",0,0);
296  manager.applyConfiguration(true);
297  final DirectoryScannerMXBean proxy =
298  manager.getDirectoryScanners().get("test1");
299  doTestOperation(proxy,op,
300  EnumSet.of(RUNNING,SCHEDULED),
301  "scan");
302  } finally {
303  try {
304  ManagementFactory.getPlatformMBeanServer().
305  unregisterMBean(ScanManager.SCAN_MANAGER_NAME);
306  } catch (Exception x) {
307  System.err.println("Failed to cleanup: "+x);
308  }
309  }
310  }
311 
312 
313 }
com.sun.jmx.examples.scandir.ScanManagerTest
Definition: ScanManagerTest.java:77
com.sun.jmx.examples.scandir.DirectoryScanner.getState
ScanState getState()
Definition: DirectoryScanner.java:222
com.sun.jmx.examples.scandir.config
Definition: DirectoryScannerConfig.java:41
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.addDirectoryScanner
DirectoryScannerConfig addDirectoryScanner(String name, String dir, String filePattern, long sizeExceedsMaxBytes, long sinceLastModified)
result
the functions do not always return the right values for PostScript fonts There are still some bugs around the error handling Most of these problems will usually get fixed when some parameters are or the screen is refreshed Many fonts on Solaris fails to retrieve outlines and as the result
Definition: README.txt:145
com.sun.jmx.examples.scandir.DirectoryScannerTest.suite
static Test suite()
Definition: DirectoryScannerTest.java:84
com.sun.jmx.examples.scandir.DirectoryScannerTest.testGetRootDirectory
void testGetRootDirectory()
Definition: DirectoryScannerTest.java:148
com.sun.jmx.examples.scandir.ScanManagerMXBean.stop
void stop()
com.sun.jmx.examples.scandir.DirectoryScannerMXBean
Definition: DirectoryScannerMXBean.java:63
com.sun.jmx.examples.scandir
com.sun.jmx.examples.scandir.ScanManager.register
static ScanManagerMXBean register(MBeanServerConnection mbs)
Definition: ScanManager.java:275
com.sun.jmx.examples.scandir.ScanManager.SCAN_MANAGER_NAME
static final ObjectName SCAN_MANAGER_NAME
Definition: ScanManager.java:115
com.sun.jmx.examples.scandir.ScanManagerMXBean.getConfigurationMBean
ScanDirConfigMXBean getConfigurationMBean()
com.sun.jmx.examples.scandir.ScanManagerMXBean.applyConfiguration
void applyConfiguration(boolean fromMemory)
com.sun.jmx.examples.scandir.ScanManager
Definition: ScanManager.java:103
com.sun.jmx.examples.scandir.DirectoryScannerTest.doTestOperation
void doTestOperation(DirectoryScannerMXBean proxy, Call op, EnumSet< ScanState > after, String testName)
Definition: DirectoryScannerTest.java:90
com.sun.jmx.examples.scandir.DirectoryScannerTest.testAddNotificationListener
void testAddNotificationListener()
Definition: DirectoryScannerTest.java:279
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.getConfiguration
ScanManagerConfig getConfiguration()
com.sun.jmx.examples.scandir.ScanManagerMXBean.ScanState
Definition: ScanManagerMXBean.java:77
com.sun.jmx.examples.scandir.ScanManagerTest.Call
Definition: ScanManagerTest.java:131
com.sun.jmx.examples
com.sun.jmx.examples.scandir.DirectoryScannerMXBean.getState
ScanState getState()
com.sun.jmx.examples.scandir.DirectoryScannerTest.DirectoryScannerTest
DirectoryScannerTest(String testName)
Definition: DirectoryScannerTest.java:74
com.sun.jmx.examples.scandir.DirectoryScannerTest.tearDown
void tearDown()
Definition: DirectoryScannerTest.java:81
com.sun.jmx.examples.scandir.ScanManagerMXBean
Definition: ScanManagerMXBean.java:66
com.sun
com.sun.jmx.examples.scandir.DirectoryScanner
Definition: DirectoryScanner.java:105
com.sun.jmx.examples.scandir.config.ScanManagerConfig.getScan
DirectoryScannerConfig getScan(String name)
Definition: ScanManagerConfig.java:233
com.sun.jmx.examples.scandir.DirectoryScannerTest.testScan
void testScan()
Definition: DirectoryScannerTest.java:186
com.sun.jmx.examples.scandir.ScanManagerMXBean.start
void start()
com.sun.jmx.examples.scandir.DirectoryScannerMXBean.getRootDirectory
String getRootDirectory()
com.sun.jmx.examples.scandir.ScanManagerMXBean.getDirectoryScanners
Map< String, DirectoryScannerMXBean > getDirectoryScanners()
com.sun.jmx.examples.scandir.DirectoryScanner.scan
void scan()
Definition: DirectoryScanner.java:243
com.sun.jmx.examples.scandir.config.ResultRecord
Definition: ResultRecord.java:62
com.sun.jmx.examples.scandir.ResultLogManager
Definition: ResultLogManager.java:81
com
com.sun.jmx
com.sun.jmx.examples.scandir.DirectoryScannerTest
Definition: DirectoryScannerTest.java:72
com.sun.jmx.examples.scandir.DirectoryScannerTest.setUp
void setUp()
Definition: DirectoryScannerTest.java:78
com.sun.jmx.examples.scandir.ScanDirConfigMXBean
Definition: ScanDirConfigMXBean.java:83
com.sun.jmx.examples.scandir.DirectoryScannerTest.testGetState
void testGetState()
Definition: DirectoryScannerTest.java:258
com.sun.jmx.examples.scandir.TestUtils
Definition: TestUtils.java:57
com.sun.jmx.examples.scandir.config.DirectoryScannerConfig
Definition: DirectoryScannerConfig.java:67
com.sun.jmx.examples.scandir.config.ScanManagerConfig
Definition: ScanManagerConfig.java:72