package org.togglz.core.activation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; import org.junit.Test; import org.togglz.core.Feature; import org.togglz.core.repository.FeatureState; import org.togglz.core.user.FeatureUser; import org.togglz.core.user.SimpleFeatureUser; public class IPActivationStrategyTest { private final ServerIpActivationStrategy strategy = new ServerIpActivationStrategy(); @Test public void shouldReturnFalseForEmptyIPlist() { FeatureUser user = new SimpleFeatureUser("ea", false); FeatureState state = new FeatureState(MyFeature.FEATURE).enable().setStrategyId(ServerIpActivationStrategy.ID); boolean active = strategy.isActive(state, user); assertEquals(false, active); } @Test public void shouldReturnTrueForFeatureOnCorrectMachine() { FeatureUser user = new SimpleFeatureUser("ea", false); FeatureState state = new FeatureState(MyFeature.FEATURE).enable().setStrategyId(ServerIpActivationStrategy.ID); state.setParameter(ServerIpActivationStrategy.PARAM_IPS, getMachineIP()); boolean active = strategy.isActive(state, user); assertEquals(true, active); } @Test public void shouldReturnFalseForFeatureOnOtherMachine() { FeatureUser user = new SimpleFeatureUser("ea", false); FeatureState state = new FeatureState(MyFeature.FEATURE).enable().setStrategyId(ServerIpActivationStrategy.ID); state.setParameter(ServerIpActivationStrategy.PARAM_IPS, "1.1.1.1"); boolean active = strategy.isActive(state, user); assertEquals(false, active); } @Test public void multipleMachineIps() { FeatureUser user = new SimpleFeatureUser("ea", false); FeatureState state = new FeatureState(MyFeature.FEATURE).enable().setStrategyId(ServerIpActivationStrategy.ID); state.setParameter(ServerIpActivationStrategy.PARAM_IPS, "1.1.1.1,2.2.2.2," + getMachineIP()); boolean active = strategy.isActive(state, user); assertEquals(true, active); } /** * Returns the first IP of the current machine */ private String getMachineIP() { try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); if (interfaces != null) { while (interfaces.hasMoreElements()) { Enumeration<InetAddress> addresses = interfaces.nextElement().getInetAddresses(); if (addresses != null) { while (addresses.hasMoreElements()) { String hostAddress = addresses.nextElement().getHostAddress(); if (hostAddress != null) { return hostAddress.trim(); } } } } } return null; } catch (SocketException e) { return "<no-ip>"; } } private enum MyFeature implements Feature { FEATURE } }