package com.workshare.msnos.core.protocols.ip.resolvers;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mockito;
import com.workshare.msnos.core.protocols.ip.AddressResolver;
public class CompositeIPResolverTest {
private AddressResolver context;
@Before
public void prepare() throws IOException {
context = mock(AddressResolver.class);
}
@Test
public void shouldInvokeAllResolversInOrder() {
IPResolver one = mock(IPResolver.class);
IPResolver two = mock(IPResolver.class);
new CompositeIPResolver(one, two).resolve(context);
InOrder inOrder = Mockito.inOrder(one, two);
inOrder.verify(one).resolve(context);
inOrder.verify(two).resolve(context);
}
@Test
public void shouldReturnTheFirstSuccess() {
byte[] expected = new byte[]{};
IPResolver one = mock(IPResolver.class);
IPResolver two = mock(IPResolver.class);
IPResolver tre = mock(IPResolver.class);
when(two.resolve(context)).thenReturn(expected);
byte[] result = new CompositeIPResolver(one, two, tre).resolve(context);
verify(one).resolve(context);
verify(two).resolve(context);
verifyZeroInteractions(tre);
assertEquals(expected, result);
}
@Test
public void shouldNotExplodeIfOneResolverBombs() {
byte[] expected = new byte[]{};
IPResolver one = mock(IPResolver.class);
IPResolver two = mock(IPResolver.class);
IPResolver tre = mock(IPResolver.class);
when(two.resolve(context)).thenThrow(new RuntimeException("Boom!"));
when(tre.resolve(context)).thenReturn(expected);
byte[] result = new CompositeIPResolver(one, two, tre).resolve(context);
assertEquals(expected, result);
}
}