Skip to content
Snippets Groups Projects
Commit 5656dc8d authored by akwizgran's avatar akwizgran
Browse files

Another unit test for the Tor plugin.

parent fbf5c78f
No related tags found
No related merge requests found
...@@ -26,7 +26,6 @@ import org.silvertunnel.netlib.api.util.TcpipNetAddress; ...@@ -26,7 +26,6 @@ import org.silvertunnel.netlib.api.util.TcpipNetAddress;
import org.silvertunnel.netlib.layer.tor.TorHiddenServicePortPrivateNetAddress; import org.silvertunnel.netlib.layer.tor.TorHiddenServicePortPrivateNetAddress;
import org.silvertunnel.netlib.layer.tor.TorHiddenServicePrivateNetAddress; import org.silvertunnel.netlib.layer.tor.TorHiddenServicePrivateNetAddress;
import org.silvertunnel.netlib.layer.tor.TorNetLayerUtil; import org.silvertunnel.netlib.layer.tor.TorNetLayerUtil;
import org.silvertunnel.netlib.layer.tor.TorNetServerSocket;
import org.silvertunnel.netlib.layer.tor.util.Encryption; import org.silvertunnel.netlib.layer.tor.util.Encryption;
import org.silvertunnel.netlib.layer.tor.util.RSAKeyPair; import org.silvertunnel.netlib.layer.tor.util.RSAKeyPair;
...@@ -94,9 +93,9 @@ class TorPlugin implements DuplexPlugin { ...@@ -94,9 +93,9 @@ class TorPlugin implements DuplexPlugin {
NetLayer nl = netFactory.getNetLayerById(NetLayerIDs.TOR); NetLayer nl = netFactory.getNetLayerById(NetLayerIDs.TOR);
nl.waitUntilReady(); nl.waitUntilReady();
// Publish the hidden service // Publish the hidden service
TorNetServerSocket ss; NetServerSocket ss;
try { try {
ss = (TorNetServerSocket) nl.createNetServerSocket(null, addrPort); ss = nl.createNetServerSocket(null, addrPort);
} catch(IOException e) { } catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
return; return;
......
...@@ -49,6 +49,37 @@ public class TorPluginTest extends BriarTestCase { ...@@ -49,6 +49,37 @@ public class TorPluginTest extends BriarTestCase {
clientPlugin.stop(); clientPlugin.stop();
} }
@Test
public void testStoreAndRetrievePrivateKey() throws Exception {
Executor e = Executors.newCachedThreadPool();
// Start a plugin instance with no private key
Callback callback = new Callback();
TorPlugin plugin = new TorPlugin(e, callback, 0L);
plugin.start();
// The plugin should create a hidden service... eventually
callback.latch.await(5, TimeUnit.MINUTES);
String onion = callback.local.get("onion");
assertNotNull(onion);
assertTrue(onion.endsWith(".onion"));
// Get the PEM-encoded private key and stop the plugin
String privateKey = callback.config.get("privateKey");
assertNotNull(privateKey);
plugin.stop();
// Start another instance, reusing the private key
callback = new Callback();
callback.config.put("privateKey", privateKey);
plugin = new TorPlugin(e, callback, 0L);
plugin.start();
// The plugin should create a hidden service... eventually
callback.latch.await(5, TimeUnit.MINUTES);
// The onion URL should be the same
assertEquals(onion, callback.local.get("onion"));
// The private key should be the same
assertEquals(privateKey, callback.config.get("privateKey"));
// Stop the plugin
plugin.stop();
}
private static class Callback implements DuplexPluginCallback { private static class Callback implements DuplexPluginCallback {
private final Map<ContactId, TransportProperties> remote = private final Map<ContactId, TransportProperties> remote =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment