Crossfire JXClient, Trunk
ScanDirConfigTest.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 
45 import java.io.FileOutputStream;
46 import java.io.IOException;
47 import java.lang.management.ManagementFactory;
48 import java.util.concurrent.LinkedBlockingQueue;
49 import java.util.concurrent.TimeUnit;
50 import junit.framework.*;
53 import java.io.File;
54 import java.util.concurrent.BlockingQueue;
55 import javax.management.*;
56 
62 public class ScanDirConfigTest extends TestCase {
63 
64  public ScanDirConfigTest(String testName) {
65  super(testName);
66  }
67 
68  protected void setUp() throws Exception {
69  }
70 
71  protected void tearDown() throws Exception {
72  }
73 
74  public static Test suite() {
75  TestSuite suite = new TestSuite(ScanDirConfigTest.class);
76 
77  return suite;
78  }
79 
83  public void testLoad() throws Exception {
84  System.out.println("load");
85 
86  final File file = File.createTempFile("testconf",".xml");
87  final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath());
88  final ScanManagerConfig bean =
89  new ScanManagerConfig("testLoad");
90  final DirectoryScannerConfig dir =
91  new DirectoryScannerConfig("tmp");
92  dir.setRootDirectory(file.getParent());
93  bean.putScan(dir);
94  XmlConfigUtils.write(bean,new FileOutputStream(file),false);
95  instance.load();
96 
97  assertEquals(bean,instance.getConfiguration());
98  bean.removeScan(dir.getName());
99  XmlConfigUtils.write(bean,new FileOutputStream(file),false);
100 
101  assertNotSame(bean,instance.getConfiguration());
102 
103  instance.load();
104 
105  assertEquals(bean,instance.getConfiguration());
106 
107  }
108 
112  public void testSave() throws Exception {
113  System.out.println("save");
114 
115  final File file = File.createTempFile("testconf",".xml");
116  final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
117  final ScanManagerMXBean manager = ScanManager.register(mbs);
118 
119  try {
120  final ScanDirConfigMXBean instance =
121  manager.createOtherConfigurationMBean("testSave",file.getAbsolutePath());
122  assertTrue(mbs.isRegistered(
123  ScanManager.makeScanDirConfigName("testSave")));
124  final ScanManagerConfig bean =
125  new ScanManagerConfig("testSave");
126  final DirectoryScannerConfig dir =
127  new DirectoryScannerConfig("tmp");
128  dir.setRootDirectory(file.getParent());
129  bean.putScan(dir);
130  instance.setConfiguration(bean);
131  instance.save();
132  final ScanManagerConfig loaded =
133  new XmlConfigUtils(file.getAbsolutePath()).readFromFile();
134  assertEquals(instance.getConfiguration(),loaded);
135  assertEquals(bean,loaded);
136 
137  instance.getConfiguration().removeScan("tmp");
138  instance.save();
139  assertNotSame(loaded,instance.getConfiguration());
140  final ScanManagerConfig loaded2 =
141  new XmlConfigUtils(file.getAbsolutePath()).readFromFile();
142  assertEquals(instance.getConfiguration(),loaded2);
143  } finally {
144  manager.close();
145  mbs.unregisterMBean(ScanManager.SCAN_MANAGER_NAME);
146  }
147  final ObjectName all =
148  new ObjectName(ScanManager.SCAN_MANAGER_NAME.getDomain()+":*");
149  assertEquals(0,mbs.queryNames(all,null).size());
150  }
151 
155  /*
156  public void testSaveTo() throws Exception {
157  System.out.println("saveTo");
158 
159  String filename = "";
160  ScanDirConfig instance = null;
161 
162  instance.saveTo(filename);
163 
164  // TODO review the generated test code and remove the default call to fail.
165  fail("The test case is a prototype.");
166  }
167  */
168 
172  public void testGetXmlConfigString() throws Exception {
173  System.out.println("getXmlConfigString");
174 
175  try {
176  final File file = File.createTempFile("testconf",".xml");
177  final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath());
178  final ScanManagerConfig bean =
179  new ScanManagerConfig("testGetXmlConfigString");
180  final DirectoryScannerConfig dir =
181  new DirectoryScannerConfig("tmp");
182  dir.setRootDirectory(file.getParent());
183  bean.putScan(dir);
184  instance.setConfiguration(bean);
185  System.out.println("Expected: " + XmlConfigUtils.toString(bean));
186  System.out.println("Received: " +
187  instance.getConfiguration().toString());
188  assertEquals(XmlConfigUtils.toString(bean),
189  instance.getConfiguration().toString());
190  } catch (Exception x) {
191  x.printStackTrace();
192  throw x;
193  }
194  }
195 
196 
201  public void testAddNotificationListener() throws Exception {
202  System.out.println("addNotificationListener");
203 
204  final File file = File.createTempFile("testconf",".xml");
205  final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
206  final ScanManagerMXBean manager = ScanManager.register(mbs);
207 
208  try {
209  final ScanDirConfigMXBean instance =
211  manager.createOtherConfigurationMBean("testSave",
212  file.getAbsolutePath()),
213  ScanDirConfigMXBean.class);
214  assertTrue(mbs.isRegistered(
215  ScanManager.makeScanDirConfigName("testSave")));
217  instance.addDirectoryScanner("tmp",file.getParent(),".*",0,0);
218 
219  final BlockingQueue<Notification> queue =
220  new LinkedBlockingQueue<Notification>();
221  final NotificationListener listener = new NotificationListener() {
222  public void handleNotification(Notification notification,
223  Object handback) {
224  queue.add(notification);
225  }
226  };
227  NotificationFilter filter = null;
228  Object handback = null;
229 
230  ((NotificationEmitter)instance).addNotificationListener(listener,
231  filter, handback);
232 
233  instance.save();
234  final ScanManagerConfig loaded =
235  new XmlConfigUtils(file.getAbsolutePath()).readFromFile();
236  assertEquals(instance.getConfiguration(),loaded);
237 
238  final ScanManagerConfig newConfig =
239  instance.getConfiguration();
240  newConfig.removeScan("tmp");
241  instance.setConfiguration(newConfig);
242  instance.save();
243  assertNotSame(loaded,instance.getConfiguration());
244  final ScanManagerConfig loaded2 =
245  new XmlConfigUtils(file.getAbsolutePath()).readFromFile();
246  assertEquals(instance.getConfiguration(),loaded2);
247  instance.load();
248  for (int i=0;i<4;i++) {
249  final Notification n = queue.poll(3,TimeUnit.SECONDS);
250  assertNotNull(n);
251  assertEquals(TestUtils.getObjectName(instance),n.getSource());
252  switch(i) {
253  case 0: case 2:
254  assertEquals(ScanDirConfig.NOTIFICATION_SAVED,n.getType());
255  break;
256  case 1:
257  assertEquals(ScanDirConfig.NOTIFICATION_MODIFIED,n.getType());
258  break;
259  case 3:
260  assertEquals(ScanDirConfig.NOTIFICATION_LOADED,n.getType());
261  break;
262  default: break;
263  }
264  }
265  } finally {
266  manager.close();
267  mbs.unregisterMBean(ScanManager.SCAN_MANAGER_NAME);
268  }
269  final ObjectName all =
270  new ObjectName(ScanManager.SCAN_MANAGER_NAME.getDomain()+":*");
271  assertEquals(0,mbs.queryNames(all,null).size());
272  }
273 
278  public void testGetConfigFilename() throws Exception {
279  System.out.println("getConfigFilename");
280 
281  final File file = File.createTempFile("testconf",".xml");
282  final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath());
283 
284  String result = instance.getConfigFilename();
285  assertEquals(file.getAbsolutePath(), new File(result).getAbsolutePath());
286 
287  }
288 
293  public void testAddDirectoryScanner() throws IOException {
294  System.out.println("addDirectoryScanner");
295 
296  System.out.println("save");
297 
298  final File file = File.createTempFile("testconf",".xml");
299  final ScanDirConfig instance = new ScanDirConfig(file.getAbsolutePath());
300  final ScanManagerConfig bean =
301  new ScanManagerConfig("testSave");
302  final DirectoryScannerConfig dir =
303  new DirectoryScannerConfig("tmp");
304  dir.setRootDirectory(file.getParent());
305  FileMatch filter = new FileMatch();
306  filter.setFilePattern(".*");
307  dir.setIncludeFiles(new FileMatch[] {
308  filter
309  });
310  instance.setConfiguration(bean);
311  instance.addDirectoryScanner(dir.getName(),
312  dir.getRootDirectory(),
313  filter.getFilePattern(),
314  filter.getSizeExceedsMaxBytes(),
315  0);
316  instance.save();
317  final ScanManagerConfig loaded =
318  new XmlConfigUtils(file.getAbsolutePath()).readFromFile();
319  assertNotNull(loaded.getScan(dir.getName()));
320  assertEquals(dir,loaded.getScan(dir.getName()));
321  assertEquals(instance.getConfiguration(),loaded);
322  assertEquals(instance.getConfiguration().getScan(dir.getName()),dir);
323  }
324 
325 }
com.sun.jmx.examples.scandir.ScanDirConfigTest.testGetXmlConfigString
void testGetXmlConfigString()
Definition: ScanDirConfigTest.java:172
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.load
void load()
com.sun.jmx.examples.scandir.ScanManager
Definition: ScanManager.java:103
com.sun.jmx.examples.scandir.ScanDirConfig.addDirectoryScanner
DirectoryScannerConfig addDirectoryScanner(String name, String dir, String filePattern, long sizeExceedsMaxBytes, long sinceLastModified)
Definition: ScanDirConfig.java:363
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.config.XmlConfigUtils.toString
static String toString(Object bean)
Definition: XmlConfigUtils.java:139
com.sun.jmx.examples.scandir.ScanDirConfigTest
Definition: ScanDirConfigTest.java:62
com.sun.jmx.examples.scandir.config.FileMatch.setFilePattern
void setFilePattern(String filePattern)
Definition: FileMatch.java:173
com.sun.jmx.examples.scandir.config.ScanManagerConfig.getScan
DirectoryScannerConfig getScan(String name)
Definition: ScanManagerConfig.java:233
com.sun.jmx.examples.scandir
com.sun.jmx.examples.scandir.ScanDirConfigTest.setUp
void setUp()
Definition: ScanDirConfigTest.java:68
com.sun.jmx.examples.scandir.ScanDirConfig.NOTIFICATION_SAVED
static final String NOTIFICATION_SAVED
Definition: ScanDirConfig.java:127
com.sun.jmx.examples.scandir.TestUtils
Definition: TestUtils.java:57
com.sun.jmx.examples.scandir.ScanDirConfig.setConfiguration
void setConfiguration(ScanManagerConfig config)
Definition: ScanDirConfig.java:345
com.sun.jmx.examples.scandir.config.XmlConfigUtils.write
static void write(ScanManagerConfig bean, OutputStream os, boolean fragment)
Definition: XmlConfigUtils.java:256
com.sun.jmx.examples.scandir.ScanDirConfig
Definition: ScanDirConfig.java:103
com.sun.jmx.examples.scandir.ScanDirConfig.NOTIFICATION_MODIFIED
static final String NOTIFICATION_MODIFIED
Definition: ScanDirConfig.java:140
com.sun.jmx.examples.scandir.config.DirectoryScannerConfig
Definition: DirectoryScannerConfig.java:67
com.sun.jmx.examples.scandir.ScanDirConfigTest.testGetConfigFilename
void testGetConfigFilename()
Definition: ScanDirConfigTest.java:278
com.sun.jmx.examples.scandir.ScanManager.makeScanDirConfigName
static final ObjectName makeScanDirConfigName(String name)
Definition: ScanManager.java:259
com.sun.jmx.examples
com.sun.jmx.examples.scandir.TestUtils.makeNotificationEmitter
static< T > T makeNotificationEmitter(T proxy, Class< T > mbeanInterface)
Definition: TestUtils.java:89
com.sun.jmx.examples.scandir.config.XmlConfigUtils
Definition: XmlConfigUtils.java:62
com.sun.jmx.examples.scandir.ScanDirConfig.save
void save()
Definition: ScanDirConfig.java:234
com.sun.jmx.examples.scandir.ScanDirConfigTest.suite
static Test suite()
Definition: ScanDirConfigTest.java:74
com.sun.jmx.examples.scandir.ScanDirConfigTest.tearDown
void tearDown()
Definition: ScanDirConfigTest.java:71
com.sun
com.sun.jmx.examples.scandir.ScanManagerMXBean.createOtherConfigurationMBean
ScanDirConfigMXBean createOtherConfigurationMBean(String name, String filename)
com.sun.jmx.examples.scandir.ScanDirConfigTest.testSave
void testSave()
Definition: ScanDirConfigTest.java:112
com.sun.jmx.examples.scandir.ScanDirConfigTest.ScanDirConfigTest
ScanDirConfigTest(String testName)
Definition: ScanDirConfigTest.java:64
com.sun.jmx.examples.scandir.ScanDirConfig.getConfigFilename
String getConfigFilename()
Definition: ScanDirConfig.java:340
com.sun.jmx.examples.scandir.config.ScanManagerConfig.toString
String toString()
Definition: ScanManagerConfig.java:253
com.sun.jmx.examples.scandir.ScanDirConfigTest.testLoad
void testLoad()
Definition: ScanDirConfigTest.java:83
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.getConfiguration
ScanManagerConfig getConfiguration()
com.sun.jmx.examples.scandir.config.XmlConfigUtils.readFromFile
synchronized ScanManagerConfig readFromFile()
Definition: XmlConfigUtils.java:217
com.sun.jmx.examples.scandir.ScanManager.SCAN_MANAGER_NAME
static final ObjectName SCAN_MANAGER_NAME
Definition: ScanManager.java:115
com.sun.jmx.examples.scandir.TestUtils.getObjectName
static ObjectName getObjectName(Object proxy)
Definition: TestUtils.java:73
com.sun.jmx.examples.scandir.ScanDirConfigTest.testAddNotificationListener
void testAddNotificationListener()
Definition: ScanDirConfigTest.java:201
com.sun.jmx.examples.scandir.ScanDirConfig.NOTIFICATION_LOADED
static final String NOTIFICATION_LOADED
Definition: ScanDirConfig.java:133
com.sun.jmx.examples.scandir.config.ScanManagerConfig.removeScan
DirectoryScannerConfig removeScan(String name)
Definition: ScanManagerConfig.java:266
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.save
void save()
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.setConfiguration
void setConfiguration(ScanManagerConfig config)
com.sun.jmx.examples.scandir.config.FileMatch
Definition: FileMatch.java:72
com
com.sun.jmx.examples.scandir.config.ScanManagerConfig
Definition: ScanManagerConfig.java:72
com.sun.jmx.examples.scandir.ScanDirConfig.load
void load()
Definition: ScanDirConfig.java:219
com.sun.jmx.examples.scandir.ScanDirConfigMXBean
Definition: ScanDirConfigMXBean.java:83
com.sun.jmx.examples.scandir.ScanDirConfig.getConfiguration
ScanManagerConfig getConfiguration()
Definition: ScanDirConfig.java:245
com.sun.jmx
com.sun.jmx.examples.scandir.config.FileMatch.getFilePattern
String getFilePattern()
Definition: FileMatch.java:161
com.sun.jmx.examples.scandir.ScanDirConfigTest.testAddDirectoryScanner
void testAddDirectoryScanner()
Definition: ScanDirConfigTest.java:293
com.sun.jmx.examples.scandir.ScanDirConfigMXBean.addDirectoryScanner
DirectoryScannerConfig addDirectoryScanner(String name, String dir, String filePattern, long sizeExceedsMaxBytes, long sinceLastModified)
com.sun.jmx.examples.scandir.ScanManagerMXBean.close
void close()
com.sun.jmx.examples.scandir.config.ScanManagerConfig.putScan
DirectoryScannerConfig putScan(DirectoryScannerConfig scan)
Definition: ScanManagerConfig.java:248
com.sun.jmx.examples.scandir.config.FileMatch.getSizeExceedsMaxBytes
long getSizeExceedsMaxBytes()
Definition: FileMatch.java:185
com.sun.jmx.examples.scandir.ScanManagerMXBean
Definition: ScanManagerMXBean.java:66