10000 fix(2127): handle repoNames with tags by setchy · Pull Request #2128 · docker-java/docker-java · GitHub
[go: up one dir, main page]

Skip to content

fix(2127): handle repoNames with tags #2128

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

Merged
Merged
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 @@ -22,6 +22,7 @@ private NameParser() {
private static final int RepositoryNameTotalLengthMax = 255;

private static final String SHA256_SEPARATOR = "@sha256:";
private static final String COLON_SEPARATOR = ":";

private static final Pattern RepositoryNameComponentRegexp = Pattern.compile("[a-z0-9]+(?:[._-][a-z0-9]+)*");

Expand Down Expand Up @@ -106,6 +107,13 @@ public static HostnameReposName resolveRepositoryName(String reposName) {
String[] nameParts = reposName.split("/", 2);
if (nameParts.length == 1
|| (!nameParts[0].contains(".") && !nameParts[0].contains(":") && !nameParts[0].equals("localhost"))) {
if (StringUtils.containsIgnoreCase(reposName, SHA256_SEPARATOR)) {
reposName = StringUtils.substringBeforeLast(reposName, SHA256_SEPARATOR);
}

if (StringUtils.contains(reposName, COLON_SEPARATOR)) {
reposName = StringUtils.substringBeforeLast(reposName, COLON_SEPARATOR);
}
return new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, reposName);
}

Expand All @@ -119,6 +127,10 @@ public static HostnameReposName resolveRepositoryName(String reposName) {
reposName = StringUtils.substringBeforeLast(reposName, SHA256_SEPARATOR);
}

if (StringUtils.contains(reposName, COLON_SEPARATOR)) {
reposName = StringUtils.substringBeforeLast(reposName, COLON_SEPARATOR);
}

validateRepoName(reposName);
return new HostnameReposName(hostname, reposName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,24 @@ public void testResolveSimpleRepositoryName() {
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
}

@Test
public void testResolveRepositoryNameWithTag() {
HostnameReposName resolved = NameParser.resolveRepositoryName("repository:tag");
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
}

@Test
public void testResolveRepositoryNameWithSHA256() {
HostnameReposName resolved = NameParser.resolveRepositoryName("repository@sha256:sha256");
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
}

@Test
public void testResolveRepositoryNameWithTagAndSHA256() {
HostnameReposName resolved = NameParser.resolveRepositoryName("repository:tag@sha256:sha256");
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "repository"), resolved);
}

@Test
public void testResolveRepositoryNameWithNamespace() {
HostnameReposName resolved = NameParser.resolveRepositoryName("namespace/repository");
Expand All @@ -92,7 +110,7 @@ public void testResolveRepositoryNameWithNamespace() {
@Test
public void testResolveRepositoryNameWithNamespaceAndSHA256() {
HostnameReposName resolved = NameParser.resolveRepositoryName("namespace/repository@sha256:sha256");
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "namespace/repository@sha256:sha256"), resolved);
assertEquals(new HostnameReposName(AuthConfig.DEFAULT_SERVER_ADDRESS, "namespace/repository"), resolved);
}

@Test
Expand All @@ -107,6 +125,17 @@ public void testResolveRepositoryNameWithNamespaceAndHostnameAndSHA256() {
assertEquals(new HostnameReposName("localhost:5000", "namespace/repository"), resolved);
}

@Test
public void testResolveRepositoryNameWithNamespaceAndHostnameAndTag() {
HostnameReposName resolved = NameParser.resolveRepositoryName("localhost:5000/namespace/repository:tag");
assertEquals(new HostnameReposName("localhost:5000", "namespace/repository"), resolved);
}
@Test
public void testResolveRepositoryNameWithNamespaceAndHostnameAndTagAndSHA256() {
HostnameReposName resolved = NameParser.resolveRepositoryName("localhost:5000/namespace/repository:tag@sha256:sha256");
assertEquals(new HostnameReposName("localhost:5000", "namespace/repository"), resolved);
}

@Test(expected = InvalidRepositoryNameException.class)
public void testResolveRepositoryNameWithIndex() {
NameParser.resolveRepositoryName("index.docker.io/repository");
Expand Down Expand Up @@ -147,4 +176,16 @@ public void testResolveReposTagWithSHA256() {
resolved = NameParser.parseRepositoryTag("localhost:5000/namespace/repository@sha256:sha256");
assertEquals(new ReposTag("localhost:5000/namespace/repository@sha256:sha256", ""), resolved);
}

@Test
public void testResolveReposTagWithTagAndSHA256() {
ReposTag resolved = NameParser.parseRepositoryTag("repository:tag@sha256:sha256");
assertEquals(new ReposTag("repository:tag@sha256:sha256", ""), resolved);

resolved = NameParser.parseRepositoryTag("namespace/repository:tag@sha256:sha256");
assertEquals(new ReposTag("namespace/repository:tag@sha256:sha256", ""), resolved);

resolved = NameParser.parseRepositoryTag("localhost:5000/namespace/repository:tag@sha256:sha256");
assertEquals(new ReposTag("localhost:5000/namespace/repository:tag@sha256:sha256", ""), resolved);
}
}
0