[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [chutney/master] Add minimal mixed tor version networks
commit a5dc7bcf871b851d05432f01375338682c20d0dd
Author: teor <teor2345@xxxxxxxxx>
Date: Thu Aug 18 15:18:32 2016 +1000
Add minimal mixed tor version networks
These networks attempt to have an even split of Tor versions.
When that's not possible, they choose the final one at random.
This means they need multiple verifies to cover all possible
version combinations.
Assists in testing Tor ticket #19163.
---
networks/basic-min-mixed | 47 +++++++++++++++++++++++++++++++++++++
networks/hs-min-mixed | 61 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 108 insertions(+)
diff --git a/networks/basic-min-mixed b/networks/basic-min-mixed
new file mode 100644
index 0000000..5ae7bd5
--- /dev/null
+++ b/networks/basic-min-mixed
@@ -0,0 +1,47 @@
+# This network generates a random mix of tor versions each time it is run
+# You'll need at least 4 runs to cover all possibilities
+
+import random
+rng = random.SystemRandom()
+
+# We have to use the same tags for old and new versions, otherwise switching
+# between them at random does not work
+OLD_TOR="tor-stable"
+
+# By default, Authorities are not configured as exits
+Authority = Node(tag="a", authority=1, relay=1, torrc="authority.tmpl")
+OldAuthority = Node(tag="a", authority=1, relay=1, torrc="authority.tmpl",
+ tor=OLD_TOR)
+
+ExitRelay = Node(tag="r", relay=1, exit=1, torrc="relay.tmpl")
+OldExitRelay = Node(tag="r", relay=1, exit=1, torrc="relay.tmpl",
+ tor=OLD_TOR)
+
+Client = Node(tag="c", torrc="client.tmpl")
+OldClient = Node(tag="c", torrc="client.tmpl", tor=OLD_TOR)
+
+# Choose old or new Exit and Client at random
+OldNewExitRelay = rng.choice([OldExitRelay, ExitRelay])
+OldNewClient = rng.choice([OldClient, Client])
+
+def version(node):
+ if node._env["tor"] == Authority._env["tor"]:
+ return "new"
+ elif node._env["tor"] == OldAuthority._env["tor"]:
+ return "old"
+ else:
+ return "unk"
+
+# Every time chutney takes an action, it will pick versions at random
+# It will likely choose different versions for each action
+# This could be confusing, so log a message each time
+print("Chose 1 %s authority, 1 %s authority, 1 %s exit and 1 %s client"
+ % (version(Authority),
+ version(OldAuthority),
+ version(OldNewExitRelay),
+ version(OldNewClient)))
+
+# The minimum number of authorities/relays/exits is 3, the minimum path length
+NODES = Authority.getN(1) + OldAuthority.getN(1) + OldExitRelay.getN(1) + OldClient.getN(1)
+
+ConfigureNodes(NODES)
diff --git a/networks/hs-min-mixed b/networks/hs-min-mixed
new file mode 100644
index 0000000..8de3825
--- /dev/null
+++ b/networks/hs-min-mixed
@@ -0,0 +1,61 @@
+# This network generates a random mix of tor versions each time it is run
+# You'll need at least 8 runs to cover all possibilities
+
+import random
+rng = random.SystemRandom()
+
+# We have to use the same tags for old and new versions, otherwise switching
+# between them at random does not work
+OLD_TOR="tor-stable"
+
+# By default, Authorities are not configured as exits
+Authority = Node(tag="a", authority=1, relay=1, torrc="authority.tmpl")
+OldAuthority = Node(tag="a", authority=1, relay=1, torrc="authority.tmpl",
+ tor=OLD_TOR)
+
+NonExitRelay = Node(tag="r", relay=1, torrc="relay-non-exit.tmpl")
+OldNonExitRelay = Node(tag="r", relay=1, torrc="relay-non-exit.tmpl",
+ tor=OLD_TOR)
+
+Client = Node(tag="c", torrc="client.tmpl")
+OldClient = Node(tag="c", torrc="client.tmpl", tor=OLD_TOR)
+
+HS = Node(tag="h", hs=1, torrc="hs.tmpl")
+OldHS = Node(tag="h", hs=1, torrc="hs.tmpl", tor=OLD_TOR)
+
+# Choose old or new Relay, Client, and HS at random
+OldNewNonExitRelay = rng.choice([OldNonExitRelay, NonExitRelay])
+OldNewClient = rng.choice([OldClient, Client])
+OldNewHS = rng.choice([OldHS, HS])
+
+def version(node):
+ if node._env["tor"] == Authority._env["tor"]:
+ return "new"
+ elif node._env["tor"] == OldAuthority._env["tor"]:
+ return "old"
+ else:
+ return "unk"
+
+# Every time chutney takes an action, it will pick versions at random
+# It will likely choose different versions for each action
+# This could be confusing, so log a message each time
+print(("Chose 1 %s authority, 1 %s authority, %d %s non-exit relay, " +
+ "%d %s non-exit relay, 1 %s client and 1 %s hidden service")
+ % (version(Authority),
+ version(OldAuthority),
+ 2 if OldNewNonExitRelay == NonExitRelay else 1,
+ version(NonExitRelay),
+ 2 if OldNewNonExitRelay == OldNonExitRelay else 1,
+ version(OldNonExitRelay),
+ version(OldNewClient),
+ version(OldNewHS)))
+
+# A hidden service needs 5 authorities/relays to ensure it can build HS
+# connections:
+# a minimum path length of 3, plus the client-nominated rendezvous point,
+# plus a seperate introduction point
+NODES = Authority.getN(1) + OldAuthority.getN(1) + NonExitRelay.getN(1) + \
+ OldNonExitRelay.getN(1) + OldNewNonExitRelay.getN(1) + \
+ OldNewClient.getN(1) + OldNewHS.getN(1)
+
+ConfigureNodes(NODES)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits