1 /*******************************************************************************
\r
2 * Copyright (c) 2010- Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.databoard.tests;
\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
20 import junit.framework.TestCase;
\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
27 * This test case tests Wathc Servlet.
\r
29 * It creates a random named directory under $TMP$
\r
32 * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
\r
34 public class TestDirectoryWatch extends TestCase {
\r
38 public static File createTmpDir()
\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
50 public void setUp() throws Exception {
\r
51 tmpDir = createTmpDir();
\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
60 public void testAll()
\r
63 FileFilter filter = new FileFilter() {
\r
64 public boolean accept(File pathname) {
\r
65 return pathname.getAbsolutePath().toLowerCase().endsWith(".dbb");
\r
68 DirectoryWatch monitor = new DirectoryWatch(tmpDir, filter);
\r
70 final DirectoryEvent result = new DirectoryEvent();
\r
72 // Set listener that collects changes
\r
73 monitor.addListener(new DirectoryListener() {
\r
75 public void onWatchEvent(DirectoryEvent e) {
\r
76 result.filesAdded.addAll(e.filesAdded);
\r
77 result.filesRemoved.addAll(e.filesRemoved);
\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
87 for (File f : files)
\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
98 for (File f : files)
\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