/* * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions 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 Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * This source code is provided to illustrate the usage of a given feature * or technique and has been deliberately simplified. Additional steps * required for a production-quality application, such as security checks, * input validation and proper error handling, might not be present in * this sample code. */ package com.sun.jmx.examples.scandir; import com.sun.jmx.examples.scandir.config.XmlConfigUtils; import com.sun.jmx.examples.scandir.config.FileMatch; import java.io.FileOutputStream; import java.io.IOException; import java.lang.management.ManagementFactory; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import junit.framework.*; import com.sun.jmx.examples.scandir.config.DirectoryScannerConfig; import com.sun.jmx.examples.scandir.config.ScanManagerConfig; import java.io.File; import java.util.concurrent.BlockingQueue; import javax.management.*; /** * Unit tests for {@code ScanDirConfig} * * @author Sun Microsystems, 2006 - All rights reserved. */ public class ScanDirConfigTest extends TestCase { public ScanDirConfigTest(String testName) { super(testName); } protected void setUp() throws Exception { } protected void tearDown() throws Exception { } public static Test suite() { TestSuite suite = new TestSuite(ScanDirConfigTest.class); return suite; } /** * Test of load method, of class com.sun.jmx.examples.scandir.ScanDirConfig. */ public void testLoad() throws Exception { System.out.println("load"); final File file = File.createTempFile("testconf",".xml"); final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath()); final ScanManagerConfig bean = new ScanManagerConfig("testLoad"); final DirectoryScannerConfig dir = new DirectoryScannerConfig("tmp"); dir.setRootDirectory(file.getParent()); bean.putScan(dir); XmlConfigUtils.write(bean,new FileOutputStream(file),false); instance.load(); assertEquals(bean,instance.getConfiguration()); bean.removeScan(dir.getName()); XmlConfigUtils.write(bean,new FileOutputStream(file),false); assertNotSame(bean,instance.getConfiguration()); instance.load(); assertEquals(bean,instance.getConfiguration()); } /** * Test of save method, of class com.sun.jmx.examples.scandir.ScanDirConfig. */ public void testSave() throws Exception { System.out.println("save"); final File file = File.createTempFile("testconf",".xml"); final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); final ScanManagerMXBean manager = ScanManager.register(mbs); try { final ScanDirConfigMXBean instance = manager.createOtherConfigurationMBean("testSave",file.getAbsolutePath()); assertTrue(mbs.isRegistered( ScanManager.makeScanDirConfigName("testSave"))); final ScanManagerConfig bean = new ScanManagerConfig("testSave"); final DirectoryScannerConfig dir = new DirectoryScannerConfig("tmp"); dir.setRootDirectory(file.getParent()); bean.putScan(dir); instance.setConfiguration(bean); instance.save(); final ScanManagerConfig loaded = new XmlConfigUtils(file.getAbsolutePath()).readFromFile(); assertEquals(instance.getConfiguration(),loaded); assertEquals(bean,loaded); instance.getConfiguration().removeScan("tmp"); instance.save(); assertNotSame(loaded,instance.getConfiguration()); final ScanManagerConfig loaded2 = new XmlConfigUtils(file.getAbsolutePath()).readFromFile(); assertEquals(instance.getConfiguration(),loaded2); } finally { manager.close(); mbs.unregisterMBean(ScanManager.SCAN_MANAGER_NAME); } final ObjectName all = new ObjectName(ScanManager.SCAN_MANAGER_NAME.getDomain()+":*"); assertEquals(0,mbs.queryNames(all,null).size()); } /** * Test of saveTo method, of class com.sun.jmx.examples.scandir.ScanProfile. */ /* public void testSaveTo() throws Exception { System.out.println("saveTo"); String filename = ""; ScanDirConfig instance = null; instance.saveTo(filename); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } */ /** * Test of getXmlConfigString method, of class com.sun.jmx.examples.scandir.ScanDirConfig. */ public void testGetXmlConfigString() throws Exception { System.out.println("getXmlConfigString"); try { final File file = File.createTempFile("testconf",".xml"); final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath()); final ScanManagerConfig bean = new ScanManagerConfig("testGetXmlConfigString"); final DirectoryScannerConfig dir = new DirectoryScannerConfig("tmp"); dir.setRootDirectory(file.getParent()); bean.putScan(dir); instance.setConfiguration(bean); System.out.println("Expected: " + XmlConfigUtils.toString(bean)); System.out.println("Received: " + instance.getConfiguration().toString()); assertEquals(XmlConfigUtils.toString(bean), instance.getConfiguration().toString()); } catch (Exception x) { x.printStackTrace(); throw x; } } /** * Test of addNotificationListener method, of class * com.sun.jmx.examples.scandir.ScanDirConfig. */ public void testAddNotificationListener() throws Exception { System.out.println("addNotificationListener"); final File file = File.createTempFile("testconf",".xml"); final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); final ScanManagerMXBean manager = ScanManager.register(mbs); try { final ScanDirConfigMXBean instance = TestUtils.makeNotificationEmitter( manager.createOtherConfigurationMBean("testSave", file.getAbsolutePath()), ScanDirConfigMXBean.class); assertTrue(mbs.isRegistered( ScanManager.makeScanDirConfigName("testSave"))); DirectoryScannerConfig dir = instance.addDirectoryScanner("tmp",file.getParent(),".*",0,0); final BlockingQueue<Notification> queue = new LinkedBlockingQueue<Notification>(); final NotificationListener listener = new NotificationListener() { public void handleNotification(Notification notification, Object handback) { queue.add(notification); } }; NotificationFilter filter = null; Object handback = null; ((NotificationEmitter)instance).addNotificationListener(listener, filter, handback); instance.save(); final ScanManagerConfig loaded = new XmlConfigUtils(file.getAbsolutePath()).readFromFile(); assertEquals(instance.getConfiguration(),loaded); final ScanManagerConfig newConfig = instance.getConfiguration(); newConfig.removeScan("tmp"); instance.setConfiguration(newConfig); instance.save(); assertNotSame(loaded,instance.getConfiguration()); final ScanManagerConfig loaded2 = new XmlConfigUtils(file.getAbsolutePath()).readFromFile(); assertEquals(instance.getConfiguration(),loaded2); instance.load(); for (int i=0;i<4;i++) { final Notification n = queue.poll(3,TimeUnit.SECONDS); assertNotNull(n); assertEquals(TestUtils.getObjectName(instance),n.getSource()); switch(i) { case 0: case 2: assertEquals(ScanDirConfig.NOTIFICATION_SAVED,n.getType()); break; case 1: assertEquals(ScanDirConfig.NOTIFICATION_MODIFIED,n.getType()); break; case 3: assertEquals(ScanDirConfig.NOTIFICATION_LOADED,n.getType()); break; default: break; } } } finally { manager.close(); mbs.unregisterMBean(ScanManager.SCAN_MANAGER_NAME); } final ObjectName all = new ObjectName(ScanManager.SCAN_MANAGER_NAME.getDomain()+":*"); assertEquals(0,mbs.queryNames(all,null).size()); } /** * Test of getConfigFilename method, of class * com.sun.jmx.examples.scandir.ScanDirConfig. */ public void testGetConfigFilename() throws Exception { System.out.println("getConfigFilename"); final File file = File.createTempFile("testconf",".xml"); final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath()); String result = instance.getConfigFilename(); assertEquals(file.getAbsolutePath(), new File(result).getAbsolutePath()); } /** * Test of addDirectoryScanner method, of class * com.sun.jmx.examples.scandir.ScanDirConfig. */ public void testAddDirectoryScanner() throws IOException { System.out.println("addDirectoryScanner"); System.out.println("save"); final File file = File.createTempFile("testconf",".xml"); final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath()); final ScanManagerConfig bean = new ScanManagerConfig("testSave"); final DirectoryScannerConfig dir = new DirectoryScannerConfig("tmp"); dir.setRootDirectory(file.getParent()); FileMatch filter = new FileMatch(); filter.setFilePattern(".*"); dir.setIncludeFiles(new FileMatch[] { filter }); instance.setConfiguration(bean); instance.addDirectoryScanner(dir.getName(), dir.getRootDirectory(), filter.getFilePattern(), filter.getSizeExceedsMaxBytes(), 0); instance.save(); final ScanManagerConfig loaded = new XmlConfigUtils(file.getAbsolutePath()).readFromFile(); assertNotNull(loaded.getScan(dir.getName())); assertEquals(dir,loaded.getScan(dir.getName())); assertEquals(instance.getConfiguration(),loaded); assertEquals(instance.getConfiguration().getScan(dir.getName()),dir); } }