/* * Copyright 2012 Jason Miller * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jj.http.client; import static jj.AnswerWithSelf.ANSWER_WITH_SELF; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import static org.mockito.BDDMockito.*; import java.net.InetSocketAddress; import java.net.SocketAddress; import io.netty.bootstrap.Bootstrap; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.resolver.dns.DnsAddressResolverGroup; import io.netty.resolver.dns.DnsServerAddresses; import javax.inject.Provider; import jj.configuration.ConfigurationLoading; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; /** * @author jason * */ @RunWith(MockitoJUnitRunner.class) public class HttpClientTest { @Mock HttpClientNioEventLoopGroup group; @Mock HttpClientChannelInitializer initializer; @Mock HttpClientConfigurationReader configuration; Bootstrap bootstrap; Provider<Bootstrap> provider = new Provider<Bootstrap>() { public Bootstrap get() { return bootstrap; } }; HttpClient client; @Captor ArgumentCaptor<SocketAddress> localAddressCaptor; @Captor ArgumentCaptor<DnsAddressResolverGroup> resolverCaptor; @Mock InetSocketAddress localClientAddress; @Mock InetSocketAddress localNameserverAddress; @Before public void before() { bootstrap = mock(Bootstrap.class, ANSWER_WITH_SELF); client = new HttpClient(group, initializer, configuration, provider); } @Test public void test() { given(configuration.localClientAddress()).willReturn(localClientAddress); given(configuration.localNameserverAddress()).willReturn(localNameserverAddress); given(configuration.nameservers()).willReturn(DnsServerAddresses.defaultAddresses()); client.on((ConfigurationLoading)null); verify(bootstrap).group(group); verify(bootstrap).handler(initializer); verify(bootstrap).channel(NioSocketChannel.class); verify(bootstrap).localAddress(localAddressCaptor.capture()); // prevents NPE to same-instance this assertThat(localAddressCaptor.getValue(), is(sameInstance(localClientAddress))); verify(bootstrap).resolver(resolverCaptor.capture()); // might need to reflect into it! // and the options! // make sure we try to catch errors verify(bootstrap).validate(); } }