package io.dropwizard.jetty;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import java.io.File;
import java.net.InetAddress;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Collection;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assume.assumeThat;
public class NetUtilTest {
private static final String OS_NAME_PROPERTY = "os.name";
/**
* Assuming Windows
*/
@Test
public void testDefaultTcpBacklogForWindows() {
assumeThat(System.getProperty(OS_NAME_PROPERTY), containsString("win"));
assumeThat(isTcpBacklogSettingReadable(), is(false));
assertEquals(NetUtil.DEFAULT_TCP_BACKLOG_WINDOWS, NetUtil.getTcpBacklog());
}
/**
* Assuming Mac (which does not have /proc)
*/
@Test
public void testNonWindowsDefaultTcpBacklog() {
assumeThat(System.getProperty(OS_NAME_PROPERTY), containsString("Mac OS X"));
assumeThat(isTcpBacklogSettingReadable(), is(false));
assertEquals(NetUtil.DEFAULT_TCP_BACKLOG_LINUX, NetUtil.getTcpBacklog());
}
/**
* Assuming Mac (which does not have /proc)
*/
@Test
public void testNonWindowsSpecifiedTcpBacklog() {
assumeThat(System.getProperty(OS_NAME_PROPERTY), containsString("Mac OS X"));
assumeThat(isTcpBacklogSettingReadable(), is(false));
assertEquals(100, NetUtil.getTcpBacklog(100));
}
/**
* Assuming Linux (which has /proc)
*/
@Test
public void testOsSetting() {
assumeThat(System.getProperty(OS_NAME_PROPERTY), containsString("Linux"));
assumeThat(isTcpBacklogSettingReadable(), is(true));
assertNotEquals(-1, NetUtil.getTcpBacklog(-1));
}
@Test
public void testAllLocalIps() throws Exception {
NetUtil.setLocalIpFilter((nif, adr) ->
(adr != null) && !adr.isLoopbackAddress() && (nif.isPointToPoint() || !adr.isLinkLocalAddress()));
final Collection<InetAddress> addresses = NetUtil.getAllLocalIPs();
assertThat(addresses.size()).isGreaterThan(0);
assertThat(addresses).doesNotContain(InetAddress.getLoopbackAddress());
}
@Test
public void testLocalIpsWithLocalFilter() throws Exception {
NetUtil.setLocalIpFilter((inf, adr) -> adr != null);
final Collection<InetAddress> addresses = NetUtil.getAllLocalIPs();
assertThat(addresses.size()).isGreaterThan(0);
assertThat(addresses).contains(InetAddress.getLoopbackAddress());
}
public boolean isTcpBacklogSettingReadable() {
return AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> {
try {
File f = new File(NetUtil.TCP_BACKLOG_SETTING_LOCATION);
return f.exists() && f.canRead();
} catch (Exception e) {
return false;
}
});
}
}