]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestDirectoryWatch.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / testcases / org / simantics / databoard / tests / TestDirectoryWatch.java
diff --git a/bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestDirectoryWatch.java b/bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestDirectoryWatch.java
new file mode 100644 (file)
index 0000000..93ca4bb
--- /dev/null
@@ -0,0 +1,110 @@
+/*******************************************************************************\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