/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.docker.client.parser; import org.eclipse.che.plugin.docker.client.DockerFileException; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class DockerImageIdentifierParserTest { @Test(dataProvider = "validImages", timeOut = 500) public void shouldBeAbleToParseValidImage(String image, DockerImageIdentifier expectedImageIdentifier) throws Exception { final DockerImageIdentifier actualParsedIdentifier = DockerImageIdentifierParser.parse(image); if (!actualParsedIdentifier.equals(expectedImageIdentifier)) { System.out.println(); } assertEquals(actualParsedIdentifier, expectedImageIdentifier); } @Test(expectedExceptions = DockerFileException.class, expectedExceptionsMessageRegExp = "Null and empty argument value is forbidden") public void shouldThrowIllegalArgumentExceptionIfArgumentIsNull() throws Exception { DockerImageIdentifierParser.parse(null); } @Test(expectedExceptions = DockerFileException.class, expectedExceptionsMessageRegExp = "Null and empty argument value is forbidden") public void shouldThrowIllegalArgumentExceptionIfArgumentIsEmpty() throws Exception { DockerImageIdentifierParser.parse(""); } @Test(dataProvider = "invalidImages", expectedExceptions = DockerFileException.class, expectedExceptionsMessageRegExp = "Provided image reference is invalid", timeOut = 500) public void shouldThrowDockerFileExceptionIfArgumentDoesNotMatchRegexp(String image) throws Exception { DockerImageIdentifierParser.parse(image); } @DataProvider(name = "validImages") public static Object[][] validImages() { return new Object[][] { {"ubuntu", DockerImageIdentifier.builder() .setRepository("ubuntu") .build()}, {"codenvy/ubuntu_jdk8", DockerImageIdentifier.builder() .setRepository("codenvy/ubuntu_jdk8") .build()}, {"localhost:5000/ubuntu", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("localhost:5000") .build()}, {"myserver:5000/ubuntu", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("myserver:5000") .build()}, {"myserver.com/ubuntu", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("myserver.com") .build()}, {"myserver.com/codenvy/ubuntu", DockerImageIdentifier.builder() .setRepository("codenvy/ubuntu") .setRegistry("myserver.com") .build()}, {"docker.io/ubuntu", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("docker.io") .build()}, {"docker.io/codenvy/ubuntu", DockerImageIdentifier.builder() .setRepository("codenvy/ubuntu") .setRegistry("docker.io") .build()}, {"codenvy/agaragatyi/ubuntu_jdk8", DockerImageIdentifier.builder() .setRepository("codenvy/agaragatyi/ubuntu_jdk8") .build()}, {"ubuntu:latest", DockerImageIdentifier.builder() .setRepository("ubuntu") .setTag("latest") .build()}, {"ubuntu:8080", DockerImageIdentifier.builder() .setRepository("ubuntu") .setTag("8080") .build()}, {"debian:t.com", DockerImageIdentifier.builder() .setRepository("debian") .setTag("t.com") .build()}, {"ubuntu@sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD", DockerImageIdentifier.builder() .setRepository("ubuntu") .setDigest("sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD") .build()}, {"registry1-my-registries.com.ua/ubuntu", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("registry1-my-registries.com.ua") .build()}, {"registry1-my-registries.com.ua/ubuntu:latest", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("registry1-my-registries.com.ua") .setTag("latest") .build()}, {"registry1-my-registries.com.ua/debian:some.Tag-with_Different.Symbols", DockerImageIdentifier.builder() .setRepository("debian") .setRegistry("registry1-my-registries.com.ua") .setTag("some.Tag-with_Different.Symbols") .build()}, {"registry1-my-registries.com.ua/alpine@sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD", DockerImageIdentifier.builder() .setRepository("alpine") .setRegistry("registry1-my-registries.com.ua") .setDigest("sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD") .build()}, {"registry1-my-registries.com.ua:5050/alpine_12", DockerImageIdentifier.builder() .setRepository("alpine_12") .setRegistry("registry1-my-registries.com.ua:5050") .build()}, {"registry1-my-registries.com.ua:50900/debian:latest", DockerImageIdentifier.builder() .setRepository("debian") .setRegistry("registry1-my-registries.com.ua:50900") .setTag("latest") .build()}, {"registry1-my-registries.com.ua:81/debian:someTag", DockerImageIdentifier.builder() .setRepository("debian") .setRegistry("registry1-my-registries.com.ua:81") .setTag("someTag") .build()}, {"registry1-my-registries.com.ua:80/debian:someTag", DockerImageIdentifier.builder() .setRepository("debian") .setRegistry("registry1-my-registries.com.ua:80") .setTag("someTag") .build()}, {"registry1-my-registries.com.ua:443/alpine:someTag", DockerImageIdentifier.builder() .setRepository("alpine") .setRegistry("registry1-my-registries.com.ua:443") .setTag("someTag") .build()}, {"registry1-my-registries.com.ua:22/ubuntu@sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD", DockerImageIdentifier.builder() .setRepository("ubuntu") .setRegistry("registry1-my-registries.com.ua:22") .setDigest("sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD") .build()}, {"eclipse/che", DockerImageIdentifier.builder() .setRepository("eclipse/che") .build()}, {"eclipse/che:latest", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setTag("latest") .build()}, {"eclipse/che:someTag", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setTag("someTag") .build()}, {"eclipse/che@sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setDigest("sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD") .build()}, {"my.other.registry.com/eclipse/che", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com") .build()}, {"my.other.registry.com/eclipse/che:latest", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com") .setTag("latest") .build()}, {"my.other.registry.com/eclipse/che:someTag", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com") .setTag("someTag") .build()}, {"my.other.registry.com/eclipse/che@sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com") .setDigest("sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD") .build()}, {"my.other.registry.com:80/eclipse/che", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com:80") .build()}, {"my.other.registry.com:9080/eclipse/che:latest", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com:9080") .setTag("latest") .build()}, {"my.other.registry.com:5000/eclipse/che:someTag", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com:5000") .setTag("someTag") .build()}, {"my.other.registry.com:5000/eclipse/che/something:someTag", DockerImageIdentifier.builder() .setRepository("eclipse/che/something") .setRegistry("my.other.registry.com:5000") .setTag("someTag") .build()}, {"my.other.registry.com:32800/eclipse/che@sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setRegistry("my.other.registry.com:32800") .setDigest("sha256:acd122209878932bcdafafdFADCDBafaadacdbeEFAD") .build()}, {"eclipse/che@some-digest:adfbac09548AFCBDFACDAFdcedfedfedfdde", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setDigest("some-digest:adfbac09548AFCBDFACDAFdcedfedfedfdde") .build()}, {"eclipse/che@some_digest:adfbac09548AFCBDFACDAFdcedfedfedfdde", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setDigest("some_digest:adfbac09548AFCBDFACDAFdcedfedfedfdde") .build()}, {"eclipse/che@some+digest:adfbac09548AFCBDFACDAFdcedfedfedfdde", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setDigest("some+digest:adfbac09548AFCBDFACDAFdcedfedfedfdde") .build()}, {"eclipse/che@some.digest:adfbac09548AFCBDFACDAFdcedfedfedfdde", DockerImageIdentifier.builder() .setRepository("eclipse/che") .setDigest("some.digest:adfbac09548AFCBDFACDAFdcedfedfedfdde") .build()} }; } @DataProvider(name = "invalidImages") public static Object[][] invalidImages() { return new Object[][] { {"image/"}, {"/image/"}, {"/image"}, {":image"}, {":image:"}, {"image:"}, {"image@"}, {"@image"}, {"repo/image:tag@digest:aaaaaa098@digest"}, {"repo/image:tag:tag1"}, {"my.other.registry.com:-8080/eclipse/che/some"} }; } }