summaryrefslogtreecommitdiff
path: root/test/attach.et
blob: ae000480de1b2a295dd9642b03296857177e0d9c (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
module attach

import common

test Attach:
    let services = "attach,sync"

    spawn as p1
    spawn as p2
    send "create-identity Device1 Owner" to p1
    send "create-identity Device2" to p2
    send "watch-local-identity" to p1
    send "watch-local-identity" to p2
    send "start-server services $services" to p1
    send "start-server services $services" to p2
    expect from p1:
        /local-identity Device1 Owner/
        /peer 1 addr ${p2.node.ip} 29665/
        /peer 1 id Device2/
    expect from p2:
        /local-identity Device2/
        /peer 1 addr ${p1.node.ip} 29665/
        /peer 1 id Device1 Owner/

    send "attach-to 1" to p2
    expect /attach-request 1 .*/ from p1
    expect /attach-response 1 .*/ from p2
    send "attach-reject 1" to p1
    expect /attach-request-failed 1 user/ from p1
    expect /attach-response-failed 1 rejected/ from p2

    send "attach-to 1" to p2
    expect /attach-request 1 .*/ from p1
    expect /attach-response 1 .*/ from p2
    send "attach-reject 1" to p2
    expect /attach-request-failed 1 rejected/ from p1
    expect /attach-response-failed 1 user/ from p2

    send "attach-to 1" to p2
    expect /attach-request 1 ([0-9]*)/ from p1 capture code1
    expect /attach-response 1 ([0-9]*)/ from p2 capture code2
    guard (code1 == code2)

    send "attach-accept 1" to p1
    send "attach-accept 1" to p2
    expect /attach-request-done 1/ from p1
    expect /attach-response-done 1/ from p2
    expect /local-identity Device2 Owner/ from p2
    expect /peer 1 id Device2 Owner/ from p1


test SyncAfterAttach:
    let services_1 = "attach"
    let services_2 = "discovery,sync"
    let services_d = "discovery"

    subnet sd
    subnet s1
    subnet s2
    subnet s3

    node nd on sd
    node n1 on s1
    node n2 on s2
    node n3 on s3

    local:
        spawn as pd on nd
        spawn as p1 on n1
        spawn as p2 on n2
        spawn as p3 on n3

        send "create-identity Discovery" to pd
        send "create-identity Device1 Owner" to p1
        send "create-identity Device2" to p2
        send "create-identity Device3" to p3

        expect /create-identity-done ref $refpat.*/ from pd
        expect /create-identity-done ref $refpat.*/ from p1
        expect /create-identity-done ref $refpat.*/ from p2
        expect /create-identity-done ref $refpat.*/ from p3

        send "start-server services $services_1" to p1
        for p in [ p2, p3 ]:
            with p:
                send "start-server services $services_1"
                send "peer-add ${p1.node.ip}"
                expect /peer 1 addr ${p1.node.ip} 29665/
                expect /peer 1 id Device1 Owner/

                expect /peer ([0-9]+) addr ${p.node.ip} 29665/ from p1 capture pidx
                expect /peer $pidx id Device./ from p1

                send "attach-to 1"
                expect /attach-request $pidx ([0-9]*)/ from p1 capture code1
                expect /attach-response 1 ([0-9]*)/ capture code2
                guard (code1 == code2)

                send "attach-accept $pidx" to p1
                send "attach-accept 1"
                expect /attach-request-done $pidx/ from p1
                expect /attach-response-done 1/

    spawn as pd on nd
    spawn as p1 on n1
    spawn as p2 on n2
    spawn as p3 on n3

    send "start-server services $services_d" to pd
    for p in [ p1, p2, p3 ]:
        send "start-server services $services_2" to p

    # Shared identity sync after explicit direct connection

    send "peer-add ${p1.node.ip}" to p2
    expect /peer 1 addr ${p2.node.ip} 29665/ from p1
    expect /peer 1 id Device. Owner/ from p1

    # Shared identity sync after automatic discovery

    for p in [ p1, p3 ]:
        send "peer-add ${pd.node.ip}" to p

    expect /peer 2 addr ${pd.node.ip} 29665/ from p1
    expect /peer 2 id Discovery/ from p1

    expect /peer 3 addr ${p3.node.ip} 29665/ from p1
    expect /peer 3 id Device. Owner/ from p1