summaryrefslogtreecommitdiff
path: root/test/contact.test
blob: 438aa1ff7bede1481fa2857e127ab01710a9542d (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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
test Contact:
	spawn as p1
	spawn as p2
	spawn as p3
	spawn as p4

	send "create-identity Device1 Owner1" to p1
	send "create-identity Device2 Owner2" to p2
	send "create-identity Device3 Owner3" to p3
	send "create-identity Device4"        to p4

	send "start-server" to p1
	send "start-server" to p2
	send "start-server" to p3
	send "start-server" to p4

	expect from p1:
		/peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
		/peer $peer1_2 id Device2 Owner2/
		/peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer1_3
		/peer $peer1_3 id Device3 Owner3/
		/peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer1_4
		/peer $peer1_4 id Device4/

	expect from p2:
		/peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
		/peer $peer2_1 id Device1 Owner1/
		/peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer2_3
		/peer $peer2_3 id Device3 Owner3/
		/peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer2_4
		/peer $peer2_4 id Device4/

	expect from p3:
		/peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer3_1
		/peer $peer3_1 id Device1 Owner1/
		/peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer3_2
		/peer $peer3_2 id Device2 Owner2/
		/peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer3_4
		/peer $peer3_4 id Device4/

	expect from p4:
		/peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer4_1
		/peer $peer4_1 id Device1 Owner1/
		/peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer4_2
		/peer $peer4_2 id Device2 Owner2/
		/peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer4_3
		/peer $peer4_3 id Device3 Owner3/

	# Rejected contacts

	send "contact-request $peer1_2" to p1
	expect /contact-request $peer2_1 [0-9]*/ from p2
	expect /contact-response $peer1_2 [0-9]*/ from p1
	send "contact-reject $peer1_2" to p1
	expect /contact-request-failed $peer2_1 rejected/ from p2
	expect /contact-response-failed $peer1_2 user/ from p1

	send "contact-request $peer1_2" to p1
	expect /contact-request $peer2_1 [0-9]*/ from p2
	expect /contact-response $peer1_2 [0-9]*/ from p1
	send "contact-reject $peer2_1" to p2
	expect /contact-request-failed $peer2_1 user/ from p2
	expect /contact-response-failed $peer1_2 rejected/ from p1

	# Contact between 1 and 2

	local:
		send "contact-request $peer1_2" to p1
		expect /contact-request $peer2_1 ([0-9]*)/ from p2 capture code2
		expect /contact-response $peer1_2 ([0-9]*)/ from p1 capture code1
		guard (code1 == code2)

	send "contact-accept $peer1_2" to p1
	send "contact-accept $peer2_1" to p2
	expect /contact-request-done $peer2_1/ from p2
	expect /contact-response-done $peer1_2/ from p1

	send "contact-list" to p1
	expect from p1:
		/contact-list-item [a-z0-9#]+ Owner2 Owner2/
		/contact-list-(.*)/ capture done1_1
	guard (done1_1 == "done")
	send "contact-list" to p2
	expect from p2:
		/contact-list-item [a-z0-9#]+ Owner1 Owner1/
		/contact-list-(.*)/ capture done1_2
	guard (done1_2 == "done")

	# Attach peer 4 to Owner1

	send "watch-local-identity" to p4
	expect /local-identity Device4/ from p4

	send "attach-to $peer4_1" to p4
	local:
		expect /attach-request $peer1_4 ([0-9]*)/ from p1 capture code1
		expect /attach-response $peer4_1 ([0-9]*)/ from p4 capture code4
		guard (code1 == code4)

	send "attach-accept $peer1_4" to p1
	send "attach-accept $peer4_1" to p4
	expect /attach-request-done $peer1_4/ from p1
	expect /attach-response-done $peer4_1/ from p4
	expect /local-identity Device4 Owner1/ from p4
	expect /peer $peer1_4 id Device4 Owner1/ from p1
	expect /peer $peer2_4 id Device4 Owner1/ from p2
	expect /peer $peer3_4 id Device4 Owner1/ from p3

	# Contact between 3 and 4

	send "contact-request $peer3_4" to p3
	local:
		expect /contact-request $peer4_3 ([0-9]*)/ from p4 capture code4
		expect /contact-response $peer3_4 ([0-9]*)/ from p3 capture code3
		guard (code3 == code4)

	send "contact-accept $peer3_4" to p3
	send "contact-accept $peer4_3" to p4
	expect /contact-request-done $peer4_3/ from p4
	expect /contact-response-done $peer3_4/ from p3

	send "contact-list" to p3
	expect from p3:
		/contact-list-item [a-z0-9#]+ Owner1 Owner1/
		/contact-list-(.*)/ capture done2_3
	guard (done2_3 == "done")

	send "shared-state-get" to p1
	expect /shared-state-get (.*)/ from p1 capture s1
	send "shared-state-wait $s1" to p4
	expect /shared-state-wait $s1/ from p4

	send "contact-list" to p4
	expect from p4:
		/contact-list-item ([a-z0-9#]+) Owner2 Owner2/ capture c4_2
		/contact-list-item ([a-z0-9#]+) Owner3 Owner3/ capture c4_3
		/contact-list-(.*)/ capture done2_4
	guard (done2_4 == "done")

	# Check sync between 1 and 4

	send "shared-state-get" to p4
	expect /shared-state-get (.*)/ from p4 capture s4
	send "shared-state-wait $s4" to p1
	expect /shared-state-wait $s4/ from p1

	send "contact-list" to p1
	expect from p1:
		/contact-list-item ([a-z0-9#]+) Owner2 Owner2/ capture c1_2
		/contact-list-item ([a-z0-9#]+) Owner3 Owner3/ capture c1_3
		/contact-list-(.*)/ capture done2_1
	guard (done2_1 == "done")

	# Update custom name

	send "contact-set-name $c4_2 Custom2" to p4
	expect /contact-set-name-done/ from p4

	send "contact-list" to p4
	expect from p4:
		/contact-list-item $c4_2 Custom2 Owner2/
		/contact-list-item $c4_3 Owner3 Owner3/
		/contact-list-(.*)/ capture done3_4
	guard (done3_4 == "done")

	send "shared-state-get" to p4
	expect /shared-state-get (.*)/ from p4 capture s4b
	send "shared-state-wait $s4b" to p1
	expect /shared-state-wait $s4b/ from p1

	send "contact-list" to p1
	expect from p1:
		/contact-list-item $c4_2 Custom2 Owner2/
		/contact-list-item $c4_3 Owner3 Owner3/
		/contact-list-(.*)/ capture done3_1
	guard (done3_1 == "done")

	send "contact-set-name $c1_2 Custom2B" to p1
	expect /contact-set-name-done/ from p1
	send "contact-set-name $c1_3 Custom3B" to p1
	expect /contact-set-name-done/ from p1

	send "contact-list" to p1
	expect from p1:
		/contact-list-item $c1_2 Custom2B Owner2/
		/contact-list-item $c1_3 Custom3B Owner3/
		/contact-list-(.*)/ capture done4_1
	guard (done4_1 == "done")

	send "shared-state-get" to p1
	expect /shared-state-get (.*)/ from p1 capture s1b
	send "shared-state-wait $s1b" to p4
	expect /shared-state-wait $s1b/ from p4

	send "contact-list" to p4
	expect from p4:
		/contact-list-item $c4_2 Custom2B Owner2/
		/contact-list-item $c4_3 Custom3B Owner3/
		/contact-list-(.*)/ capture done4_4
	guard (done4_4 == "done")