package org.arquillian.cube.impl.client.enricher;
import org.arquillian.cube.CubeIp;
import org.arquillian.cube.spi.Cube;
import org.arquillian.cube.spi.CubeRegistry;
import org.arquillian.cube.spi.metadata.HasPortBindings;
import org.hamcrest.core.Is;
import org.jboss.arquillian.core.api.Instance;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class CubeIpTestEnricherTest {
@Test
public void should_enrich_test_with_container_ip() {
CubeIpTestEnricher cubeIpTestEnricher = new CubeIpTestEnricher();
cubeIpTestEnricher.cubeRegistryInstance = new Instance<CubeRegistry>() {
@Override
public CubeRegistry get() {
final CubeRegistry cubeRegistry = Mockito.mock(CubeRegistry.class);
Mockito.when(cubeRegistry.getCube("test")).thenAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
final HasPortBindings hasPortBindings = Mockito.mock(HasPortBindings.class);
Mockito.when(hasPortBindings.getInternalIP()).thenReturn("192.168.99.100");
Mockito.when(hasPortBindings.getContainerIP()).thenReturn("192.168.99.101");
final Cube<?> cube = Mockito.mock(Cube.class);
Mockito.when(cube.hasMetadata(HasPortBindings.class)).thenReturn(true);
Mockito.when(cube.getMetadata(HasPortBindings.class)).thenReturn(hasPortBindings);
return cube;
}
});
return cubeRegistry;
}
};
final CubeIpTestEnricherTest.MyTestExternal testCase = new CubeIpTestEnricherTest.MyTestExternal();
cubeIpTestEnricher.enrich(testCase);
assertThat(testCase.ip, is("192.168.99.101"));
}
@Test
public void should_enrich_test_with_internal_ip() {
CubeIpTestEnricher cubeIpTestEnricher = new CubeIpTestEnricher();
cubeIpTestEnricher.cubeRegistryInstance = new Instance<CubeRegistry>() {
@Override
public CubeRegistry get() {
final CubeRegistry cubeRegistry = Mockito.mock(CubeRegistry.class);
Mockito.when(cubeRegistry.getCube("test")).thenAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
final HasPortBindings hasPortBindings = Mockito.mock(HasPortBindings.class);
Mockito.when(hasPortBindings.getInternalIP()).thenReturn("192.168.99.100");
final Cube<?> cube = Mockito.mock(Cube.class);
Mockito.when(cube.hasMetadata(HasPortBindings.class)).thenReturn(true);
Mockito.when(cube.getMetadata(HasPortBindings.class)).thenReturn(hasPortBindings);
return cube;
}
});
return cubeRegistry;
}
};
final CubeIpTestEnricherTest.MyTest testCase = new CubeIpTestEnricherTest.MyTest();
cubeIpTestEnricher.enrich(testCase);
assertThat(testCase.ip, is("192.168.99.100"));
}
@Test
public void should_enrich_test_method_with_internal() throws NoSuchMethodException {
CubeIpTestEnricher cubeIpTestEnricher = new CubeIpTestEnricher();
cubeIpTestEnricher.cubeRegistryInstance = new Instance<CubeRegistry>() {
@Override
public CubeRegistry get() {
final CubeRegistry cubeRegistry = Mockito.mock(CubeRegistry.class);
Mockito.when(cubeRegistry.getCube("test")).thenAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
final HasPortBindings hasPortBindings = Mockito.mock(HasPortBindings.class);
Mockito.when(hasPortBindings.getInternalIP()).thenReturn("192.168.99.100");
final Cube<?> cube = Mockito.mock(Cube.class);
Mockito.when(cube.hasMetadata(HasPortBindings.class)).thenReturn(true);
Mockito.when(cube.getMetadata(HasPortBindings.class)).thenReturn(hasPortBindings);
return cube;
}
});
return cubeRegistry;
}
};
final CubeIpTestEnricherTest.MyTest testCase = new CubeIpTestEnricherTest.MyTest();
final Object[] myMethods =
cubeIpTestEnricher.resolve(testCase.getClass().getMethod("myMethod", String.class, String.class));
assertThat((String) myMethods[1], Is.is("192.168.99.100"));
}
public static class MyTest {
@CubeIp(containerName = "test")
String ip;
public void myMethod(String first, @CubeIp(containerName = "test") String ip) {
}
}
public static class MyTestExternal {
@CubeIp(containerName = "test", internal = false)
String ip;
}
}