package gov.loc.repository.bagit.writer;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import gov.loc.repository.bagit.PrivateConstructorTest;
import gov.loc.repository.bagit.domain.Manifest;
import gov.loc.repository.bagit.hash.StandardSupportedAlgorithms;
public class ManifestWriterTest extends PrivateConstructorTest {
@Rule
public TemporaryFolder folder= new TemporaryFolder();
@Test
public void testClassIsWellDefined() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException{
assertUtilityClassWellDefined(ManifestWriter.class);
}
@Test
public void testWriteTagManifests() throws IOException{
Set<Manifest> tagManifests = new HashSet<>();
Manifest manifest = new Manifest(StandardSupportedAlgorithms.MD5);
manifest.getFileToChecksumMap().put(Paths.get("/foo/bar/ham/data/one/two/buckleMyShoe.txt"), "someHashValue");
tagManifests.add(manifest);
File outputDir = folder.newFolder();
File tagManifest = new File(outputDir, "tagmanifest-md5.txt");
assertFalse(tagManifest.exists());
ManifestWriter.writeTagManifests(tagManifests, Paths.get(outputDir.toURI()), Paths.get("/foo/bar/ham"), StandardCharsets.UTF_8);
assertTrue(tagManifest.exists());
}
@Test
public void testManifestsDontContainWindowsFilePathSeparator() throws IOException{
Set<Manifest> tagManifests = new HashSet<>();
Manifest manifest = new Manifest(StandardSupportedAlgorithms.MD5);
manifest.getFileToChecksumMap().put(Paths.get("/foo/bar/ham/data/one/two/buckleMyShoe.txt"), "someHashValue");
tagManifests.add(manifest);
File outputDir = folder.newFolder();
File tagManifest = new File(outputDir, "tagmanifest-md5.txt");
assertFalse(tagManifest.exists());
ManifestWriter.writeTagManifests(tagManifests, Paths.get(outputDir.toURI()), Paths.get("/foo/bar/ham"), StandardCharsets.UTF_8);
List<String> lines = Files.readAllLines(Paths.get(tagManifest.toURI()));
for(String line : lines){
assertFalse("Line [" + line + "] contains \\ which is not allowed by the bagit specification", line.contains("\\"));
}
}
}