Skip to content
This repository was archived by the owner on Dec 20, 2023. It is now read-only.

Commit 7d7db91

Browse files
committed
lwip weave tunnel test 02
1 parent 220b97b commit 7d7db91

File tree

5 files changed

+83
-45
lines changed

5 files changed

+83
-45
lines changed

src/test-apps/happy/lib/WeaveState.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,30 @@ def getNodeWeaveIPAddress(self, node_id=None, state=None):
168168
return addr
169169
return None
170170

171+
def getNodeInterfaceWeaveIPAddress(self, interface_id, node_id, state=None):
172+
"""This function attempts to get weave IP address of a paticular node's interface.
173+
174+
Args:
175+
interface_id(str): A string containing a node interface id, example: "wlan0" or "wpan0".
176+
node_id(str): A string containing a node id, example: "BorderGateway", "ThreadNode".
177+
state(json data): node's json data, default is None.
178+
179+
Returns:
180+
str. The return value:
181+
None: not found weave address
182+
addr: found weave address
183+
"""
184+
weave_global_prefix = self.getFabricGlobalPrefix(state)
185+
if weave_global_prefix is None:
186+
return None
187+
node_interface_addresses = self.getNodeInterfaceAddresses(interface_id, node_id, state)
188+
if node_interface_addresses == []:
189+
return None
190+
for addr in node_interface_addresses:
191+
if IP.prefixMatchAddress(weave_global_prefix, addr):
192+
return addr
193+
return None
194+
171195
def getWeaveNetworkIds(self, state=None):
172196
networks_record = self.getWeaveNetworks(state)
173197
return networks_record.keys()

src/test-apps/happy/test-templates/WeavePing.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ def __init__(self, opts = options):
9393
HappyNetwork.__init__(self)
9494
WeaveTest.__init__(self)
9595
self.__dict__.update(opts)
96+
self.fabric_id = self.getFabricId()
97+
if self.use_lwip:
98+
self.service_weave_id = self.getServiceWeaveID("Tunnel")
99+
self.service_weave_addr = self.getServiceWeaveIPAddress("Tunnel")
100+
self.gateway_weave_addr = self.getNodeInterfaceWeaveIPAddress("wpan0", self.border_gateway)
96101

97102
def __pre_check(self):
98103
# clear network info
@@ -275,8 +280,11 @@ def __start_client_side(self, client_info):
275280

276281
cmd += " --count " + str(self.count)
277282

278-
if self.tap:
279-
cmd += " --tap-device " + self.tap
283+
if self.use_lwip:
284+
cmd += " --fabric-id " + str(self.fabric_id)
285+
cmd += " --tap-device " + self.client_tap
286+
cmd += " --node-id " + client_info['client_weave_id']
287+
cmd += " --ipv6-gateway " + self.gateway_weave_addr
280288

281289
if self.case:
282290
if self.case_shared:
@@ -288,7 +296,6 @@ def __start_client_side(self, client_info):
288296
self.cert_file = self.case_cert_path if self.case_cert_path else os.path.join(self.main_conf['log_directory'], client_info["client_weave_id"].upper() + '-cert.weave-b64')
289297
self.key_file = self.case_key_path if self.case_key_path else os.path.join(self.main_conf['log_directory'], client_info["client_weave_id"].upper() + '-key.weave-b64')
290298
cmd += ' --node-cert ' + self.cert_file + ' --node-key ' + self.key_file
291-
292299
self.start_simple_weave_client(cmd, client_info['client_ip'],
293300
self.server_ip, self.server_weave_id,
294301
client_info['client_node_id'], client_info['client_process_tag'], use_persistent_storage=self.use_persistent_storage, env=self.plaid_client_env)

src/test-apps/happy/test-templates/WeaveTunnelStart.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
"case": False,
5454
"service_dir_server": None,
5555
"use_lwip": False,
56+
"client_tap_wlan": None,
57+
"client_tap_wpan": None,
5658
"service_process_tag": "WEAVE-SERVICE-TUNNEL",
5759
"gateway_process_tag": "WEAVE-GATEWAY-TUNNEL",
5860
"case_cert_path": None,
@@ -115,8 +117,25 @@ def __init__(self, opts = options):
115117
self.service, self.service_tap, service_v4route_prefix)[0]
116118

