Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Podman image inspect digest for local images #4298

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,15 @@ public static DescriptorDigest fromDigest(String digest) throws DigestException
return new DescriptorDigest(hash);
}

public static DescriptorDigest fromDigestOrHash(String digestOrHash) throws DigestException {
if (digestOrHash.matches(DIGEST_REGEX)) {
return fromDigest(digestOrHash);
} else if (digestOrHash.matches(HASH_REGEX)) {
return fromHash(digestOrHash);
}
throw new DigestException("Invalid digest or hash: " + digestOrHash);
}

private DescriptorDigest(String hash) {
this.hash = hash;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public long getSize() {

@Override
public DescriptorDigest getImageId() throws DigestException {
return DescriptorDigest.fromDigest(imageId);
return DescriptorDigest.fromDigestOrHash(imageId);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,51 @@ public void testCreateFromDigest_fail() {
}
}

@Test
public void testCreateFromDigestOrHash_passForDigest() throws DigestException {
String goodHash = createGoodHash('a');
String goodDigest = "sha256:" + goodHash;

DescriptorDigest descriptorDigest = DescriptorDigest.fromDigestOrHash(goodDigest);

Assert.assertEquals(goodHash, descriptorDigest.getHash());
Assert.assertEquals(goodDigest, descriptorDigest.toString());
}

@Test
public void testCreateFromDigestOrHash_passForHash() throws DigestException {
String goodHash = createGoodHash('a');

DescriptorDigest descriptorDigest = DescriptorDigest.fromDigestOrHash(goodHash);

Assert.assertEquals(goodHash, descriptorDigest.getHash());
Assert.assertEquals("sha256:" + goodHash, descriptorDigest.toString());
}

@Test
public void testCreateFromDigestOrHash_failForBadDigest() {
String badDigest = "sha256:not a valid digest";

try {
DescriptorDigest.fromDigestOrHash(badDigest);
Assert.fail("Invalid digest should have caused digest creation failure.");
} catch (DigestException ex) {
Assert.assertEquals("Invalid digest or hash: " + badDigest, ex.getMessage());
}
}

@Test
public void testCreateFromDigestOrHash_failForBadHash() {
String badHash = "not a valid hash";

try {
DescriptorDigest.fromDigestOrHash(badHash);
Assert.fail("Invalid digest should have caused digest creation failure.");
} catch (DigestException ex) {
Assert.assertEquals("Invalid digest or hash: " + badHash, ex.getMessage());
}
}

@Test
public void testUseAsMapKey() throws DigestException {
DescriptorDigest descriptorDigestA1 = DescriptorDigest.fromHash(createGoodHash('a'));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,17 @@ public void testDockerImageDetails() throws DigestException, IOException {
results.getDiffIds());
}

@Test
public void testPodmanImageDetails_Id() throws DigestException, IOException {
// Support Podman "Id" without the "sha256:" prefix
String json = "{\"Id\":\"e8d00769c8a805a0656dbfd49d4f91cbc2e36d0199f10343d1beba36ecdcb3fd\"}\n";
DockerImageDetails results = JsonTemplateMapper.readJson(json, DockerImageDetails.class);
Assert.assertEquals(
DescriptorDigest.fromHash(
"e8d00769c8a805a0656dbfd49d4f91cbc2e36d0199f10343d1beba36ecdcb3fd"),
results.getImageId());
}

@Test
public void testDockerImageDetails_unknownProperties() throws IOException, DigestException {
String json =
Expand Down Expand Up @@ -380,7 +391,7 @@ public void testDockerImageDetails_emptyJson() throws IOException, DigestExcepti
details.getImageId();
Assert.fail();
} catch (DigestException ex) {
Assert.assertEquals("Invalid digest: ", ex.getMessage());
Assert.assertEquals("Invalid digest or hash: ", ex.getMessage());
}
}

Expand Down