package netflix.ocelli.rxnetty.internal;
import io.reactivex.netty.client.ConnectionFactory;
import io.reactivex.netty.client.ConnectionObservable;
import io.reactivex.netty.client.ConnectionProvider;
import netflix.ocelli.Instance;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mockito;
import java.net.SocketAddress;
import java.util.List;
public class AbstractLoadBalancerTest {
@Rule
public final LoadBalancerRule lbRule = new LoadBalancerRule();
@Test(timeout = 60000)
public void testRoundRobin() throws Exception {
List<Instance<SocketAddress>> hosts = lbRule.setupDefault();
AbstractLoadBalancer<String, String> loadBalancer = lbRule.getLoadBalancer();
ConnectionFactory<String, String> cfMock = lbRule.newConnectionFactoryMock();
ConnectionProvider<String, String> cp = loadBalancer.toConnectionProvider(cfMock);
ConnectionObservable<String, String> co = cp.nextConnection();
lbRule.connect(co);
Mockito.verify(cfMock).newConnection(hosts.get(0).getValue());
Mockito.verifyNoMoreInteractions(cfMock);
cp = loadBalancer.toConnectionProvider(cfMock);
co = cp.nextConnection();
lbRule.connect(co);
Mockito.verify(cfMock).newConnection(hosts.get(1).getValue());
Mockito.verifyNoMoreInteractions(cfMock);
}
}