package com.pugh.sockso;
import com.pugh.sockso.tests.MyHttpURLConnection;
import com.pugh.sockso.tests.SocksoTestCase;
import java.net.HttpURLConnection;
public class CommunityUpdaterTest extends SocksoTestCase {
private CommunityUpdater cu;
private Properties p;
private String key;
@Override
public void setUp() {
p = new StringProperties();
p.set( Constants.COMMUNITY_ENABLED, p.YES );
cu = new MyCommunityUpdater( p );
key = Utils.getRandomString( 32 );
}
public void testServerKeyIsGeneratedIfThereIsntOneAlready() {
cu.check();
assertNotNull( p.get(Constants.SERVER_KEY,null) );
}
public void testGeneratedServerKeyIs32CharsLong() {
cu.check();
assertEquals( p.get(Constants.SERVER_KEY).length(), 32 );
}
public void testServerKeyIsNotChangedWhenItAlreadyExists() {
p.set( Constants.SERVER_KEY, key );
cu.check();
assertEquals( key, p.get(Constants.SERVER_KEY) );
}
public void testRequiredInfoIsSentViaJsonWithPing() throws Exception {
p.set( Constants.SERVER_KEY, key );
p.set( Constants.SERVER_PORT, 1234 );
p.set( Constants.SERVER_BASE_PATH, "/foo" );
cu.check();
String json = cu.getUrlConnection( "" )
.getOutputStream()
.toString();
assertContains( json, "skey" );
assertContains( json, key );
assertContains( json, "port" );
assertContains( json, "1234" );
assertContains( json, "basepath" );
assertContains( json, "/foo" );
}
public void testPingUrlDefaultsToPublicWebsite() {
assertContains( cu.getPingUrl(), Constants.WEBSITE_URL );
}
public void testPingUrlCanBeSetViaProperty() throws Exception {
String url = "http://foo.com/ping";
p.set( Constants.COMMUNITY_PING_URL, url );
assertEquals( url, cu.getPingUrl() );
}
}
class MyCommunityUpdater extends CommunityUpdater {
private MyHttpURLConnection urlCnn;
public MyCommunityUpdater( Properties p ) {
super( p );
}
@Override
protected HttpURLConnection getUrlConnection( final String url ) {
if ( urlCnn == null ) {
urlCnn = new MyHttpURLConnection( "ok" );
}
return urlCnn;
}
}