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.ScanManager
Definition: ScanManager.java:103
com.sun.jmx.examples.scandir.DirectoryScanner
Definition: DirectoryScanner.java:105
com.sun.jmx.examples.scandir.config
Definition: DirectoryScannerConfig.java:41
com.sun.jmx.examples.scandir.ScanManager.register
static ScanManagerMXBean register(MBeanServerConnection mbs)
Definition: ScanManager.java:275
com.sun.jmx.examples.scandir.ScanManagerMXBean.ScanState
Definition: ScanManagerMXBean.java:77
com.sun.jmx.examples.scandir.ScanManagerMXBean.stop
void stop()
com.sun.jmx.examples.scandir.config.ScanManagerConfig.getScan
DirectoryScannerConfig getScan(String name)
Definition: ScanManagerConfig.java:233
com.sun.jmx.examples.scandir.config.ResultRecord
Definition: ResultRecord.java:62
com.sun.jmx.examples.scandir
com.sun.jmx.examples.scandir.DirectoryScannerMXBean.getRootDirectory
String getRootDirectory()
com.sun.jmx.examples.scandir.TestUtils
Definition: TestUtils.java:57
com.sun.jmx.examples.scandir.DirectoryScannerTest.testScan
void testScan()
Definition: DirectoryScannerTest.java:186
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.DirectoryScannerMXBean
Definition: DirectoryScannerMXBean.java:63
com.sun.jmx.examples.scandir.config.DirectoryScannerConfig
Definition: DirectoryScannerConfig.java:67
com.sun.jmx.examples
com.sun.jmx.examples.scandir.DirectoryScannerTest.DirectoryScannerTest
DirectoryScannerTest(String testName)
Definition: DirectoryScannerTest.java:74
com.sun.jmx.examples.scandir.DirectoryScanner.getState
ScanState getState()
Definition: DirectoryScanner.java:222
com.sun.jmx.examples.scandir.ScanManagerMXBean.getConfigurationMBean
ScanDirConfigMXBean getConfigurationMBean()
com.sun.jmx.examples.scandir.DirectoryScannerTest.tearDown
void tearDown()
Definition: DirectoryScannerTest.java:81
com.sun.jmx.examples.scandir.DirectoryScanner.scan
void scan()
Definition: DirectoryScanner.java:243
com.sun
com.sun.jmx.examples.scandir.ScanManagerMXBean.start
void start()
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.DirectoryScannerMXBean.getState
ScanState getState()
com.sun.jmx.examples.scandir.ScanManagerTest.Call
Definition: ScanManagerTest.java:131
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.getConfiguration
ScanManagerConfig getConfiguration()
com.sun.jmx.examples.scandir.DirectoryScannerTest.setUp
void setUp()
Definition: DirectoryScannerTest.java:78
com.sun.jmx.examples.scandir.ScanManagerMXBean.applyConfiguration
void applyConfiguration(boolean fromMemory)
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.getDirectoryScanners
Map< String, DirectoryScannerMXBean > getDirectoryScanners()
com
com.sun.jmx.examples.scandir.config.ScanManagerConfig
Definition: ScanManagerConfig.java:72
com.sun.jmx.examples.scandir.ScanDirConfigMXBean
Definition: ScanDirConfigMXBean.java:83
com.sun.jmx
com.sun.jmx.examples.scandir.DirectoryScannerTest
Definition: DirectoryScannerTest.java:72
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.addDirectoryScanner
DirectoryScannerConfig addDirectoryScanner(String name, String dir, String filePattern, long sizeExceedsMaxBytes, long sinceLastModified)
com.sun.jmx.examples.scandir.DirectoryScannerTest.testAddNotificationListener
void testAddNotificationListener()
Definition: DirectoryScannerTest.java:279
com.sun.jmx.examples.scandir.ResultLogManager
Definition: ResultLogManager.java:81
com.sun.jmx.examples.scandir.ScanManagerMXBean
Definition: ScanManagerMXBean.java:66
com.sun.jmx.examples.scandir.DirectoryScannerTest.testGetState
void testGetState()
Definition: DirectoryScannerTest.java:258