]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 /*******************************************************************************\r
2  * Copyright (c) 2010- Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  * \r
9  * Contributors:\r
10  *    VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.databoard.tests;\r
13 \r
14 import java.io.File;\r
15 import java.io.FileFilter;\r
16 import java.util.ArrayList;\r
17 import java.util.List;\r
18 import java.util.Random;\r
19 \r
20 import junit.framework.TestCase;\r
21 \r
22 import org.simantics.databoard.accessor.impl.DirectoryWatch;\r
23 import org.simantics.databoard.accessor.impl.DirectoryWatch.DirectoryEvent;\r
24 import org.simantics.databoard.accessor.impl.DirectoryWatch.DirectoryListener;\r
25 \r
26 /**\r
27  * This test case tests Wathc Servlet.\r
28  * \r
29  * It creates a random named directory under $TMP$\r
30  * There it \r
31  *\r
32  * @author Toni Kalajainen <toni.kalajainen@vtt.fi>\r
33  */\r
34 public class TestDirectoryWatch extends TestCase {\r
35 \r
36         File tmpDir;\r
37         \r
38         public static File createTmpDir()\r
39         {\r
40                 String tmp = System.getenv("tmp");\r
41                 if (tmp==null) tmp = "c:/temp";\r
42                 Random r = new Random();\r
43                 String randomName = "tmp-"+(r.nextInt(10000)+10000);\r
44                 File tmpDir = new File(tmp+"/"+randomName);\r
45                 Boolean ok = tmpDir.mkdirs();\r
46                 assertTrue( ok );\r
47                 return tmpDir;\r
48         }\r
49         \r
50         public void setUp() throws Exception {\r
51                 tmpDir = createTmpDir();\r
52         }\r
53         \r
54         @Override\r
55         protected void tearDown() throws Exception {\r
56                 boolean ok = tmpDir.delete();\r
57                 if (!ok) System.err.println(tmpDir+" was not removed.");\r
58         }       \r
59         \r
60         public void testAll() \r
61         throws Exception {\r
62                 \r
63                 FileFilter filter = new FileFilter() {\r
64                         public boolean accept(File pathname) {                          \r
65                                 return pathname.getAbsolutePath().toLowerCase().endsWith(".dbb");\r
66                         }};\r
67                         \r
68                 DirectoryWatch monitor = new DirectoryWatch(tmpDir, filter);\r
69                 \r
70                 final DirectoryEvent result = new DirectoryEvent();\r
71                 \r
72                 // Set listener that collects changes\r
73                 monitor.addListener(new DirectoryListener() {\r
74                         @Override\r
75                         public void onWatchEvent(DirectoryEvent e) {\r
76                                 result.filesAdded.addAll(e.filesAdded);\r
77                                 result.filesRemoved.addAll(e.filesRemoved);\r
78                         }});\r
79 \r
80                 // Create file names\r
81                 List<File> files = new ArrayList<File>();\r
82                 for (int i=1; i<10; i++) {\r
83                         files.add( new File(tmpDir, "file-"+i+".dbb") );\r
84                 }\r
85                 \r
86                 // Create files\r
87                 for (File f : files)\r
88                 {\r
89                         f.createNewFile();\r
90                 }               \r
91                 Thread.sleep( DirectoryWatch.POLL_INTERVAL*2 );         \r
92                 assertTrue( files.containsAll( result.filesAdded ) );\r
93                 assertTrue( result.filesAdded.containsAll( files ) );\r
94                 assertTrue( result.filesRemoved.isEmpty() );            \r
95                 result.filesAdded.clear();\r
96                 \r
97                 // Delete files\r
98                 for (File f : files)\r
99                         f.delete();\r
100                 Thread.sleep( DirectoryWatch.POLL_INTERVAL*2 );         \r
101                 assertTrue( files.containsAll( result.filesRemoved ) );\r
102                 assertTrue( result.filesRemoved.containsAll( files ) );\r
103                 assertTrue( result.filesAdded.isEmpty() );              \r
104                 result.filesRemoved.clear();\r
105                 \r
106                 monitor.close();                \r
107         }\r
108         \r
109 }\r
110 \r