package com.pugh.sockso.web; import com.pugh.sockso.Constants; import com.pugh.sockso.Options; import com.pugh.sockso.Properties; import com.pugh.sockso.StringProperties; import com.pugh.sockso.db.Database; import com.pugh.sockso.resources.Resources; import com.pugh.sockso.tests.MyHttpURLConnection; import com.pugh.sockso.tests.SocksoTestCase; import com.pugh.sockso.tests.TestOptionSet; import java.io.IOException; import java.net.HttpURLConnection; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; public class IpFinderTest extends SocksoTestCase { public void testIpDefaultsToLoopback() { final IpFinder f = new IpFinder( null, null ); assertEquals( IpFinder.LOOPBACK, f.getIp() ); } public void testGetIpFromProperties() { final Properties p = new StringProperties(); final IpFinder f = new IpFinder( p, null ); final String propertiesIp = "123.456.789.101"; p.set( Constants.SERVER_HOST_LAST_UPDATED, Long.toString(new Date().getTime()) ); p.set( Constants.SERVER_HOST, propertiesIp ); assertEquals( propertiesIp, f.getIpFromProperties() ); } public void testStaleIpInProperties() { final Properties p = new StringProperties(); final IpFinder f = new IpFinder( p, null ); final String propertiesIp = "123.456.789.101"; final String staleDate = Long.toString(new Date().getTime() - (Constants.SERVER_IP_TIMEOUT * 2)); p.set( Constants.SERVER_HOST_LAST_UPDATED, staleDate ); p.set( Constants.SERVER_HOST, propertiesIp ); assertNull( f.getIpFromProperties() ); } public void testGetIpFromOptions() { final TestOptionSet options = new TestOptionSet(); final StringProperties p = new StringProperties(); final String ip = "123.123.123.123"; final IpFinder f = new IpFinder( p, options ); options.addHas( Options.OPT_IP, ip ); assertEquals( ip, f.getIpFromOptions() ); } public void testGetIpFromOptionsNothingSpecified() { final TestOptionSet options = new TestOptionSet(); final StringProperties p = new StringProperties(); final String ip = "123.123.123.123"; final IpFinder f = new IpFinder( p, options ); assertNull( f.getIpFromOptions() ); } public void testGetIpFromIntranet() { // @TODO } public void testGetIpFromInternet() { // @TODO } public void testGetIpFromUrl() { final IpFinder f = new IpFinder( null, null ); // first try a failed connection boolean gotException = false; try { final HttpURLConnection cnn = new MyHttpURLConnection( null ); f.getIpFromUrl( cnn ); } catch ( final IOException e ) { gotException = true; } assertTrue( gotException ); // now try a good connection final String ip = "192.168.1.2"; gotException = false; try { final HttpURLConnection cnn = new MyHttpURLConnection( ip ); final String gotIp = f.getIpFromUrl( cnn ); assertEquals( ip, gotIp ); } catch ( final IOException e ) { gotException = true; } assertFalse( gotException ); } public void testIsValidIpFormat() { final IpFinder f = new IpFinder( null, null ); assertTrue( f.isValidIpFormat("123.456.789.123") ); assertTrue( f.isValidIpFormat("13.45.789.3") ); assertFalse( f.isValidIpFormat("www.google.com") ); } public void testSaveIpToProperties() { final StringProperties p = new StringProperties(); final IpFinder f = new IpFinder( p, null ); assertEquals( f.LOOPBACK, f.getIp() ); assertEquals( "", p.get(Constants.SERVER_HOST) ); assertEquals( "", p.get(Constants.SERVER_HOST_LAST_UPDATED) ); f.save(); assertEquals( f.LOOPBACK, p.get(Constants.SERVER_HOST) ); assertFalse( p.get(Constants.SERVER_HOST_LAST_UPDATED).equals("") ); } public void testUpdateForcesRegettingIpFromProperties() { final StringProperties p = new StringProperties(); final IpFinder f = new IpFinder( p, null ); final String firstIp = "123.123.123.123"; final String secondIp = "456.456.456.456"; p.set( Constants.SERVER_HOST_LAST_UPDATED, new Date().getTime() ); p.set( Constants.SERVER_HOST, firstIp ); f.update(); assertEquals( firstIp, f.getIp() ); p.set( Constants.SERVER_HOST, secondIp ); f.update(); assertEquals( secondIp, f.getIp() ); } public void testRefreshClearsCacheFirst() { final StringProperties p = new StringProperties(); final IpFinder f = new IpFinder( p, null ); final String startTime = Long.toString( new Date().getTime() ); p.set( Constants.SERVER_HOST_LAST_UPDATED, startTime ); f.refresh(); assertFalse( p.get(Constants.SERVER_HOST_LAST_UPDATED).equals(startTime) ); } }