package edu.sc.seis.sod.subsetter.station;
import java.util.List;
import junit.framework.TestCase;
import edu.iris.Fissures.IfNetwork.NetworkNotFound;
import edu.iris.Fissures.model.TimeInterval;
import edu.iris.Fissures.model.UnitImpl;
import edu.iris.Fissures.network.NetworkAttrImpl;
import edu.iris.Fissures.network.StationImpl;
import edu.sc.seis.fissuresUtil.cache.CacheNetworkAccess;
import edu.sc.seis.fissuresUtil.cache.VestingNetworkDC;
import edu.sc.seis.fissuresUtil.mockFissures.IfNetwork.MockNetworkAttr;
import edu.sc.seis.fissuresUtil.mockFissures.IfNetwork.MockStation;
import edu.sc.seis.fissuresUtil.mockFissures.IfNetwork.NamedNetDC;
import edu.sc.seis.fissuresUtil.namingService.FissuresNamingService;
import edu.sc.seis.sod.UserConfigurationException;
import edu.sc.seis.sod.mock.MockNetworkSource;
import edu.sc.seis.sod.source.network.NetworkFinder;
public class BelongsToVirtualTest extends TestCase {
private final class ExplodesOnRetByName extends NetworkFinder {
public ExplodesOnRetByName() {
super(FissuresNamingService.MOCK_DNS, NamedNetDC.EVERYBODY, 1);
this.netDC = new VestingNetworkDC(FissuresNamingService.MOCK_DNS, NamedNetDC.EVERYBODY, new FissuresNamingService());
}
@Override
public List<CacheNetworkAccess> getNetworkByName(String name)
throws NetworkNotFound {
throw new NetworkNotFound("You lose!");
}
}
private final class CountRetrieveStations extends MockNetworkSource {
public int callCount;
@Override
public List<? extends StationImpl> getStations(NetworkAttrImpl net) {
callCount++;
return super.getStations(net);
}
}
private static final TimeInterval FORTNIGHT = new TimeInterval(1,
UnitImpl.FORTNIGHT);
private static String mockNetName = MockNetworkAttr.createMultiSplendoredAttr().getName();
public void testRefresh() throws Exception {
CountRetrieveStations na = new CountRetrieveStations();
BelongsToVirtual btv = new BelongsToVirtual(mockNetName, FORTNIGHT);
btv.accept(MockStation.createStation(), na);
assertEquals(1, na.callCount);
btv.accept(MockStation.createStation(), na);
assertEquals(1, na.callCount);
}
public void testZeroRefreshTime() throws InterruptedException, Exception {
CountRetrieveStations na = new CountRetrieveStations();
BelongsToVirtual btv = new BelongsToVirtual(mockNetName,
new TimeInterval(0,
UnitImpl.SECOND));
btv.accept(MockStation.createStation(), na);
assertEquals(1, na.callCount);
Thread.sleep(1);
btv.accept(MockStation.createStation(), na);
assertEquals(2, na.callCount);
}
public void testAcceptsAllStationsInAssignedNetwork() throws Exception {
CountRetrieveStations na = new CountRetrieveStations();
BelongsToVirtual btv = new BelongsToVirtual(mockNetName, FORTNIGHT);
List<? extends StationImpl> stations = na.getStations(MockNetworkAttr.createMultiSplendoredAttr());
for (StationImpl sta : stations) {
assertTrue(btv.accept(sta, na).isSuccess());
}
}
public void testStationsNotInNetwork() throws Exception {
CountRetrieveStations na = new CountRetrieveStations();
BelongsToVirtual btv = new BelongsToVirtual(mockNetName, FORTNIGHT);
assertFalse(btv.accept(MockStation.createStation(), na).isSuccess());
assertFalse(btv.accept(MockStation.createOtherStation(), na).isSuccess());
}
public void testBadVirtualName() throws Exception {
try {
ExplodesOnRetByName na = new ExplodesOnRetByName();
BelongsToVirtual btv = new BelongsToVirtual(mockNetName, FORTNIGHT);
btv.accept(MockStation.createStation(), na);
fail();
} catch(UserConfigurationException uce) {
assertTrue(true);
}
}
}