Skip to content

Commit 267313f

Browse files
committed
added integration test for reader writer and verifier
1 parent f073230 commit 267313f

3 files changed

Lines changed: 49 additions & 27 deletions

File tree

src/integration/java/gov/loc/repository/bagit/ReaderWriterIntegrationTest.java renamed to src/integration/java/gov/loc/repository/bagit/ReaderWriterVerifierIntegrationTest.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,27 @@
1111

1212
import gov.loc.repository.bagit.domain.Bag;
1313
import gov.loc.repository.bagit.reader.BagReader;
14+
import gov.loc.repository.bagit.verify.BagVerifier;
1415
import gov.loc.repository.bagit.writer.BagWriter;
1516

16-
public class ReaderWriterIntegrationTest {
17+
public class ReaderWriterVerifierIntegrationTest {
1718
@Rule
1819
public TemporaryFolder folder= new TemporaryFolder();
1920

2021
@Test
2122
public void testReaderWriterVersion93() throws Exception{
23+
BagVerifier verifier = new BagVerifier();
2224
BagReader reader = new BagReader();
2325
Path rootDir = Paths.get(this.getClass().getClassLoader().getResource("bags/v0_93/bag").toURI());
24-
Bag bag = reader.read(rootDir);
2526
Path outputDir = Paths.get(folder.newFolder().toURI());
2627

27-
BagWriter.write(bag, outputDir);
28+
Bag bag = reader.read(rootDir);
29+
verifier.isValid(bag, true);
2830

31+
BagWriter.write(bag, outputDir);
2932
testBagsEqual(rootDir, outputDir);
33+
34+
verifier.isValid(reader.read(outputDir), true);
3035
}
3136

3237
@Test
@@ -39,6 +44,8 @@ public void testReaderWriterVersion94() throws Exception{
3944
BagWriter.write(bag, outputDir);
4045

4146
testBagsEqual(rootDir, outputDir);
47+
BagVerifier verifier = new BagVerifier();
48+
verifier.isValid(reader.read(outputDir), true);
4249
}
4350

4451
@Test
@@ -51,6 +58,8 @@ public void testReaderWriterVersion95() throws Exception{
5158
BagWriter.write(bag, outputDir);
5259

5360
testBagsEqual(rootDir, outputDir);
61+
BagVerifier verifier = new BagVerifier();
62+
verifier.isValid(reader.read(outputDir), true);
5463
}
5564

5665
@Test
@@ -63,6 +72,8 @@ public void testReaderWriterVersion96() throws Exception{
6372
BagWriter.write(bag, outputDir);
6473

6574
testBagsEqual(rootDir, outputDir);
75+
BagVerifier verifier = new BagVerifier();
76+
verifier.isValid(reader.read(outputDir), true);
6677
}
6778

6879
@Test
@@ -75,6 +86,8 @@ public void testReaderWriterVersion97() throws Exception{
7586
BagWriter.write(bag, outputDir);
7687

7788
testBagsEqual(rootDir, outputDir);
89+
BagVerifier verifier = new BagVerifier();
90+
verifier.isValid(reader.read(outputDir), true);
7891
}
7992

8093
@Test
@@ -87,6 +100,8 @@ public void testReaderWriterVersion98() throws Exception{
87100
BagWriter.write(bag, outputDir);
88101

89102
testBagsEqual(rootDir, outputDir);
103+
BagVerifier verifier = new BagVerifier();
104+
verifier.isValid(reader.read(outputDir), true);
90105
}
91106

92107
private void testBagsEqual(Path originalBag, Path newBag) throws IOException{

src/main/java/gov/loc/repository/bagit/writer/BagWriter.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
*/
3030
public class BagWriter {
3131
private static final Logger logger = LoggerFactory.getLogger(BagWriter.class);
32+
private static final Version VERSION_0_98 = new Version(0, 98);
33+
private static final Version VERSION_0_95 = new Version(0, 95);
3234

3335
private BagWriter(){}
3436

@@ -47,23 +49,23 @@ public static void write(Bag bag, Path outputDir) throws IOException, NoSuchAlgo
4749
writePayloadManifests(bag.getPayLoadManifests(), bagitDir, bag.getRootDir(), bag.getFileEncoding());
4850

4951
if(bag.getMetadata().size() > 0){
50-
writeBagitInfoFile(bag.getMetadata(), bagitDir, bag.getFileEncoding());
52+
writeBagitInfoFile(bag.getMetadata(), bag.getVersion(), bagitDir, bag.getFileEncoding());
5153
}
5254
if(bag.getItemsToFetch().size() > 0){
5355
writeFetchFile(bag.getItemsToFetch(), bagitDir, bag.getFileEncoding());
5456
}
5557
if(bag.getTagManifests().size() > 0){
56-
Set<Manifest> updatedTagManifests = updateTagManifests(bag);
58+
writeAdditionalTagPayloadFiles(bag.getTagManifests(), bagitDir, bag.getRootDir());
59+
Set<Manifest> updatedTagManifests = updateTagManifests(bag, outputDir);
5760
bag.setTagManifests(updatedTagManifests);
5861
writeTagManifests(updatedTagManifests, bagitDir, bag.getRootDir(), bag.getFileEncoding());
59-
writeAdditionalTagPayloadFiles(updatedTagManifests, bagitDir, bag.getRootDir());
6062
}
6163
}
6264

6365
protected static Path writeVersionDependentPayloadFiles(Bag bag, Path outputDir) throws IOException{
6466
Path bagitDir = outputDir;
6567
//@Incubating
66-
if(bag.getVersion().compareTo(new Version(0, 98)) >= 0){
68+
if(VERSION_0_98.compareTo(bag.getVersion()) <= 0){
6769
bagitDir = outputDir.resolve(".bagit");
6870
Files.createDirectories(bagitDir);
6971
writePayloadFiles(bag.getPayLoadManifests(), outputDir, bag.getRootDir());
@@ -85,8 +87,9 @@ protected static Path writeVersionDependentPayloadFiles(Bag bag, Path outputDir)
8587
* @throws IOException if there was a problem writing the file
8688
*/
8789
public static void writeBagitFile(Version version, String encoding, Path outputDir) throws IOException{
88-
logger.debug("Writing bagit.txt file to [{}]", outputDir);
8990
Path bagitPath = outputDir.resolve("bagit.txt");
91+
logger.debug("Writing bagit.txt file to [{}]", outputDir);
92+
9093

9194
String firstLine = "BagIt-Version : " + version + System.lineSeparator();
9295
logger.debug("Writing line [{}] to [{}]", firstLine, bagitPath);
@@ -134,29 +137,24 @@ public static void writePayloadManifests(Set<Manifest> manifests, Path outputDir
134137
writeManifests(manifests, outputDir, bagitRootDir, "manifest-", charsetName);
135138
}
136139

137-
protected static Set<Manifest> updateTagManifests(Bag bag) throws NoSuchAlgorithmException, IOException{
138-
Set<Path> tagFilePaths = new HashSet<>();
139-
140-
for(Manifest payloadManifest : bag.getPayLoadManifests()){
141-
tagFilePaths.add(bag.getRootDir().resolve("manifest-" + payloadManifest.getAlgorithm().getBagitName() + ".txt"));
142-
}
143-
144-
tagFilePaths.add(bag.getRootDir().resolve("bag-info.txt"));
145-
tagFilePaths.add(bag.getRootDir().resolve("package-info.txt"));
146-
tagFilePaths.add(bag.getRootDir().resolve("fetch.txt"));
147-
tagFilePaths.add(bag.getRootDir().resolve("bagit.txt"));
140+
protected static Set<Manifest> updateTagManifests(Bag bag, Path newBagRootDir) throws NoSuchAlgorithmException, IOException{
141+
Set<Manifest> newManifests = new HashSet<>();
148142

149143
for(Manifest tagManifest : bag.getTagManifests()){
150-
Set<Path> pathsToUpdate = new HashSet<>(tagManifest.getFileToChecksumMap().keySet());
151-
pathsToUpdate.retainAll(tagFilePaths);
152-
for(Path pathToUpdate : pathsToUpdate){
144+
Manifest newManifest = new Manifest(tagManifest.getAlgorithm());
145+
146+
for(Path originalPath : tagManifest.getFileToChecksumMap().keySet()){
147+
Path relativePath = bag.getRootDir().relativize(originalPath);
148+
Path pathToUpdate = newBagRootDir.resolve(relativePath);
153149
MessageDigest messageDigest = MessageDigest.getInstance(tagManifest.getAlgorithm().getMessageDigestName());
154150
String newChecksum = Hasher.hash(Files.newInputStream(pathToUpdate), messageDigest);
155-
tagManifest.getFileToChecksumMap().put(pathToUpdate, newChecksum);
151+
newManifest.getFileToChecksumMap().put(pathToUpdate, newChecksum);
156152
}
153+
154+
newManifests.add(newManifest);
157155
}
158156

159-
return bag.getTagManifests();
157+
return newManifests;
160158
}
161159

162160
/**
@@ -208,9 +206,12 @@ protected static void writeAdditionalTagPayloadFiles(Set<Manifest> manifests, Pa
208206
* @param charsetName the name of the encoding for the file
209207
* @throws IOException if there was a problem writing a file
210208
*/
211-
public static void writeBagitInfoFile(List<Pair<String, String>> metadata, Path outputDir, String charsetName) throws IOException{
212-
logger.debug("Writing bag-info.txt to [{}]", outputDir);
209+
public static void writeBagitInfoFile(List<Pair<String, String>> metadata, Version version, Path outputDir, String charsetName) throws IOException{
213210
Path bagInfoFilePath = outputDir.resolve("bag-info.txt");
211+
if(VERSION_0_95.compareTo(version) >= 0){
212+
bagInfoFilePath = outputDir.resolve("package-info.txt");
213+
}
214+
logger.debug("Writing {} to [{}]", bagInfoFilePath.getFileName(), outputDir);
214215

215216
Files.deleteIfExists(bagInfoFilePath);
216217

src/test/java/gov/loc/repository/bagit/writer/BagWriterTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,20 @@ public void testWriteBagitFile() throws Exception{
139139
public void testWriteBagitInfoFile() throws IOException{
140140
File rootDir = folder.newFolder();
141141
File bagInfo = new File(rootDir, "bag-info.txt");
142+
File packageInfo = new File(rootDir, "package-info.txt");
142143
List<Pair<String, String>> metadata = new ArrayList<>();
143144
metadata.add(new Pair<>("key1", "value1"));
144145
metadata.add(new Pair<>("key2", "value2"));
145146
metadata.add(new Pair<>("key3", "value3"));
146147

147148
assertFalse(bagInfo.exists());
148-
BagWriter.writeBagitInfoFile(metadata, Paths.get(rootDir.toURI()), StandardCharsets.UTF_8.name());
149+
assertFalse(packageInfo.exists());
150+
151+
BagWriter.writeBagitInfoFile(metadata, new Version(0,96), Paths.get(rootDir.toURI()), StandardCharsets.UTF_8.name());
149152
assertTrue(bagInfo.exists());
153+
154+
BagWriter.writeBagitInfoFile(metadata, new Version(0,95), Paths.get(rootDir.toURI()), StandardCharsets.UTF_8.name());
155+
assertTrue(packageInfo.exists());
150156
}
151157

152158
@Test

0 commit comments

Comments
 (0)