blob: cdd8bd97277a7604b0e32b61bbe761b72f1cee16 [file] [log] [blame]
package org.eclipse.equinox.p2.tests.directorywatcher;
import java.io.*;
import java.net.URL;
import java.util.Hashtable;
import junit.framework.TestCase;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.equinox.p2.directorywatcher.DirectoryWatcher;
import org.eclipse.equinox.p2.directorywatcher.RepositoryListener;
import org.eclipse.equinox.p2.tests.TestActivator;
public class RepositoryListenerTest extends TestCase {
public RepositoryListenerTest(String name) {
super(name);
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
public static void copyFile(File source, File target) throws Exception {
FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(target);
byte[] buf = new byte[1024];
int i = 0;
while ((i = fis.read(buf)) != -1) {
fos.write(buf, 0, i);
}
fis.close();
fos.close();
}
public static boolean copyDirectory(File source, File target) throws Exception {
if (source.exists() && source.isDirectory() && target.exists() && target.isDirectory()) {
File[] files = source.listFiles();
for (int i = 0; i < files.length; i++) {
File newFile = new File(target, files[i].getName());
if (files[i].isDirectory()) {
newFile.mkdir();
copyDirectory(files[i], newFile);
} else {
copyFile(files[i], newFile);
}
}
}
return true;
}
public static boolean deleteDirectory(File directory) {
if (directory.exists() && directory.isDirectory()) {
File[] files = directory.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
deleteDirectory(files[i]);
} else {
files[i].delete();
}
}
}
return directory.delete();
}
private void removeContents(File source, File target) throws Exception {
if (source.exists() && source.isDirectory() && target.exists() && target.isDirectory()) {
File[] files = source.listFiles();
for (int i = 0; i < files.length; i++) {
File doomedFile = new File(target, files[i].getName());
if (files[i].isDirectory()) {
deleteDirectory(doomedFile);
} else {
doomedFile.delete();
}
}
}
}
public void testDirectoryWatcherListener() throws Exception {
URL base = TestActivator.getContext().getBundle().getEntry("/testData/directorywatcher1");
File baseFolder = new File(FileLocator.toFileURL(base).getPath());
URL base2 = TestActivator.getContext().getBundle().getEntry("/testData/directorywatcher2");
File baseFolder2 = new File(FileLocator.toFileURL(base2).getPath());
String tempDir = System.getProperty("java.io.tmpdir");
File folder = new File(tempDir, "testWatcher");
deleteDirectory(folder);
folder.mkdir();
Hashtable props = new Hashtable();
props.put(DirectoryWatcher.DIR, folder.getAbsolutePath());
props.put(DirectoryWatcher.POLL, "500");
RepositoryListener listener = new RepositoryListener(TestActivator.getContext(), folder);
assertEquals(0, listener.getMetadataRepository().getInstallableUnits(null).length);
assertEquals(0, listener.getArtifactRepository().getArtifactKeys().length);
DirectoryWatcher watcher = new DirectoryWatcher(props, TestActivator.getContext());
watcher.addListener(listener);
watcher.start();
assertEquals(0, listener.getMetadataRepository().getInstallableUnits(null).length);
assertEquals(0, listener.getArtifactRepository().getArtifactKeys().length);
copyDirectory(baseFolder, folder);
watcher.poll();
watcher.close();
assertEquals(1, listener.getMetadataRepository().getInstallableUnits(null).length);
assertEquals(1, listener.getArtifactRepository().getArtifactKeys().length);
watcher = new DirectoryWatcher(props, TestActivator.getContext());
watcher.addListener(listener);
watcher.start();
assertEquals(1, listener.getMetadataRepository().getInstallableUnits(null).length);
assertEquals(1, listener.getArtifactRepository().getArtifactKeys().length);
copyDirectory(baseFolder2, folder);
watcher.poll();
assertEquals(2, listener.getMetadataRepository().getInstallableUnits(null).length);
assertEquals(2, listener.getArtifactRepository().getArtifactKeys().length);
watcher.close();
watcher = new DirectoryWatcher(props, TestActivator.getContext());
watcher.addListener(listener);
watcher.start();
removeContents(baseFolder, folder);
watcher.poll();
assertEquals(1, listener.getMetadataRepository().getInstallableUnits(null).length);
assertEquals(1, listener.getArtifactRepository().getArtifactKeys().length);
watcher.close();
deleteDirectory(folder);
}
}