--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2010- Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.databoard.tests;\r
+\r
+import java.io.File;\r
+import java.io.FileFilter;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Random;\r
+\r
+import junit.framework.TestCase;\r
+\r
+import org.simantics.databoard.accessor.impl.DirectoryWatch;\r
+import org.simantics.databoard.accessor.impl.DirectoryWatch.DirectoryEvent;\r
+import org.simantics.databoard.accessor.impl.DirectoryWatch.DirectoryListener;\r
+\r
+/**\r
+ * This test case tests Wathc Servlet.\r
+ * \r
+ * It creates a random named directory under $TMP$\r
+ * There it \r
+ *\r
+ * @author Toni Kalajainen <toni.kalajainen@vtt.fi>\r
+ */\r
+public class TestDirectoryWatch extends TestCase {\r
+\r
+ File tmpDir;\r
+ \r
+ public static File createTmpDir()\r
+ {\r
+ String tmp = System.getenv("tmp");\r
+ if (tmp==null) tmp = "c:/temp";\r
+ Random r = new Random();\r
+ String randomName = "tmp-"+(r.nextInt(10000)+10000);\r
+ File tmpDir = new File(tmp+"/"+randomName);\r
+ Boolean ok = tmpDir.mkdirs();\r
+ assertTrue( ok );\r
+ return tmpDir;\r
+ }\r
+ \r
+ public void setUp() throws Exception {\r
+ tmpDir = createTmpDir();\r
+ }\r
+ \r
+ @Override\r
+ protected void tearDown() throws Exception {\r
+ boolean ok = tmpDir.delete();\r
+ if (!ok) System.err.println(tmpDir+" was not removed.");\r
+ } \r
+ \r
+ public void testAll() \r
+ throws Exception {\r
+ \r
+ FileFilter filter = new FileFilter() {\r
+ public boolean accept(File pathname) { \r
+ return pathname.getAbsolutePath().toLowerCase().endsWith(".dbb");\r
+ }};\r
+ \r
+ DirectoryWatch monitor = new DirectoryWatch(tmpDir, filter);\r
+ \r
+ final DirectoryEvent result = new DirectoryEvent();\r
+ \r
+ // Set listener that collects changes\r
+ monitor.addListener(new DirectoryListener() {\r
+ @Override\r
+ public void onWatchEvent(DirectoryEvent e) {\r
+ result.filesAdded.addAll(e.filesAdded);\r
+ result.filesRemoved.addAll(e.filesRemoved);\r
+ }});\r
+\r
+ // Create file names\r
+ List<File> files = new ArrayList<File>();\r
+ for (int i=1; i<10; i++) {\r
+ files.add( new File(tmpDir, "file-"+i+".dbb") );\r
+ }\r
+ \r
+ // Create files\r
+ for (File f : files)\r
+ {\r
+ f.createNewFile();\r
+ } \r
+ Thread.sleep( DirectoryWatch.POLL_INTERVAL*2 ); \r
+ assertTrue( files.containsAll( result.filesAdded ) );\r
+ assertTrue( result.filesAdded.containsAll( files ) );\r
+ assertTrue( result.filesRemoved.isEmpty() ); \r
+ result.filesAdded.clear();\r
+ \r
+ // Delete files\r
+ for (File f : files)\r
+ f.delete();\r
+ Thread.sleep( DirectoryWatch.POLL_INTERVAL*2 ); \r
+ assertTrue( files.containsAll( result.filesRemoved ) );\r
+ assertTrue( result.filesRemoved.containsAll( files ) );\r
+ assertTrue( result.filesAdded.isEmpty() ); \r
+ result.filesRemoved.clear();\r
+ \r
+ monitor.close(); \r
+ }\r
+ \r
+}\r
+\r