diff options
author | Christopher Baines <cb15g11@soton.ac.uk> | 2014-04-05 22:20:01 +0100 |
---|---|---|
committer | Christopher Baines <cb15g11@soton.ac.uk> | 2014-04-05 22:20:01 +0100 |
commit | ca371c8c818ff4c829337db876fdbe3df325d9a8 (patch) | |
tree | 482ec141dd89991265d5a8a93770fcf7479eb8de /networks/hs-intro-fail-3 | |
parent | f8203cfd8560478d13cf5ca8883faafd626ca998 (diff) | |
download | chutney-ca371c8c818ff4c829337db876fdbe3df325d9a8.tar chutney-ca371c8c818ff4c829337db876fdbe3df325d9a8.tar.gz |
Major changes to chutney
Diffstat (limited to 'networks/hs-intro-fail-3')
-rw-r--r-- | networks/hs-intro-fail-3 | 173 |
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)) |