aboutsummaryrefslogtreecommitdiff
path: root/networks/hs-intro-fail-3
diff options
context:
space:
mode:
Diffstat (limited to 'networks/hs-intro-fail-3')
-rw-r--r--networks/hs-intro-fail-3173
1 files changed, 16 insertions, 157 deletions
diff --git a/networks/hs-intro-fail-3 b/networks/hs-intro-fail-3
index 0e1b95c..fa4dc7e 100644
--- a/networks/hs-intro-fail-3
+++ b/networks/hs-intro-fail-3
@@ -1,177 +1,36 @@
-from chutney.Testing import *
+from hs_intro_fail import *
-authority_nodes = Node.create(3, {
+network = Network()
+
+hs_nodes, hs_servers = testing.create_hidden_service(3)
+
+network.add(hs_nodes);
+
+network.add(Node.create(3, {
"tag": "a",
"authority": 1,
"relay": 1,
"torrc": "authority.tmpl"
-})
-
-# hidden service (hs) nodes
-hs_nodes = []
-
-hs_servers = []
-
-from twisted.web import server, resource
-from twisted.internet import reactor
-
-# Use twisted to create web servers in this script
-class Site(resource.Resource):
- isLeaf = True
- numberRequests = 0
-
- def __init__(self, siteNum):
- self.siteNum = siteNum
-
- def render_GET(self, request):
- self.numberRequests += 1
- request.setHeader("content-type", "text/plain")
- return str(self.siteNum)
-
-base_port = 10080
-for i in range(3):
-
- port = base_port + i
-
- node = Node(
- tag="h",
- hiddenservice=1,
- torrc="hidden-service.tmpl",
- hiddenservicetarget="127.0.0.1:%i" % port
- )
- hs_nodes.append(node)
-
- site = server.Site(Site(i))
-
- s = reactor.listenTCP(port, site)
- hs_servers.append(s)
+}))
- port += 1
-
-client_nodes = Node.create(12, {
+network.add(Node.create(12, {
"tag": "c",
"torrc": "client.tmpl"
-})
+}))
-relay_nodes = Node.create(10, {
+network.add(Node.create(10, {
"tag": "r",
"relay": 1,
"torrc": "intro.tmpl"
-})
-
-thread.start_new_thread(reactor.run, (), {"installSignalHandlers": 0})
-
-initial_nodes = authority_nodes + relay_nodes + client_nodes + hs_nodes[:1]
+}))
def start():
- if not all([ n.getController().start() for n in initial_nodes ]):
- return False
-
- logging.info("All initial nodes running")
-
- nodes_by_fingerprint = get_node_fingerprints(authority_nodes + relay_nodes)
-
- track_introduction_points(hs_nodes[0])
-
- node_0_published_descriptor = threading.Event()
-
- def hs_node_0_listener(logevent):
- if "Successfully uploaded v2 rend descriptors" in logevent.message:
- node_0_published_descriptor.set()
-
-
- hs_nodes[0].getStemController().add_event_listener(hs_node_0_listener, EventType.INFO)
-
- node_0_published_descriptor.wait()
-
- hs_nodes[0].getStemController().remove_event_listener(hs_node_0_listener)
-
- # list to cope with scope problems
- node_counter = [len(hs_nodes) - 1]
- node_counter_lock = threading.RLock()
-
- nodes_published_descriptors = threading.Event()
-
- def hs_node_listener(logevent):
- if "Successfully uploaded v2 rend descriptors" in logevent.message:
- with node_counter_lock:
- node_counter[0] -= 1
-
- if node_counter[0] == 0:
- nodes_published_descriptors.set()
-
- for node in hs_nodes[1:]:
- node.getController().start()
- track_introduction_points(node)
-
- node.getStemController().add_event_listener(hs_node_listener, EventType.INFO)
-
- nodes_published_descriptors.wait()
-
- for node in hs_nodes[1:]:
- node.getStemController().remove_event_listener(hs_node_listener)
-
- test_intro_failure(nodes_by_fingerprint)
-
-def test_intro_failure(nodes_by_fingerprint):
- connection_test()
-
- time.sleep(5)
-
- # Select a random node that is being used as an introduction point
- nodenum = random.choice(node_intro_circuits.keys())
- fingerprint = random.choice(node_intro_circuits[nodenum].values())
-
- node = nodes_by_fingerprint[fingerprint]
-
- logging.info("stopping " + node._env["nick"] + " (" + fingerprint + ")")
-
- node.getStemController().close()
- node.getController().stop()
-
- logging.info("begining to watch for the establishment of new introduction points")
-
- changed = [False for n in hs_nodes]
-
- intro_points_before = [set(node_intro_circuits[n._env["nodenum"]].values()) for n in hs_nodes]
-
- time.sleep(20)
-
- intro_points_after = [set(node_intro_circuits[n._env["nodenum"]].values()) for n in hs_nodes]
-
- for i, node in enumerate(hs_nodes):
- before = intro_points_before[i]
- after = intro_points_after[i]
-
- if before != after:
- changed[i] = True
-
- if all(changed):
- logging.info("All changed")
- else:
- logging.info("All did not change")
-
- check_same_intro_points()
-
- connection_test()
+ results = hs_fail_test(network)
for server in hs_servers:
server.stopListening()
- reactor.stop()
-
- stop()
-
-def connection_test():
- logging.info("connecting to clients")
- responses = {"0": 0, "1": 0, "2": 0}
-
- for c in client_nodes:
- result = c.query("http://2oiifbe3wne4iaqb.onion/");
+ network.stop()
- if result in responses:
- responses[result] += 1
- else:
- logging.info("Unknown response: " + str(result))
+ return results
- logging.info(str(responses))