package com.subgraph.orchid; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; import com.subgraph.orchid.circuits.hs.HSDescriptorCookie; import com.subgraph.orchid.config.TorConfigBridgeLine; import com.subgraph.orchid.data.HexDigest; import com.subgraph.orchid.data.IPv4Address; import com.subgraph.orchid.encoders.Hex; public class TorConfigTest { private TorConfig config; @Before public void setup() { config = Tor.createConfig(); } @Test public void testCircuitBuildTimeout() { final long timeout = config.getCircuitBuildTimeout(); assertEquals(TimeUnit.MILLISECONDS.convert(60, TimeUnit.SECONDS), timeout); config.setCircuitBuildTimeout(2, TimeUnit.MINUTES); assertTrue(config.getCircuitBuildTimeout() > timeout); } @Test public void testDataDirectory() { final File dd = config.getDataDirectory(); assertTrue(dd.getPath().charAt(0) != '~'); final String testPath = "/foo/dir"; config.setDataDirectory(new File(testPath)); assertEquals(new File(testPath), config.getDataDirectory()); } @Test public void testMaxCircuitsPending() { assertEquals(32, config.getMaxClientCircuitsPending()); config.setMaxClientCircuitsPending(23); assertEquals(23, config.getMaxClientCircuitsPending()); } @Test public void testEnforceDistinctSubnets() { assertEquals(true, config.getEnforceDistinctSubnets()); config.setEnforceDistinctSubnets(false); assertEquals(false, config.getEnforceDistinctSubnets()); } @Test public void testCircuitStreamTimeout() { assertEquals(0, config.getCircuitStreamTimeout()); config.setCircuitStreamTimeout(30, TimeUnit.SECONDS); assertEquals(30 * 1000, config.getCircuitStreamTimeout()); } @Test public void testHidServAuth() { final String address = "3t43tfluce4qcxbo"; final String onion = address + ".onion"; final String hex = "022b99d1d272285c80f7214bd6c07c27"; final String descriptor = "AiuZ0dJyKFyA9yFL1sB8Jw"; assertNull(config.getHidServAuth(onion)); config.addHidServAuth(onion, descriptor); HSDescriptorCookie cookie = config.getHidServAuth(onion); assertNotNull(cookie); assertEquals(hex, new String(Hex.encode(cookie.getValue()))); assertSame(cookie, config.getHidServAuth(address)); } @Test public void testAutoBool() { assertEquals(TorConfig.AutoBoolValue.AUTO, config.getUseNTorHandshake()); config.setUseNTorHandshake(TorConfig.AutoBoolValue.TRUE); assertEquals(TorConfig.AutoBoolValue.TRUE, config.getUseNTorHandshake()); config.setUseNTorHandshake(TorConfig.AutoBoolValue.AUTO); assertEquals(TorConfig.AutoBoolValue.AUTO, config.getUseNTorHandshake()); } @Test public void testBridges() { final IPv4Address a1 = IPv4Address.createFromString("1.2.3.4"); final IPv4Address a2 = IPv4Address.createFromString("4.4.4.4"); final HexDigest fp = HexDigest.createFromString("0EA20CAA3CE696E561BC08B15E00106700E8F682"); config.addBridge(a1, 88); config.addBridge(a2, 101, fp); List<TorConfigBridgeLine> bs = config.getBridges(); assertEquals(2, bs.size()); final TorConfigBridgeLine b1 = bs.get(0); final TorConfigBridgeLine b2 = bs.get(1); assertEquals(a1, b1.getAddress()); assertEquals(a2, b2.getAddress()); assertEquals(88, b1.getPort()); assertEquals(101, b2.getPort()); assertNull(b1.getFingerprint()); assertSame(b2.getFingerprint(), fp); } }