/*******************************************************************************
* Copyright (c) 2016 Red Hat.
* 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:
* Red Hat - Initial Contribution
*******************************************************************************/
package org.eclipse.linuxtools.internal.docker.core;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.assertj.core.data.MapEntry;
import org.eclipse.linuxtools.docker.core.IDockerImage;
import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerImageFactory;
import org.junit.Test;
/**
* Testing the {@link DockerImage} implementation and its utility methods
*/
public class DockerImageTest {
@Test
public void shouldExtractRepoFromRepoTag() {
// given
final String repoTag = "foo:latest";
// when
final String repo = DockerImage.extractRepo(repoTag);
// then
assertThat(repo).isEqualTo("foo");
}
@Test
public void shouldExtractRepoFromOrgRepoTag() {
// given
final String repoTag = "org/foo:latest";
// when
final String repo = DockerImage.extractRepo(repoTag);
// then
assertThat(repo).isEqualTo("org/foo");
}
@Test
public void shouldExtractRepoFromOrgRepo() {
// given
final String repoTag = "org/foo";
// when
final String repo = DockerImage.extractRepo(repoTag);
// then
assertThat(repo).isEqualTo("org/foo");
}
@Test
public void shouldExtractRepoFromRepo() {
// given
final String repoTag = "foo";
// when
final String repo = DockerImage.extractRepo(repoTag);
// then
assertThat(repo).isEqualTo("foo");
}
@Test
public void shouldExtractTagFromRepoTag() {
// given
final String repoTag = "foo:latest";
// when
final String repo = DockerImage.extractTag(repoTag);
// then
assertThat(repo).isEqualTo("latest");
}
@Test
public void shouldExtractTagFromOrgRepoTag() {
// given
final String repoTag = "org/foo:latest";
// when
final String repo = DockerImage.extractTag(repoTag);
// then
assertThat(repo).isEqualTo("latest");
}
@Test
public void shouldNotExtractTagFromOrgRepo() {
// given
final String repoTag = "org/foo";
// when
final String repo = DockerImage.extractTag(repoTag);
// then
assertThat(repo).isNull();
}
@Test
public void shouldNotExtractTagFromRepo() {
// given
final String repoTag = "foo";
// when
final String repo = DockerImage.extractTag(repoTag);
// then
assertThat(repo).isNull();
}
@Test
public void shouldExtractTagsByRepo() {
// given
final List<String> repoTags = Arrays.asList("foo", "foo:latest", "foo:1.0", "org/foo", "org/foo:1.0",
"org/foo:latest");
// when
final Map<String, List<String>> tagsByRepo = DockerImage.extractTagsByRepo(repoTags);
// then
assertThat(tagsByRepo).containsEntry("foo", Arrays.asList("1.0", "latest"));
assertThat(tagsByRepo).containsEntry("org/foo", Arrays.asList("1.0", "latest"));
}
@Test
public void shouldExtractEmptyTagsByRepo() {
// given
final List<String> repoTags = Arrays.asList("foo");
// when
final Map<String, List<String>> tagsByRepo = DockerImage.extractTagsByRepo(repoTags);
// then
assertThat(tagsByRepo).hasSize(1).contains(MapEntry.entry("foo", Collections.emptyList()));
}
@Test
public void shouldDuplicateImageByRepo() {
// given
final IDockerImage fooImage = MockDockerImageFactory.id("sha256:foo_image")
.name("foo_image", "foo_image_alias:alias").build();
// when
final List<IDockerImage> result = DockerImage.duplicateImageByRepo(fooImage).collect(Collectors.toList());
// then
assertThat(result).hasSize(2);
assertThat(result.get(0).id()).isEqualTo("sha256:foo_image");
assertThat(result.get(0).repo()).isEqualTo("foo_image");
assertThat(result.get(0).tags()).isEmpty();
assertThat(result.get(1).id()).isEqualTo("sha256:foo_image");
assertThat(result.get(1).repo()).isEqualTo("foo_image_alias");
assertThat(result.get(1).tags()).containsExactly("alias");
}
}