117119
BR_v4route_prefix = self.getNodeRoutePrefix("v4", self.border_gateway)
118-
self.client_ipv4_addr = self.getNodeAddrMatchingPrefix(
119-
self.border_gateway, self.client_tap, BR_v4route_prefix)[0]
120+
self.client_ipv4_addr_wlan = self.getNodeAddrMatchingPrefix(
121+
self.border_gateway, self.client_tap_wlan, BR_v4route_prefix)[0]
122+
123+
self.service_weave_addr = self.getServiceWeaveIPAddress("Tunnel")
124+
125+
weave_prefix = self.getFabricRecord().get('global_prefix', "")
126+
127+
# get client BorderGateway's wlan weave address
128+
client_addrs_wlan = self.getNodeInterfaceAddresses(self.client_tap_wlan, self.border_gateway)
129+
client_ipv6_addrs_wlan = [addr for addr in client_addrs_wlan if IP.isIpv6(addr)]
130+
self.client_weave_addr_wlan = [addr
131+
for addr in client_ipv6_addrs_wlan if IP.prefixMatchAddress(weave_prefix, addr)][0]
132+
133+
# get client BorderGateway's wpan weave address
134+
if self.client_tap_wpan:
135+
client_addrs_wpan = self.getNodeInterfaceAddresses(self.client_tap_wpan, self.border_gateway)
136+
client_ipv6_addrs_wpan = [addr for addr in client_addrs_wpan if IP.isIpv6(addr)]
137+
self.client_weave_addr_wpan = [addr
138+
for addr in client_ipv6_addrs_wpan if IP.prefixMatchAddress(weave_prefix, addr)][0]
120139

121140
self.gateway_process_tag += self.test_tag
122141
self.service_process_tag += self.test_tag
@@ -231,6 +250,7 @@ def __start_tunnel_at_service(self):
231250
cmd += " --tap-device " + self.service_tap
232251
cmd += " --ipv4-gateway " + self.service_ipv4_gateway
233252
cmd += " --node-addr " + self.service_ipv4_addr
253+
cmd += " --node-addr " + self.service_weave_addr
234254

235255
if self.service_faults:
236256
cmd += " --faults " + self.service_faults
@@ -241,7 +261,6 @@ def __start_tunnel_at_service(self):
241261

