Skip to content

Commit 2b7128f

Browse files
authored
Merge pull request #18 from ariel-miculas/fix-complete-verified-as
Fix the behavior of complete_verified_as function
2 parents aa0e9c1 + 2920ac3 commit 2b7128f

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

src/lib.rs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -614,20 +614,25 @@ impl<'a> BlobWriter<'a> {
614614
found: self.size,
615615
});
616616
}
617-
self.complete()
617+
self.complete_as(&found_digest)
618618
}
619619

620-
/// Finish writing this blob object.
621-
pub fn complete(mut self) -> Result<Blob> {
622-
let sha256 = hex::encode(self.hash.finish()?);
623-
let destname = &format!("{}/{}", BLOBDIR, sha256);
620+
/// Finish writing this blob object with the supplied name
621+
fn complete_as(mut self, sha256_digest: &str) -> Result<Blob> {
622+
let destname = &format!("{}/{}", BLOBDIR, sha256_digest);
624623
let target = self.target.take().unwrap();
625624
target.replace(destname)?;
626625
Ok(Blob {
627-
sha256: Sha256Digest::from_str(&sha256).unwrap(),
626+
sha256: Sha256Digest::from_str(sha256_digest).unwrap(),
628627
size: self.size,
629628
})
630629
}
630+
631+
/// Finish writing this blob object.
632+
pub fn complete(mut self) -> Result<Blob> {
633+
let sha256 = hex::encode(self.hash.finish()?);
634+
self.complete_as(&sha256)
635+
}
631636
}
632637

633638
impl<'a> std::io::Write for BlobWriter<'a> {
@@ -814,4 +819,23 @@ mod tests {
814819
assert_eq!(w.fsck().unwrap(), 6);
815820
Ok(())
816821
}
822+
823+
#[test]
824+
fn test_complete_verified_as() -> Result<()> {
825+
let td = cap_tempfile::tempdir(cap_std::ambient_authority())?;
826+
let oci_dir = OciDir::ensure(&td)?;
827+
let empty_json_digest = oci_image::DescriptorBuilder::default()
828+
.media_type(MediaType::EmptyJSON)
829+
.size(2_u32)
830+
.digest(Sha256Digest::from_str(
831+
"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a",
832+
)?)
833+
.build()?;
834+
835+
let mut empty_json_blob = oci_dir.create_blob()?;
836+
empty_json_blob.write_all("{}".as_bytes())?;
837+
let blob = empty_json_blob.complete_verified_as(&empty_json_digest)?;
838+
assert_eq!(blob.sha256().digest(), empty_json_digest.digest().digest());
839+
Ok(())
840+
}
817841
}

0 commit comments

Comments
 (0)