📄 directoryscannertest.java
字号:
/* * DirectoryScannerTest.java * JUnit based test * * Created on July 12, 2006, 7:44 PM * * @(#)DirectoryScannerTest.java 1.2 06/08/02 * * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * -Redistribution of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * -Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or intended * for use in the design, construction, operation or maintenance of any * nuclear facility. */package com.sun.jmx.examples.scandir;import com.sun.jmx.examples.scandir.config.DirectoryScannerConfig;import com.sun.jmx.examples.scandir.config.ResultRecord;import com.sun.jmx.examples.scandir.config.ScanManagerConfig;import java.util.LinkedList;import java.util.concurrent.BlockingQueue;import junit.framework.*;import com.sun.jmx.examples.scandir.ScanManagerMXBean.ScanState;import static com.sun.jmx.examples.scandir.ScanManagerMXBean.ScanState.*;import com.sun.jmx.examples.scandir.ScanManagerTest.Call;import java.util.EnumSet;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.TimeUnit;import javax.management.AttributeChangeNotification;import javax.management.Notification;import javax.management.NotificationEmitter;import javax.management.NotificationFilter;import javax.management.NotificationListener;import static com.sun.jmx.examples.scandir.ScanManagerTest.*;import static com.sun.jmx.examples.scandir.TestUtils.*;import java.io.File;import java.lang.management.ManagementFactory;import java.util.List;/** * Unit tests for {@code DirectoryScanner} * * @author Sun Microsystems, 2006 - All rights reserved. */public class DirectoryScannerTest extends TestCase { public DirectoryScannerTest(String testName) { super(testName); } protected void setUp() throws Exception { } protected void tearDown() throws Exception { } public static Test suite() { TestSuite suite = new TestSuite(DirectoryScannerTest.class); return suite; } private void doTestOperation( DirectoryScannerMXBean proxy, Call op, EnumSet<ScanState> after, String testName) throws Exception { System.out.println("doTestOperation: "+testName); final LinkedBlockingQueue<Notification> queue = new LinkedBlockingQueue<Notification>(); NotificationListener listener = new NotificationListener() { public void handleNotification(Notification notification, Object handback) { try { queue.put(notification); } catch (Exception x) { System.err.println("Failed to queue notif: "+x); } } }; NotificationFilter filter = null; Object handback = null; final ScanState before; final NotificationEmitter emitter = (NotificationEmitter) makeNotificationEmitter(proxy,DirectoryScannerMXBean.class); emitter.addNotificationListener(listener, filter, handback); before = proxy.getState(); op.call(); try { final Notification notification = queue.poll(3000,TimeUnit.MILLISECONDS); assertEquals(AttributeChangeNotification.ATTRIBUTE_CHANGE, notification.getType()); assertEquals(AttributeChangeNotification.class, notification.getClass()); assertEquals(getObjectName(proxy), notification.getSource()); AttributeChangeNotification acn = (AttributeChangeNotification)notification; assertEquals("State",acn.getAttributeName()); assertEquals(ScanState.class.getName(),acn.getAttributeType()); assertEquals(before,ScanState.valueOf((String)acn.getOldValue())); assertContained(after,ScanState.valueOf((String)acn.getNewValue())); emitter.removeNotificationListener(listener,filter,handback); } finally { try { op.cancel(); } catch (Exception x) { System.err.println("Failed to cleanup: "+x); } } } /** * Test of getRootDirectory method, of class com.sun.jmx.examples.scandir.DirectoryScanner. */ public void testGetRootDirectory() throws Exception { System.out.println("getRootDirectory"); final ScanManagerMXBean manager = ScanManager.register(); try { final String tmpdir = System.getProperty("java.io.tmpdir"); final ScanDirConfigMXBean config = manager.getConfigurationMBean(); System.err.println("Configuration MXBean is: " + config); final DirectoryScannerConfig bean = config.addDirectoryScanner("test",tmpdir,".*",0,0); final String root = bean.getRootDirectory(); if (root == null) throw new NullPointerException("bean.getRootDirectory()"); if (config.getConfiguration().getScan("test").getRootDirectory() == null) throw new NullPointerException("config.getConfig().getScan(\"test\").getRootDirectory()"); manager.applyConfiguration(true); final DirectoryScannerMXBean proxy = manager.getDirectoryScanners().get("test"); final File tmpFile = new File(tmpdir); final File rootFile = new File(proxy.getRootDirectory()); assertEquals(tmpFile,rootFile); } catch (Exception x) { x.printStackTrace(); throw x; } finally { try { ManagementFactory.getPlatformMBeanServer(). unregisterMBean(ScanManager.SCAN_MANAGER_NAME); } catch (Exception x) { System.err.println("Failed to cleanup: "+x); } } } /** * Test of scan method, of class com.sun.jmx.examples.scandir.DirectoryScanner. */ public void testScan() throws Exception { System.out.println("scan"); final ScanManagerMXBean manager = ScanManager.register(); try { final String tmpdir = System.getProperty("java.io.tmpdir"); final ScanDirConfigMXBean config = manager.getConfigurationMBean(); final DirectoryScannerConfig bean = config.addDirectoryScanner("test1",tmpdir,".*",0,0); config.addDirectoryScanner("test2",tmpdir,".*",0,0); config.addDirectoryScanner("test3",tmpdir,".*",0,0); manager.applyConfiguration(true); final DirectoryScannerMXBean proxy = manager.getDirectoryScanners().get("test1"); final Call op = new Call() { public void call() throws Exception { final BlockingQueue<Notification> queue = new LinkedBlockingQueue<Notification>(); final NotificationListener listener = new NotificationListener() { public void handleNotification(Notification notification, Object handback) { try { queue.put(notification); } catch (Exception e) { e.printStackTrace(); } } }; manager.start(); while(true) { final Notification n = queue.poll(10,TimeUnit.SECONDS); if (n == null) break; final AttributeChangeNotification at = (AttributeChangeNotification) n; if (RUNNING == ScanState.valueOf((String)at.getNewValue())) break; else { System.err.println("New state: "+(String)at.getNewValue() +" isn't "+RUNNING); } } assertContained(EnumSet.of(SCHEDULED,RUNNING,COMPLETED), proxy.getState()); } public void cancel() throws Exception { manager.stop(); } }; doTestOperation(proxy,op, EnumSet.of(RUNNING,SCHEDULED,COMPLETED), "scan"); } catch (Exception x) { x.printStackTrace(); throw x; } finally { try { manager.stop(); } catch (Exception x) { System.err.println("Failed to stop: "+x); } try { ManagementFactory.getPlatformMBeanServer(). unregisterMBean(ScanManager.SCAN_MANAGER_NAME); } catch (Exception x) { System.err.println("Failed to cleanup: "+x); } } } /** * Test of getState method, of class com.sun.jmx.examples.scandir.DirectoryScanner. */ public void testGetState() { System.out.println("getState"); final DirectoryScannerConfig bean = new DirectoryScannerConfig("test"); bean.setRootDirectory(System.getProperty("java.io.tmpdir")); final ResultLogManager log = new ResultLogManager(); DirectoryScanner instance = new DirectoryScanner(bean,log); ScanState expResult = STOPPED; ScanState result = instance.getState(); assertEquals(STOPPED, result); instance.scan(); result = instance.getState(); assertEquals(COMPLETED, result); } /** * Test of addNotificationListener method, of class com.sun.jmx.examples.scandir.DirectoryScanner. */ public void testAddNotificationListener() throws Exception { System.out.println("addNotificationListener"); final ScanManagerMXBean manager = ScanManager.register(); final Call op = new Call() { public void call() throws Exception { manager.start(); } public void cancel() throws Exception { manager.stop(); } }; try { final String tmpdir = System.getProperty("java.io.tmpdir"); final ScanDirConfigMXBean config = manager.getConfigurationMBean(); final DirectoryScannerConfig bean = config.addDirectoryScanner("test1",tmpdir,".*",0,0); manager.applyConfiguration(true); final DirectoryScannerMXBean proxy = manager.getDirectoryScanners().get("test1"); doTestOperation(proxy,op, EnumSet.of(RUNNING,SCHEDULED), "scan"); } finally { try { ManagementFactory.getPlatformMBeanServer(). unregisterMBean(ScanManager.SCAN_MANAGER_NAME); } catch (Exception x) { System.err.println("Failed to cleanup: "+x); } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -