// Returns a reader that can read the file from within the tar archive. // The S3 uploader uses this reader to stream data to S3 and Glacier. func (storer *APTStorer) getReadCloser(ingestState *models.IngestState, gf *models.GenericFile) (*fileutil.TarFileIterator, io.ReadCloser) { tarFilePath := ingestState.IngestManifest.Object.IngestTarFilePath tfi, err := fileutil.NewTarFileIterator(tarFilePath) if err != nil { msg := fmt.Sprintf("Can't get TarFileIterator for %s: %v", tarFilePath, err) ingestState.IngestManifest.StoreResult.AddError(msg) return nil, nil } origPathWithBagName, err := gf.OriginalPathWithBagName() if err != nil { ingestState.IngestManifest.StoreResult.AddError(err.Error()) return nil, nil } readCloser, err := tfi.Find(origPathWithBagName) if err != nil { msg := fmt.Sprintf("Can't get reader for %s: %v", gf.Identifier, err) ingestState.IngestManifest.StoreResult.AddError(msg) if readCloser != nil { readCloser.Close() } return nil, nil } return tfi, readCloser }
func TestOriginalPathWithBagName(t *testing.T) { genericFile := models.GenericFile{} genericFile.IntellectualObjectIdentifier = "uc.edu/cin.675812" // Top-level custom tag file genericFile.Identifier = "uc.edu/cin.675812/tagmanifest-sha256.txt" origPath, err := genericFile.OriginalPathWithBagName() require.Nil(t, err) assert.Equal(t, "cin.675812/tagmanifest-sha256.txt", origPath) // Payload file genericFile.Identifier = "uc.edu/cin.675812/data/object.properties" origPath, err = genericFile.OriginalPathWithBagName() require.Nil(t, err) assert.Equal(t, "cin.675812/data/object.properties", origPath) // Nested custom tag file genericFile.Identifier = "uc.edu/cin.675812/custom/tag/dir/special_info.xml" origPath, err = genericFile.OriginalPathWithBagName() require.Nil(t, err) assert.Equal(t, "cin.675812/custom/tag/dir/special_info.xml", origPath) }