/*******************************************************************************
* 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.machine;
import org.eclipse.che.api.core.model.machine.MachineSource;
import org.eclipse.che.api.machine.server.exception.MachineException;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
/**
* Check if MachineSource object used for Docker is working as expected.
*
* @author Florent Benoit
*/
@Listeners(MockitoTestNGListener.class)
public class DockerMachineSourceTest {
@Mock
private MachineSource machineSource;
@DataProvider(name = "image-ids")
public Object[][] messageProvider() {
return new String[][]{
{"docker-registry.company.com:5000/my-repository:some-tag", "docker-registry.company.com:5000", "my-repository", "some-tag",
null},
{"my-repository", null, "my-repository", null, null},
{"my-repository:tag", null, "my-repository", "tag", null},
{"docker-registry.company.com:5000/my-repository", "docker-registry.company.com:5000", "my-repository", null, null},
{"docker-registry.company.com:5000/my-repository:mytag@digest123", "docker-registry.company.com:5000", "my-repository",
"mytag", "digest123"},
{"ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2", null, "ubuntu", null,
"sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2"},
{"docker-registry:5000/ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2",
"docker-registry:5000", "ubuntu", null, "sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2"},
};
}
/**
* Check that all the constructor are valid and not throwing exception based on data provider
*/
@Test(dataProvider = "image-ids")
public void testConstructors(String location, String registry, String repository, String tag, String digest) throws MachineException {
DockerMachineSource source1 = new DockerMachineSource(repository).withTag(tag).withRegistry(registry).withDigest(digest);
assertEquals(source1.getLocation(), location);
DockerMachineSource source2 = new DockerMachineSource(source1);
assertEquals(source2.getLocation(), location);
assertEquals(source2.getRegistry(), registry);
assertEquals(source2.getRepository(), repository);
assertEquals(source2.getTag(), tag);
assertEquals(source2.getDigest(), digest);
DockerMachineSource source3 = new DockerMachineSource(repository);
source3.setTag(tag);
source3.setRegistry(registry);
source3.setDigest(digest);
assertEquals(source3.getLocation(), location);
}
/**
* Check valid source type
*/
@Test(expectedExceptions = MachineException.class)
public void testInvalidSourceType() throws MachineException {
when(machineSource.getType()).thenReturn("invalid");
new DockerMachineSource(machineSource);
}
/**
* Check invalid format
*/
@Test(expectedExceptions = MachineException.class)
public void testInvalidFormat() throws MachineException {
when(machineSource.getType()).thenReturn("image");
when(machineSource.getLocation()).thenReturn("@image");
new DockerMachineSource(machineSource);
}
}