package gov.loc.repository.bagit.creator;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.List;
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.Bag;
import gov.loc.repository.bagit.domain.Manifest;
import gov.loc.repository.bagit.domain.Version;
import gov.loc.repository.bagit.hash.StandardSupportedAlgorithms;
public class BagCreatorTest extends Assert {
@Rule
public TemporaryFolder folder= new TemporaryFolder();
@Test
public void testBagInPlace() throws IOException, NoSuchAlgorithmException{
List<Path> expectedPayloadFiles = createTestStructure();
Bag bag = BagCreator.bagInPlace(Paths.get(folder.getRoot().toURI()), Arrays.asList(StandardSupportedAlgorithms.MD5), false);
assertEquals(new Version(0, 97), bag.getVersion());
File expectedManifest = new File(folder.getRoot(), "manifest-md5.txt");
assertTrue(expectedManifest.exists());
File expectedTagManifest = new File(folder.getRoot(), "tagmanifest-md5.txt");
assertTrue(expectedTagManifest.exists());
File bagitFile = new File(folder.getRoot(), "bagit.txt");
assertTrue(bagitFile.exists());
for(Manifest manifest : bag.getPayLoadManifests()){
for(Path expectedPayloadFile : manifest.getFileToChecksumMap().keySet()){
assertTrue(expectedPayloadFiles.contains(expectedPayloadFile));
}
}
}
private List<Path> createTestStructure() throws IOException{
Path rootDir = Paths.get(folder.getRoot().toURI());
Path dataDir = rootDir.resolve("data");
File file1 = folder.newFile("file1.txt");
Path file1Path = Paths.get(file1.toURI());
file1.createNewFile();
File dir1 = folder.newFolder("folder1");
dir1.mkdir();
File file2 = folder.newFile("file2.txt");
Path file2Path = Paths.get(file2.toURI());
file2.createNewFile();
File hiddenFile = folder.newFile(".hiddentFile.txt");
File hiddenDirectory = folder.newFolder(".hiddenFolder");
TestUtils.makeFilesHiddenOnWindows(Paths.get(folder.getRoot().toURI()));
assertTrue(hiddenFile.isHidden());
assertTrue( hiddenDirectory.isHidden());
File hiddenFile2 = new File(hiddenDirectory, ".hiddenFile2.txt");
hiddenFile2.createNewFile();
File file3 = new File(hiddenDirectory, "file3.txt");
file3.createNewFile();
return Arrays.asList(dataDir.resolve(file1Path.getFileName()), dataDir.resolve(file2Path.getFileName()));
}
@Test
public void testCreateDotBagit() throws IOException, NoSuchAlgorithmException{
createTestStructure();
Path rootFolderPath = Paths.get(folder.getRoot().toURI());
Path dotbagitDir = rootFolderPath.resolve(".bagit");
Path expectedManifestFile = dotbagitDir.resolve("manifest-md5.txt");
Path expectedTagManifestFile = dotbagitDir.resolve("tagmanifest-md5.txt");
Path expectedBagitFile = dotbagitDir.resolve("bagit.txt");
Bag bag = BagCreator.createDotBagit(rootFolderPath, Arrays.asList(StandardSupportedAlgorithms.MD5), false);
assertEquals(new Version(2, 0), bag.getVersion());
assertTrue(Files.exists(expectedBagitFile));
assertTrue(Files.size(expectedBagitFile) > 0);
assertTrue(Files.exists(expectedManifestFile));
assertTrue(Files.size(expectedManifestFile) > 0);
assertTrue(Files.exists(expectedTagManifestFile));
assertTrue(Files.size(expectedTagManifestFile) > 0);
}
}