package gov.loc.repository.bagit.creator;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import gov.loc.repository.bagit.TestUtils;
import gov.loc.repository.bagit.domain.Manifest;
import gov.loc.repository.bagit.hash.StandardSupportedAlgorithms;
public class AddPayloadToBagManifestVistorTest extends Assert {
@Rule
public TemporaryFolder folder= new TemporaryFolder();
@Test
public void includeDotKeepFilesInManifest() throws Exception{
Manifest manifest = new Manifest(StandardSupportedAlgorithms.MD5);
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
Map<Manifest, MessageDigest> map = new HashMap<>();
map.put(manifest, messageDigest);
boolean includeHiddenFiles = false;
Path start = Paths.get(new File("src/test/resources/dotKeepExampleBag").toURI()).resolve("data");
CreatePayloadManifestsVistor sut = new CreatePayloadManifestsVistor(map, includeHiddenFiles);
Files.walkFileTree(start, sut);
assertEquals(1, manifest.getFileToChecksumMap().size());
assertTrue(manifest.getFileToChecksumMap().containsKey(start.resolve("fooDir/.keep")));
}
@Test
public void testSkipDotBagitDir() throws IOException{
Path dotBagitDirectory = Paths.get(folder.newFolder(".bagit").toURI());
CreatePayloadManifestsVistor sut = new CreatePayloadManifestsVistor(null, true);
FileVisitResult returned = sut.preVisitDirectory(dotBagitDirectory, null);
assertEquals(FileVisitResult.SKIP_SUBTREE, returned);
}
@Test
public void testSkipHiddenDirectory() throws IOException{
Path hiddenDirectory = createHiddenDirectory();
CreatePayloadManifestsVistor sut = new CreatePayloadManifestsVistor(null, false);
FileVisitResult returned = sut.preVisitDirectory(hiddenDirectory, null);
assertEquals(FileVisitResult.SKIP_SUBTREE, returned);
}
@Test
public void testIncludeHiddenDirectory() throws IOException{
Path hiddenDirectory = createHiddenDirectory();
CreatePayloadManifestsVistor sut = new CreatePayloadManifestsVistor(null, true);
FileVisitResult returned = sut.preVisitDirectory(hiddenDirectory, null);
assertEquals(FileVisitResult.CONTINUE, returned);
}
@Test
public void testSkipHiddenFile() throws IOException{
Path hiddenFile = createHiddenFile();
CreatePayloadManifestsVistor sut = new CreatePayloadManifestsVistor(null, false);
FileVisitResult returned = sut.visitFile(hiddenFile, null);
assertEquals(FileVisitResult.CONTINUE, returned);
}
private Path createHiddenDirectory() throws IOException{
Path hiddenDirectory = Paths.get(folder.newFolder(".someHiddenDir").toURI());
if(TestUtils.isExecutingOnWindows()){
Files.setAttribute(hiddenDirectory, "dos:hidden", Boolean.TRUE);
}
return hiddenDirectory;
}
private Path createHiddenFile() throws IOException{
Path hiddenDirectory = Paths.get(folder.newFile(".someHiddenFile").toURI());
if(TestUtils.isExecutingOnWindows()){
Files.setAttribute(hiddenDirectory, "dos:hidden", Boolean.TRUE);
}
return hiddenDirectory;
}
}