aboutsummaryrefslogtreecommitdiff
path: root/networks/hs_round_robin.py
blob: 5703f937c8434eebd2b494b18b49f759457ac0ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
nodes_by_fingerprint = {}

#{ nodenum: { circuit: "fingerprint", circuit: "fingerprint" } }

# Introduction Point Tracking

node_intro_circuits = {}

node_intro_events = {}

introduction_point_circuits = {}

def start_test():
    log("Starting test")

    port8081 = reactor.listenTCP(8081, server.Site(Site(1)))
    port8082 = reactor.listenTCP(8082, server.Site(Site(2)))

    def cleanup():
        port8081.stopListening()
        log("stopped 8081")
        port8082.stopListening()
        log("stopped 8082")
        reactor.stop()
        log("stopped the reactor")

    def connection_test():
        log("connecting to clients")
        responses = {"1": 0, "2": 0}

        for c in Client:
            result = c.query("http://2oiifbe3wne4iaqb.onion/");

            if result in responses:
                responses[result] += 1
            else:
                log("Unknown response:")

        log(responses)

    def test():
        connection_test()

        connection_test()

        cleanup()

        stop()

    thread.start_new_thread(test, ())

def start():
    log("Starting round robin test")

    if not all([ n.getController().start() for n in initial_nodes ]):
        return False

    log("All initial nodes running")

    for node in Authority + Relay:
        fingerprint = node.getStemController().get_info("fingerprint")
        nodes_by_fingerprint[fingerprint] = node

        track_introduction_point(node)

    track_hs_node(hs_node_1)

    def log_listener(logevent):
        if "Successfully uploaded v2 rend descriptors" in logevent.message:
            hs_node_1.getStemController().remove_event_listener(log_listener)

            def start_listener(logevent):

                # Probably after what needs waiting for
                if "Successfully uploaded v2 rend descriptors" in logevent.message:
                    hs_node_2.getStemController().remove_event_listener(start_listener)

                    if check_same_intro_points():
                        thread.start_new_thread(start_test, ())
                        log("finished running start_test in another thread")

            hs_node_2.getController().start()

            track_hs_node(hs_node_2)

            hs_node_2.getStemController().add_event_listener(start_listener, EventType.INFO)

    hs_node_1.getStemController().add_event_listener(log_listener, EventType.INFO)