aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <cb15g11@soton.ac.uk>2014-04-09 21:51:06 +0100
committerChristopher Baines <cb15g11@soton.ac.uk>2014-04-09 21:51:06 +0100
commitd753b9994986c4a19d60bfe6c49609eb13d7ca7c (patch)
treebb8c9c7ff1ab3ba73b32527a814f7898c09ba567
parentca371c8c818ff4c829337db876fdbe3df325d9a8 (diff)
downloadchutney-d753b9994986c4a19d60bfe6c49609eb13d7ca7c.tar
chutney-d753b9994986c4a19d60bfe6c49609eb13d7ca7c.tar.gz
Better tests
-rw-r--r--lib/chutney/Testing.py57
-rw-r--r--lib/chutney/TorNet.py13
-rw-r--r--networks/hidden-service103
3 files changed, 31 insertions, 142 deletions
diff --git a/lib/chutney/Testing.py b/lib/chutney/Testing.py
index 396b949..369d260 100644
--- a/lib/chutney/Testing.py
+++ b/lib/chutney/Testing.py
@@ -49,29 +49,6 @@ def track_introduction_points(node):
node_intro_events[nodenum].put(("added", fingerprint))
- """prefix = "rend_services_introduce(): Giving up on "
- if logevent.message.startswith(prefix) or "Giving up on" in logevent.message:
- fingerprint = logevent.message[len(prefix):].split(" ")[0][1:41]
-
- for_deletion = []
-
- for circuit, fp in node_intro_circuits[nodenum].iteritems():
- #log("circuit " + str(circuit) + " fp " + str(fp))
- if fingerprint == fp:
- for_deletion.append(circuit)
-
- if len(for_deletion) == 0:
- logging.info("got log message " + logevent.message + " but not deleting an introduction point")
-
- for circuit in for_deletion:
- fingerprint = node_intro_circuits[nodenum][circuit]
-
- removed_intro_node = nodes_by_fingerprint[fingerprint]
-
- logging.info("%s: removed %s (%s)" % (nodenick, removed_intro_node._env["nick"], fingerprint))
-
- node_intro_events[nodenum].put(("removed", fingerprint))
- del node_intro_circuits[nodenum][circuit]"""
prefix = "rend_services_introduce(): Circuit to "
if logevent.message.startswith(prefix) and "disapeared" in logevent.message:
fingerprint = logevent.message[len(prefix):].split(" ")[0][1:41]
@@ -217,20 +194,26 @@ def check_same_intro_points():
for introduction_points in node_intro_circuits.values():
intro_sets.append(set(introduction_points.values()))
- if intro_sets[0].issubset(intro_sets[1]) and intro_sets[1].issubset(intro_sets[0]):
- logging.info("Same introduction points")
- for fingerprint in node_intro_circuits.values()[0].values():
- node = nodes_by_fingerprint[fingerprint]
- logging.info(" - " + node._env["nick"] + "(" + fingerprint + ")")
+ if len(intro_sets) == 1:
+ logging.info("Only one node, so trivially the same introduction points")
return True
- else:
- logging.info("Not the same introduction points")
- for num, circuits in node_intro_circuits.items():
- logging.info("node %i" % num)
- for fingerprint in sorted(circuits.values()):
- node = nodes_by_fingerprint[fingerprint]
- logging.info(" - " + node._env["nick"] + "(" + fingerprint + ")")
- return False
+
+ for i in range(len(intro_sets) - 1):
+ if not (intro_sets[i].issubset(intro_sets[i + 1]) and
+ intro_sets[i + 1].issubset(intro_sets[i])):
+ logging.info("Not the same introduction points")
+ for num, circuits in node_intro_circuits.items():
+ logging.info("node %i" % num)
+ for fingerprint in sorted(circuits.values()):
+ node = nodes_by_fingerprint[fingerprint]
+ logging.info(" - " + node._env["nick"] + "(" + fingerprint + ")")
+ return False
+
+ logging.info("Same introduction points")
+ for fingerprint in node_intro_circuits.values()[0].values():
+ node = nodes_by_fingerprint[fingerprint]
+ logging.info(" - " + node._env["nick"] + "(" + fingerprint + ")")
+ return True
def create_hidden_service(nodes):
hs_nodes = []
@@ -250,7 +233,7 @@ def create_hidden_service(nodes):
return str(self.siteNum)
base_port = 10080
- for i in range(2):
+ for i in range(nodes):
port = base_port + i
diff --git a/lib/chutney/TorNet.py b/lib/chutney/TorNet.py
index 82a5fc0..1c626ba 100644
--- a/lib/chutney/TorNet.py
+++ b/lib/chutney/TorNet.py
@@ -624,7 +624,17 @@ class Network(list):
"""A network of Tor nodes, plus functions to manipulate them
"""
def __init__(self, defaultEnviron=_BASE_ENVIRON):
+ """if name:
+ environ = chutney.Templating.Environ(parent=defaultEnviron)
+
+ print("Using name %s" % name)
+
+ environ["net_base_dir"] = os.path.join(environ["net_base_dir"], name)
+
+ self._dfltEnv = environ
+ else:"""
self._dfltEnv = defaultEnviron
+
self._nextnodenum = 0
def get(self, tag):
@@ -754,8 +764,7 @@ def usage(network):
" ".join(x for x in dir(network) if not x.startswith("_")))])
def runConfigFile(verb, f):
- _GLOBALS = dict(_BASE_ENVIRON=_BASE_ENVIRON,
- Node=Node,
+ _GLOBALS = dict(Node=Node,
EventType=stem.control.EventType,
time=time,
thread=thread,
diff --git a/networks/hidden-service b/networks/hidden-service
deleted file mode 100644
index e25a224..0000000
--- a/networks/hidden-service
+++ /dev/null
@@ -1,103 +0,0 @@
-Authority = Node.create(3, {
- "tag": "a",
- "authority": 1,
- "relay": 1,
- "torrc": "authority.tmpl"
-})
-
-Relay = Node.create(5, {
- "tag": "r",
- "relay": 1,
- "torrc": "intro.tmpl"
-})
-
-Client = Node.create(4, {
- "tag": "c",
- "torrc": "client.tmpl"
-})
-
-initialNodes = Authority + Relay + Client
-
-HiddenService = Node(
- tag="h",
- hiddenservice=1,
- torrc="hidden-service.tmpl",
- hiddenservicetarget="127.0.0.1:8081"
-)
-
-initialNodes.append(HiddenService)
-
-DelayedHiddenService = Node(
- tag="h",
- hiddenservice=1,
- torrc="hidden-service.tmpl",
- hiddenservicetarget="127.0.0.1:8082"
-)
-
-# 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)
-
-def start_test():
- print("Starting test")
-
- port8081 = reactor.listenTCP(8081, server.Site(Site(1)))
- port8082 = reactor.listenTCP(8082, server.Site(Site(2)))
-
- def cleanup():
- port8081.stopListening()
- print("stopped 8081")
- port8082.stopListening()
- print("stopped 8082")
- reactor.stop()
- print("stopped the reactor")
-
- def test():
- print("connecting to clients")
- responses = {"1": 0, "2": 0}
-
- for c in Client:
- result = c.query("http://2oiifbe3wne4iaqb.onion/");
-
- responses[result] += 1
-
- print(result)
-
- print(responses)
- cleanup()
-
- thread.start_new_thread(test, ())
-
- print("running reactor")
- reactor.run(installSignalHandlers=0)
-
-def start():
- print("Starting hidden service test")
-
- if not all([ n.getController().start() for n in initialNodes ]):
- return False
- else:
- print("All initial nodes running")
-
- def start_listener(logevent):
- # Probably after what needs waiting for
- if "Successfully uploaded v2 rend descriptors" in logevent.message:
- start_test()
-
- def log_listener(logevent):
- if "Successfully uploaded v2 rend descriptors" in logevent.message:
- print("log message: " + logevent.message)
- DelayedHiddenService.getController().start()
-
- DelayedHiddenService.getStemController().add_event_listener(start_listener, EventType.INFO)
-
- HiddenService.getStemController().add_event_listener(log_listener, EventType.INFO)