242262
cmd += " --debug-resource-usage"
243263
cmd += " --print-fault-counters"
244-
245264
cmd = self.runAsRoot(cmd)
246265
self.start_weave_process(self.service, cmd, self.service_process_tag,
247266
strace=self.strace, sync_on_output=self.sync_on_service_output,
@@ -299,10 +318,14 @@ def __start_tunnel_at_gateway(self):
299318

300319
# if device is tap device, we need to provide tap-interface, ipv4-gateway, node-addr
301320
if self.use_lwip:
302-
cmd += " --tap-device " + self.client_tap
321+
cmd += " --tap-device " + self.client_tap_wlan
303322
cmd += " --ipv4-gateway " + self.client_ipv4_gateway
304-
cmd += " --node-addr " + self.client_ipv4_addr
323+
cmd += " --node-addr " + self.client_ipv4_addr_wlan
324+
cmd += " --node-addr " + self.client_weave_addr_wlan
305325
cmd += " --service-dir-server " + self.service_ipv4_addr
326+
if self.client_tap_wpan:
327+
cmd += " --tap-device " + self.client_tap_wpan
328+
cmd += " --node-addr " + self.client_weave_addr_wpan
306329

307330
if self.primary:
308331
cmd += " --primary-intf " + self.primary

src/test-apps/happy/tests/standalone/tunnel/test_weave_tunnel_01.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ def setUp(self):
4343
self.use_lwip = True
4444
topology_shell_script = os.path.dirname(os.path.realpath(__file__)) + \
4545
"/../../../topologies/standalone/thread_wifi_on_tap_ap_service.sh"
46-
# tap interface, ipv4 gateway and node addr should be provided if device is tap device
47-
# both BorderRouter and cloud node are tap devices here
48-
self.BR_tap = "wlan0"
49-
self.cloud_tap = "eth0"
5046
else:
5147
self.use_lwip = False
5248
topology_shell_script = os.path.dirname(os.path.realpath(__file__)) + \
@@ -80,8 +76,8 @@ def __start_tunnel_between(self, gateway, service):
8076
options["service"] = service
8177
options["use_lwip"] = self.use_lwip
8278
if self.use_lwip:
83-
options["client_tap"] = self.BR_tap
84-
options["service_tap"] = self.cloud_tap
79+
options["client_tap_wlan"] = "wlan0"
80+
options["service_tap"] = "eth0"
8581

8682
weave_tunnel = WeaveTunnelStart.WeaveTunnelStart(options)
8783
ret = weave_tunnel.run()

src/test-apps/happy/tests/standalone/tunnel/test_weave_tunnel_02.py

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -35,50 +35,30 @@
3535
import WeaveTunnelStart
3636
import WeaveTunnelStop
3737
import WeaveUtilities
38+
import subprocess
3839

3940
class test_weave_tunnel_02(unittest.TestCase):
4041
def setUp(self):
41-
self.tap = None
42-
4342
if "WEAVE_SYSTEM_CONFIG_USE_LWIP" in os.environ.keys() and os.environ["WEAVE_SYSTEM_CONFIG_USE_LWIP"] == "1":
44-
self.topology_file = os.path.dirname(os.path.realpath(__file__)) + \
45-
"/../../../topologies/standalone/thread_wifi_on_tap_ap_service.json"
46-
self.tap = "wpan0"
43+
self.use_lwip = True
44+
topology_shell_script = os.path.dirname(os.path.realpath(__file__)) + \
45+
"/../../../topologies/standalone/thread_wifi_on_tap_ap_service.sh"
4746
else:
48-
self.topology_file = os.path.dirname(os.path.realpath(__file__)) + \
49-
"/../../../topologies/standalone/thread_wifi_ap_service.json"
50-
51-
self.show_strace = False
52-
53-
# setting Mesh for thread test
54-
options = WeaveStateLoad.option()
55-
options["quiet"] = True
56-
options["json_file"] = self.topology_file
57-
58-
setup_network = WeaveStateLoad.WeaveStateLoad(options)
59-
ret = setup_network.run()
47+
self.use_lwip = False
48+
topology_shell_script = os.path.dirname(os.path.realpath(__file__)) + \
49+
"/../../../topologies/standalone/thread_wifi_ap_service.sh"
50+
output = subprocess.call([topology_shell_script])
6051

6152
# Wait for a second to ensure that Weave ULA addresses passed dad
6253
# and are no longer tentative
6354
time.sleep(2)
6455

65-
6656
def tearDown(self):
6757
# cleaning up
68-
options = WeaveStateUnload.option()
69-
options["quiet"] = True
70-
options["json_file"] = self.topology_file
71-
72-
teardown_network = WeaveStateUnload.WeaveStateUnload(options)
73-
teardown_network.run()
58+
subprocess.call(["happy-state-delete"])
7459

7560

7661
def test_weave_tunnel(self):
77-
# TODO: Once LwIP bugs are fix, enable this test on LwIP
78-
if "WEAVE_SYSTEM_CONFIG_USE_LWIP" in os.environ.keys() and os.environ["WEAVE_SYSTEM_CONFIG_USE_LWIP"] == "1":
79-
print hred("WARNING: Test skipped due to LwIP-based network cofiguration!")
80-
return
81-
8262
# topology has nodes: ThreadNode, BorderRouter, onhub and cloud
8363
# we run tunnel between BorderRouter and cloud
8464

@@ -99,7 +79,11 @@ def __start_tunnel_between(self, gateway, service):
9979
options["quiet"] = True
10080
options["border_gateway"] = gateway
10181
options["service"] = service
102-
options["tap"] = self.tap
82+
options["use_lwip"] = self.use_lwip
83+
if self.use_lwip:
84+
options["client_tap_wlan"] = "wlan0"
85+
options["client_tap_wpan"] = "wpan0"
86+
options["service_tap"] = "eth0"
10387

10488
weave_tunnel = WeaveTunnelStart.WeaveTunnelStart(options)
10589
ret = weave_tunnel.run()
@@ -118,7 +102,11 @@ def __run_ping_test_between(self, nodeA, nodeB):
118102
options["udp"] = True
119103
options["endpoint"] = "Tunnel"
120104
options["count"] = "10"
121-
options["tap"] = self.tap
105+
options["use_lwip"] = self.use_lwip
106+
if self.use_lwip:
107+
options["client_tap"] = "wpan0"
108+
options["service_tap"] = "wlan0"
109+
options["border_gateway"] = "BorderRouter"
122110

123111
weave_ping = WeavePing.WeavePing(options)
124112
ret = weave_ping.run()

0 commit comments

Comments
 (0)