xref: /aosp_15_r20/external/ot-br-posix/tests/rest/test_rest.py (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
1*4a64e381SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*4a64e381SAndroid Build Coastguard Worker#
3*4a64e381SAndroid Build Coastguard Worker#  Copyright (c) 2020, The OpenThread Authors.
4*4a64e381SAndroid Build Coastguard Worker#  All rights reserved.
5*4a64e381SAndroid Build Coastguard Worker#
6*4a64e381SAndroid Build Coastguard Worker#  Redistribution and use in source and binary forms, with or without
7*4a64e381SAndroid Build Coastguard Worker#  modification, are permitted provided that the following conditions are met:
8*4a64e381SAndroid Build Coastguard Worker#  1. Redistributions of source code must retain the above copyright
9*4a64e381SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer.
10*4a64e381SAndroid Build Coastguard Worker#  2. Redistributions in binary form must reproduce the above copyright
11*4a64e381SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer in the
12*4a64e381SAndroid Build Coastguard Worker#     documentation and/or other materials provided with the distribution.
13*4a64e381SAndroid Build Coastguard Worker#  3. Neither the name of the copyright holder nor the
14*4a64e381SAndroid Build Coastguard Worker#     names of its contributors may be used to endorse or promote products
15*4a64e381SAndroid Build Coastguard Worker#     derived from this software without specific prior written permission.
16*4a64e381SAndroid Build Coastguard Worker#
17*4a64e381SAndroid Build Coastguard Worker#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18*4a64e381SAndroid Build Coastguard Worker#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*4a64e381SAndroid Build Coastguard Worker#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*4a64e381SAndroid Build Coastguard Worker#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21*4a64e381SAndroid Build Coastguard Worker#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*4a64e381SAndroid Build Coastguard Worker#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*4a64e381SAndroid Build Coastguard Worker#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*4a64e381SAndroid Build Coastguard Worker#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*4a64e381SAndroid Build Coastguard Worker#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26*4a64e381SAndroid Build Coastguard Worker#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*4a64e381SAndroid Build Coastguard Worker#  POSSIBILITY OF SUCH DAMAGE.
28*4a64e381SAndroid Build Coastguard Worker#
29*4a64e381SAndroid Build Coastguard Worker
30*4a64e381SAndroid Build Coastguard Workerimport urllib.request
31*4a64e381SAndroid Build Coastguard Workerimport urllib.error
32*4a64e381SAndroid Build Coastguard Workerimport ipaddress
33*4a64e381SAndroid Build Coastguard Workerimport json
34*4a64e381SAndroid Build Coastguard Workerimport re
35*4a64e381SAndroid Build Coastguard Workerfrom threading import Thread
36*4a64e381SAndroid Build Coastguard Worker
37*4a64e381SAndroid Build Coastguard Workerrest_api_addr = "http://0.0.0.0:8081"
38*4a64e381SAndroid Build Coastguard Worker
39*4a64e381SAndroid Build Coastguard Worker
40*4a64e381SAndroid Build Coastguard Workerdef assert_is_ipv6_address(string):
41*4a64e381SAndroid Build Coastguard Worker    assert (type(ipaddress.ip_address(string)) is ipaddress.IPv6Address)
42*4a64e381SAndroid Build Coastguard Worker
43*4a64e381SAndroid Build Coastguard Workerdef get_data_from_url(url, result, index):
44*4a64e381SAndroid Build Coastguard Worker    response = urllib.request.urlopen(urllib.request.Request(url))
45*4a64e381SAndroid Build Coastguard Worker    body = response.read()
46*4a64e381SAndroid Build Coastguard Worker    data = json.loads(body)
47*4a64e381SAndroid Build Coastguard Worker    result[index] = data
48*4a64e381SAndroid Build Coastguard Worker
49*4a64e381SAndroid Build Coastguard Worker
50*4a64e381SAndroid Build Coastguard Workerdef get_error_from_url(url, result, index):
51*4a64e381SAndroid Build Coastguard Worker    try:
52*4a64e381SAndroid Build Coastguard Worker        urllib.request.urlopen(urllib.request.Request(url))
53*4a64e381SAndroid Build Coastguard Worker        assert False
54*4a64e381SAndroid Build Coastguard Worker
55*4a64e381SAndroid Build Coastguard Worker    except urllib.error.HTTPError as e:
56*4a64e381SAndroid Build Coastguard Worker        result[index] = e
57*4a64e381SAndroid Build Coastguard Worker
58*4a64e381SAndroid Build Coastguard Worker
59*4a64e381SAndroid Build Coastguard Workerdef create_multi_thread(func, url, thread_num, response_data):
60*4a64e381SAndroid Build Coastguard Worker    threads = [None] * thread_num
61*4a64e381SAndroid Build Coastguard Worker
62*4a64e381SAndroid Build Coastguard Worker    for i in range(thread_num):
63*4a64e381SAndroid Build Coastguard Worker        threads[i] = Thread(target=func, args=(url, response_data, i))
64*4a64e381SAndroid Build Coastguard Worker
65*4a64e381SAndroid Build Coastguard Worker    for thread in threads:
66*4a64e381SAndroid Build Coastguard Worker        thread.start()
67*4a64e381SAndroid Build Coastguard Worker
68*4a64e381SAndroid Build Coastguard Worker    for thread in threads:
69*4a64e381SAndroid Build Coastguard Worker        thread.join()
70*4a64e381SAndroid Build Coastguard Worker
71*4a64e381SAndroid Build Coastguard Worker
72*4a64e381SAndroid Build Coastguard Workerdef error404_check(data):
73*4a64e381SAndroid Build Coastguard Worker    assert data is not None
74*4a64e381SAndroid Build Coastguard Worker
75*4a64e381SAndroid Build Coastguard Worker    assert (data.code == 404)
76*4a64e381SAndroid Build Coastguard Worker
77*4a64e381SAndroid Build Coastguard Worker    return True
78*4a64e381SAndroid Build Coastguard Worker
79*4a64e381SAndroid Build Coastguard Worker
80*4a64e381SAndroid Build Coastguard Workerdef diagnostics_check(data):
81*4a64e381SAndroid Build Coastguard Worker    assert data is not None
82*4a64e381SAndroid Build Coastguard Worker
83*4a64e381SAndroid Build Coastguard Worker    if len(data) == 0:
84*4a64e381SAndroid Build Coastguard Worker        return 1
85*4a64e381SAndroid Build Coastguard Worker    for diag in data:
86*4a64e381SAndroid Build Coastguard Worker        expected_keys = [
87*4a64e381SAndroid Build Coastguard Worker            "ExtAddress", "Rloc16", "Mode", "Connectivity", "Route",
88*4a64e381SAndroid Build Coastguard Worker            "LeaderData", "NetworkData", "IP6AddressList", "MACCounters",
89*4a64e381SAndroid Build Coastguard Worker            "ChildTable", "ChannelPages"
90*4a64e381SAndroid Build Coastguard Worker        ]
91*4a64e381SAndroid Build Coastguard Worker        expected_value_type = [
92*4a64e381SAndroid Build Coastguard Worker            str, int, dict, dict, dict, dict, str, list, dict, list,
93*4a64e381SAndroid Build Coastguard Worker            str
94*4a64e381SAndroid Build Coastguard Worker        ]
95*4a64e381SAndroid Build Coastguard Worker        expected_check_dict = dict(zip(expected_keys, expected_value_type))
96*4a64e381SAndroid Build Coastguard Worker
97*4a64e381SAndroid Build Coastguard Worker        for key, value in expected_check_dict.items():
98*4a64e381SAndroid Build Coastguard Worker            assert (key in diag)
99*4a64e381SAndroid Build Coastguard Worker            assert (type(diag[key]) == value)
100*4a64e381SAndroid Build Coastguard Worker
101*4a64e381SAndroid Build Coastguard Worker        assert (re.match(r'^[A-F0-9]{16}$', diag["ExtAddress"]) is not None)
102*4a64e381SAndroid Build Coastguard Worker
103*4a64e381SAndroid Build Coastguard Worker        mode = diag["Mode"]
104*4a64e381SAndroid Build Coastguard Worker        mode_expected_keys = [
105*4a64e381SAndroid Build Coastguard Worker            "RxOnWhenIdle", "DeviceType", "NetworkData"
106*4a64e381SAndroid Build Coastguard Worker        ]
107*4a64e381SAndroid Build Coastguard Worker        for key in mode_expected_keys:
108*4a64e381SAndroid Build Coastguard Worker            assert (key in mode)
109*4a64e381SAndroid Build Coastguard Worker            assert (type(mode[key]) == int)
110*4a64e381SAndroid Build Coastguard Worker
111*4a64e381SAndroid Build Coastguard Worker        connectivity = diag["Connectivity"]
112*4a64e381SAndroid Build Coastguard Worker        connectivity_expected_keys = [
113*4a64e381SAndroid Build Coastguard Worker            "ParentPriority", "LinkQuality3", "LinkQuality2", "LinkQuality1",
114*4a64e381SAndroid Build Coastguard Worker            "LeaderCost", "IdSequence", "ActiveRouters", "SedBufferSize",
115*4a64e381SAndroid Build Coastguard Worker            "SedDatagramCount"
116*4a64e381SAndroid Build Coastguard Worker        ]
117*4a64e381SAndroid Build Coastguard Worker        for key in connectivity_expected_keys:
118*4a64e381SAndroid Build Coastguard Worker            assert (key in connectivity)
119*4a64e381SAndroid Build Coastguard Worker            assert (type(connectivity[key]) == int)
120*4a64e381SAndroid Build Coastguard Worker
121*4a64e381SAndroid Build Coastguard Worker        route = diag["Route"]
122*4a64e381SAndroid Build Coastguard Worker        assert ("IdSequence" in route)
123*4a64e381SAndroid Build Coastguard Worker        assert (type(route["IdSequence"]) == int)
124*4a64e381SAndroid Build Coastguard Worker
125*4a64e381SAndroid Build Coastguard Worker        assert ("RouteData" in route)
126*4a64e381SAndroid Build Coastguard Worker        route_routedata = route["RouteData"]
127*4a64e381SAndroid Build Coastguard Worker        assert (type(route["RouteData"]) == list)
128*4a64e381SAndroid Build Coastguard Worker
129*4a64e381SAndroid Build Coastguard Worker        routedata_expected_keys = [
130*4a64e381SAndroid Build Coastguard Worker            "RouteId", "LinkQualityOut", "LinkQualityIn", "RouteCost"
131*4a64e381SAndroid Build Coastguard Worker        ]
132*4a64e381SAndroid Build Coastguard Worker
133*4a64e381SAndroid Build Coastguard Worker        for item in route_routedata:
134*4a64e381SAndroid Build Coastguard Worker            for key in routedata_expected_keys:
135*4a64e381SAndroid Build Coastguard Worker                assert (key in item)
136*4a64e381SAndroid Build Coastguard Worker                assert (type(item[key]) == int)
137*4a64e381SAndroid Build Coastguard Worker
138*4a64e381SAndroid Build Coastguard Worker        leaderdata = diag["LeaderData"]
139*4a64e381SAndroid Build Coastguard Worker        leaderdata_expected_keys = [
140*4a64e381SAndroid Build Coastguard Worker            "PartitionId", "Weighting", "DataVersion", "StableDataVersion",
141*4a64e381SAndroid Build Coastguard Worker            "LeaderRouterId"
142*4a64e381SAndroid Build Coastguard Worker        ]
143*4a64e381SAndroid Build Coastguard Worker
144*4a64e381SAndroid Build Coastguard Worker        for key in leaderdata_expected_keys:
145*4a64e381SAndroid Build Coastguard Worker            assert (key in leaderdata)
146*4a64e381SAndroid Build Coastguard Worker            assert (type(leaderdata[key]) == int)
147*4a64e381SAndroid Build Coastguard Worker
148*4a64e381SAndroid Build Coastguard Worker        assert (re.match(r'^[A-F0-9]{12}$', diag["NetworkData"]) is not None)
149*4a64e381SAndroid Build Coastguard Worker
150*4a64e381SAndroid Build Coastguard Worker        ip6_address_list = diag["IP6AddressList"]
151*4a64e381SAndroid Build Coastguard Worker        assert (type(ip6_address_list) == list)
152*4a64e381SAndroid Build Coastguard Worker
153*4a64e381SAndroid Build Coastguard Worker        for ip6_address in ip6_address_list:
154*4a64e381SAndroid Build Coastguard Worker            assert (type(ip6_address) == str)
155*4a64e381SAndroid Build Coastguard Worker            assert_is_ipv6_address(ip6_address)
156*4a64e381SAndroid Build Coastguard Worker
157*4a64e381SAndroid Build Coastguard Worker        mac_counters = diag["MACCounters"]
158*4a64e381SAndroid Build Coastguard Worker        assert (type(mac_counters) == dict)
159*4a64e381SAndroid Build Coastguard Worker        mac_counters_expected_keys = [
160*4a64e381SAndroid Build Coastguard Worker            "IfInUnknownProtos", "IfInErrors", "IfOutErrors", "IfInUcastPkts",
161*4a64e381SAndroid Build Coastguard Worker            "IfInBroadcastPkts", "IfInDiscards", "IfOutUcastPkts",
162*4a64e381SAndroid Build Coastguard Worker            "IfOutBroadcastPkts", "IfOutDiscards"
163*4a64e381SAndroid Build Coastguard Worker        ]
164*4a64e381SAndroid Build Coastguard Worker        for key in mac_counters_expected_keys:
165*4a64e381SAndroid Build Coastguard Worker            assert (key in mac_counters)
166*4a64e381SAndroid Build Coastguard Worker            assert (type(mac_counters[key]) == int)
167*4a64e381SAndroid Build Coastguard Worker
168*4a64e381SAndroid Build Coastguard Worker        child_table = diag["ChildTable"]
169*4a64e381SAndroid Build Coastguard Worker        assert (type(child_table) == list)
170*4a64e381SAndroid Build Coastguard Worker
171*4a64e381SAndroid Build Coastguard Worker        for child in child_table:
172*4a64e381SAndroid Build Coastguard Worker            assert ("ChildId" in child)
173*4a64e381SAndroid Build Coastguard Worker            assert (type(child["ChildId"]) == int)
174*4a64e381SAndroid Build Coastguard Worker            assert ("Timeout" in child)
175*4a64e381SAndroid Build Coastguard Worker            assert (type(child["Timeout"]) == int)
176*4a64e381SAndroid Build Coastguard Worker            assert ("Mode" in child)
177*4a64e381SAndroid Build Coastguard Worker            mode = child["Mode"]
178*4a64e381SAndroid Build Coastguard Worker            assert (type(mode) == dict)
179*4a64e381SAndroid Build Coastguard Worker            for key in mode_expected_keys:
180*4a64e381SAndroid Build Coastguard Worker                assert (key in mode)
181*4a64e381SAndroid Build Coastguard Worker                assert (type(mode[key]) == int)
182*4a64e381SAndroid Build Coastguard Worker
183*4a64e381SAndroid Build Coastguard Worker        assert (type(diag["ChannelPages"]) == str)
184*4a64e381SAndroid Build Coastguard Worker        assert (re.match(r'^[A-F0-9]{2}$', diag["ChannelPages"]) is not None)
185*4a64e381SAndroid Build Coastguard Worker
186*4a64e381SAndroid Build Coastguard Worker    return 2
187*4a64e381SAndroid Build Coastguard Worker
188*4a64e381SAndroid Build Coastguard Worker
189*4a64e381SAndroid Build Coastguard Workerdef node_check(data):
190*4a64e381SAndroid Build Coastguard Worker    assert data is not None
191*4a64e381SAndroid Build Coastguard Worker
192*4a64e381SAndroid Build Coastguard Worker    expected_keys = [
193*4a64e381SAndroid Build Coastguard Worker        "State", "NumOfRouter", "RlocAddress", "NetworkName", "ExtAddress",
194*4a64e381SAndroid Build Coastguard Worker        "Rloc16", "LeaderData", "ExtPanId"
195*4a64e381SAndroid Build Coastguard Worker    ]
196*4a64e381SAndroid Build Coastguard Worker    expected_value_type = [
197*4a64e381SAndroid Build Coastguard Worker        str, int, str, str, str, int, dict, str
198*4a64e381SAndroid Build Coastguard Worker    ]
199*4a64e381SAndroid Build Coastguard Worker    expected_check_dict = dict(zip(expected_keys, expected_value_type))
200*4a64e381SAndroid Build Coastguard Worker
201*4a64e381SAndroid Build Coastguard Worker    for key, value in expected_check_dict.items():
202*4a64e381SAndroid Build Coastguard Worker        assert (key in data)
203*4a64e381SAndroid Build Coastguard Worker        assert (type(data[key]) == value)
204*4a64e381SAndroid Build Coastguard Worker
205*4a64e381SAndroid Build Coastguard Worker    assert_is_ipv6_address(data["RlocAddress"])
206*4a64e381SAndroid Build Coastguard Worker
207*4a64e381SAndroid Build Coastguard Worker    assert (re.match(r'^[A-F0-9]{16}$', data["ExtAddress"]) is not None)
208*4a64e381SAndroid Build Coastguard Worker    assert (re.match(r'[A-F0-9]{16}', data["ExtPanId"]) is not None)
209*4a64e381SAndroid Build Coastguard Worker
210*4a64e381SAndroid Build Coastguard Worker    leaderdata = data["LeaderData"]
211*4a64e381SAndroid Build Coastguard Worker    leaderdata_expected_keys = [
212*4a64e381SAndroid Build Coastguard Worker        "PartitionId", "Weighting", "DataVersion", "StableDataVersion",
213*4a64e381SAndroid Build Coastguard Worker        "LeaderRouterId"
214*4a64e381SAndroid Build Coastguard Worker    ]
215*4a64e381SAndroid Build Coastguard Worker
216*4a64e381SAndroid Build Coastguard Worker    for key in leaderdata_expected_keys:
217*4a64e381SAndroid Build Coastguard Worker        assert (key in leaderdata)
218*4a64e381SAndroid Build Coastguard Worker        assert (type(leaderdata[key]) == int)
219*4a64e381SAndroid Build Coastguard Worker
220*4a64e381SAndroid Build Coastguard Worker    return True
221*4a64e381SAndroid Build Coastguard Worker
222*4a64e381SAndroid Build Coastguard Worker
223*4a64e381SAndroid Build Coastguard Workerdef node_rloc_check(data):
224*4a64e381SAndroid Build Coastguard Worker    assert data is not None
225*4a64e381SAndroid Build Coastguard Worker
226*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == str)
227*4a64e381SAndroid Build Coastguard Worker
228*4a64e381SAndroid Build Coastguard Worker    assert_is_ipv6_address(data)
229*4a64e381SAndroid Build Coastguard Worker
230*4a64e381SAndroid Build Coastguard Worker    return True
231*4a64e381SAndroid Build Coastguard Worker
232*4a64e381SAndroid Build Coastguard Worker
233*4a64e381SAndroid Build Coastguard Workerdef node_rloc16_check(data):
234*4a64e381SAndroid Build Coastguard Worker    assert data is not None
235*4a64e381SAndroid Build Coastguard Worker
236*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == int)
237*4a64e381SAndroid Build Coastguard Worker
238*4a64e381SAndroid Build Coastguard Worker    return True
239*4a64e381SAndroid Build Coastguard Worker
240*4a64e381SAndroid Build Coastguard Worker
241*4a64e381SAndroid Build Coastguard Workerdef node_ext_address_check(data):
242*4a64e381SAndroid Build Coastguard Worker    assert data is not None
243*4a64e381SAndroid Build Coastguard Worker
244*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == str)
245*4a64e381SAndroid Build Coastguard Worker    assert (re.match(r'^[A-F0-9]{16}$', data) is not None)
246*4a64e381SAndroid Build Coastguard Worker
247*4a64e381SAndroid Build Coastguard Worker    return True
248*4a64e381SAndroid Build Coastguard Worker
249*4a64e381SAndroid Build Coastguard Worker
250*4a64e381SAndroid Build Coastguard Workerdef node_state_check(data):
251*4a64e381SAndroid Build Coastguard Worker    assert data is not None
252*4a64e381SAndroid Build Coastguard Worker
253*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == str)
254*4a64e381SAndroid Build Coastguard Worker
255*4a64e381SAndroid Build Coastguard Worker    return True
256*4a64e381SAndroid Build Coastguard Worker
257*4a64e381SAndroid Build Coastguard Worker
258*4a64e381SAndroid Build Coastguard Workerdef node_network_name_check(data):
259*4a64e381SAndroid Build Coastguard Worker    assert data is not None
260*4a64e381SAndroid Build Coastguard Worker
261*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == str)
262*4a64e381SAndroid Build Coastguard Worker
263*4a64e381SAndroid Build Coastguard Worker    return True
264*4a64e381SAndroid Build Coastguard Worker
265*4a64e381SAndroid Build Coastguard Worker
266*4a64e381SAndroid Build Coastguard Workerdef node_leader_data_check(data):
267*4a64e381SAndroid Build Coastguard Worker    assert data is not None
268*4a64e381SAndroid Build Coastguard Worker
269*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == dict)
270*4a64e381SAndroid Build Coastguard Worker
271*4a64e381SAndroid Build Coastguard Worker    leaderdata_expected_keys = [
272*4a64e381SAndroid Build Coastguard Worker        "PartitionId", "Weighting", "DataVersion", "StableDataVersion",
273*4a64e381SAndroid Build Coastguard Worker        "LeaderRouterId"
274*4a64e381SAndroid Build Coastguard Worker    ]
275*4a64e381SAndroid Build Coastguard Worker
276*4a64e381SAndroid Build Coastguard Worker    for key in leaderdata_expected_keys:
277*4a64e381SAndroid Build Coastguard Worker        assert (key in data)
278*4a64e381SAndroid Build Coastguard Worker        assert (type(data[key]) == int)
279*4a64e381SAndroid Build Coastguard Worker
280*4a64e381SAndroid Build Coastguard Worker    return True
281*4a64e381SAndroid Build Coastguard Worker
282*4a64e381SAndroid Build Coastguard Worker
283*4a64e381SAndroid Build Coastguard Workerdef node_num_of_router_check(data):
284*4a64e381SAndroid Build Coastguard Worker    assert data is not None
285*4a64e381SAndroid Build Coastguard Worker
286*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == int)
287*4a64e381SAndroid Build Coastguard Worker
288*4a64e381SAndroid Build Coastguard Worker    return True
289*4a64e381SAndroid Build Coastguard Worker
290*4a64e381SAndroid Build Coastguard Worker
291*4a64e381SAndroid Build Coastguard Workerdef node_ext_panid_check(data):
292*4a64e381SAndroid Build Coastguard Worker    assert data is not None
293*4a64e381SAndroid Build Coastguard Worker
294*4a64e381SAndroid Build Coastguard Worker    assert (type(data) == str)
295*4a64e381SAndroid Build Coastguard Worker
296*4a64e381SAndroid Build Coastguard Worker    return True
297*4a64e381SAndroid Build Coastguard Worker
298*4a64e381SAndroid Build Coastguard Worker
299*4a64e381SAndroid Build Coastguard Workerdef node_test(thread_num):
300*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node"
301*4a64e381SAndroid Build Coastguard Worker
302*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
303*4a64e381SAndroid Build Coastguard Worker
304*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
305*4a64e381SAndroid Build Coastguard Worker
306*4a64e381SAndroid Build Coastguard Worker    valid = [node_check(data) for data in response_data].count(True)
307*4a64e381SAndroid Build Coastguard Worker
308*4a64e381SAndroid Build Coastguard Worker    print(" /node : all {}, valid {} ".format(thread_num, valid))
309*4a64e381SAndroid Build Coastguard Worker
310*4a64e381SAndroid Build Coastguard Worker
311*4a64e381SAndroid Build Coastguard Workerdef node_rloc_test(thread_num):
312*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/rloc"
313*4a64e381SAndroid Build Coastguard Worker
314*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
315*4a64e381SAndroid Build Coastguard Worker
316*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
317*4a64e381SAndroid Build Coastguard Worker
318*4a64e381SAndroid Build Coastguard Worker    valid = [node_rloc_check(data) for data in response_data].count(True)
319*4a64e381SAndroid Build Coastguard Worker
320*4a64e381SAndroid Build Coastguard Worker    print(" /node/rloc : all {}, valid {} ".format(thread_num, valid))
321*4a64e381SAndroid Build Coastguard Worker
322*4a64e381SAndroid Build Coastguard Worker
323*4a64e381SAndroid Build Coastguard Workerdef node_rloc16_test(thread_num):
324*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/rloc16"
325*4a64e381SAndroid Build Coastguard Worker
326*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
327*4a64e381SAndroid Build Coastguard Worker
328*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
329*4a64e381SAndroid Build Coastguard Worker
330*4a64e381SAndroid Build Coastguard Worker    valid = [node_rloc16_check(data) for data in response_data].count(True)
331*4a64e381SAndroid Build Coastguard Worker
332*4a64e381SAndroid Build Coastguard Worker    print(" /node/rloc16 : all {}, valid {} ".format(thread_num, valid))
333*4a64e381SAndroid Build Coastguard Worker
334*4a64e381SAndroid Build Coastguard Worker
335*4a64e381SAndroid Build Coastguard Workerdef node_ext_address_test(thread_num):
336*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/ext-address"
337*4a64e381SAndroid Build Coastguard Worker
338*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
339*4a64e381SAndroid Build Coastguard Worker
340*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
341*4a64e381SAndroid Build Coastguard Worker
342*4a64e381SAndroid Build Coastguard Worker    valid = [node_ext_address_check(data) for data in response_data].count(True)
343*4a64e381SAndroid Build Coastguard Worker
344*4a64e381SAndroid Build Coastguard Worker    print(" /node/ext-address : all {}, valid {} ".format(thread_num, valid))
345*4a64e381SAndroid Build Coastguard Worker
346*4a64e381SAndroid Build Coastguard Worker
347*4a64e381SAndroid Build Coastguard Workerdef node_state_test(thread_num):
348*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/state"
349*4a64e381SAndroid Build Coastguard Worker
350*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
351*4a64e381SAndroid Build Coastguard Worker
352*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
353*4a64e381SAndroid Build Coastguard Worker
354*4a64e381SAndroid Build Coastguard Worker    valid = [node_state_check(data) for data in response_data].count(True)
355*4a64e381SAndroid Build Coastguard Worker
356*4a64e381SAndroid Build Coastguard Worker    print(" /node/state : all {}, valid {} ".format(thread_num, valid))
357*4a64e381SAndroid Build Coastguard Worker
358*4a64e381SAndroid Build Coastguard Worker
359*4a64e381SAndroid Build Coastguard Workerdef node_network_name_test(thread_num):
360*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/network-name"
361*4a64e381SAndroid Build Coastguard Worker
362*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
363*4a64e381SAndroid Build Coastguard Worker
364*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
365*4a64e381SAndroid Build Coastguard Worker
366*4a64e381SAndroid Build Coastguard Worker    valid = [node_network_name_check(data) for data in response_data
367*4a64e381SAndroid Build Coastguard Worker             ].count(True)
368*4a64e381SAndroid Build Coastguard Worker
369*4a64e381SAndroid Build Coastguard Worker    print(" /node/network-name : all {}, valid {} ".format(thread_num, valid))
370*4a64e381SAndroid Build Coastguard Worker
371*4a64e381SAndroid Build Coastguard Worker
372*4a64e381SAndroid Build Coastguard Workerdef node_leader_data_test(thread_num):
373*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/leader-data"
374*4a64e381SAndroid Build Coastguard Worker
375*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
376*4a64e381SAndroid Build Coastguard Worker
377*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
378*4a64e381SAndroid Build Coastguard Worker
379*4a64e381SAndroid Build Coastguard Worker    valid = [node_leader_data_check(data) for data in response_data].count(True)
380*4a64e381SAndroid Build Coastguard Worker
381*4a64e381SAndroid Build Coastguard Worker    print(" /node/leader-data : all {}, valid {} ".format(thread_num, valid))
382*4a64e381SAndroid Build Coastguard Worker
383*4a64e381SAndroid Build Coastguard Worker
384*4a64e381SAndroid Build Coastguard Workerdef node_num_of_router_test(thread_num):
385*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/num-of-router"
386*4a64e381SAndroid Build Coastguard Worker
387*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
388*4a64e381SAndroid Build Coastguard Worker
389*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
390*4a64e381SAndroid Build Coastguard Worker
391*4a64e381SAndroid Build Coastguard Worker    valid = [node_num_of_router_check(data) for data in response_data
392*4a64e381SAndroid Build Coastguard Worker             ].count(True)
393*4a64e381SAndroid Build Coastguard Worker
394*4a64e381SAndroid Build Coastguard Worker    print(" /v1/node/num-of-router : all {}, valid {} ".format(thread_num, valid))
395*4a64e381SAndroid Build Coastguard Worker
396*4a64e381SAndroid Build Coastguard Worker
397*4a64e381SAndroid Build Coastguard Workerdef node_ext_panid_test(thread_num):
398*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/node/ext-panid"
399*4a64e381SAndroid Build Coastguard Worker
400*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
401*4a64e381SAndroid Build Coastguard Worker
402*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
403*4a64e381SAndroid Build Coastguard Worker
404*4a64e381SAndroid Build Coastguard Worker    valid = [node_ext_panid_check(data) for data in response_data].count(True)
405*4a64e381SAndroid Build Coastguard Worker
406*4a64e381SAndroid Build Coastguard Worker    print(" /node/ext-panid : all {}, valid {} ".format(thread_num, valid))
407*4a64e381SAndroid Build Coastguard Worker
408*4a64e381SAndroid Build Coastguard Worker
409*4a64e381SAndroid Build Coastguard Workerdef diagnostics_test(thread_num):
410*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/diagnostics"
411*4a64e381SAndroid Build Coastguard Worker
412*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
413*4a64e381SAndroid Build Coastguard Worker
414*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_data_from_url, url, thread_num, response_data)
415*4a64e381SAndroid Build Coastguard Worker
416*4a64e381SAndroid Build Coastguard Worker    valid = 0
417*4a64e381SAndroid Build Coastguard Worker    has_content = 0
418*4a64e381SAndroid Build Coastguard Worker    for data in response_data:
419*4a64e381SAndroid Build Coastguard Worker
420*4a64e381SAndroid Build Coastguard Worker        ret = diagnostics_check(data)
421*4a64e381SAndroid Build Coastguard Worker        if ret == 1:
422*4a64e381SAndroid Build Coastguard Worker            valid += 1
423*4a64e381SAndroid Build Coastguard Worker        elif ret == 2:
424*4a64e381SAndroid Build Coastguard Worker            valid += 1
425*4a64e381SAndroid Build Coastguard Worker            has_content += 1
426*4a64e381SAndroid Build Coastguard Worker
427*4a64e381SAndroid Build Coastguard Worker    print(" /diagnostics : all {}, has content {}, valid {} ".format(
428*4a64e381SAndroid Build Coastguard Worker        thread_num, has_content, valid))
429*4a64e381SAndroid Build Coastguard Worker
430*4a64e381SAndroid Build Coastguard Worker
431*4a64e381SAndroid Build Coastguard Workerdef error_test(thread_num):
432*4a64e381SAndroid Build Coastguard Worker    url = rest_api_addr + "/hello"
433*4a64e381SAndroid Build Coastguard Worker
434*4a64e381SAndroid Build Coastguard Worker    response_data = [None] * thread_num
435*4a64e381SAndroid Build Coastguard Worker
436*4a64e381SAndroid Build Coastguard Worker    create_multi_thread(get_error_from_url, url, thread_num, response_data)
437*4a64e381SAndroid Build Coastguard Worker
438*4a64e381SAndroid Build Coastguard Worker    valid = [error404_check(data) for data in response_data].count(True)
439*4a64e381SAndroid Build Coastguard Worker
440*4a64e381SAndroid Build Coastguard Worker    print(" /v1/hello : all {}, valid {} ".format(thread_num, valid))
441*4a64e381SAndroid Build Coastguard Worker
442*4a64e381SAndroid Build Coastguard Worker
443*4a64e381SAndroid Build Coastguard Workerdef main():
444*4a64e381SAndroid Build Coastguard Worker    node_test(200)
445*4a64e381SAndroid Build Coastguard Worker    node_rloc_test(200)
446*4a64e381SAndroid Build Coastguard Worker    node_rloc16_test(200)
447*4a64e381SAndroid Build Coastguard Worker    node_ext_address_test(200)
448*4a64e381SAndroid Build Coastguard Worker    node_state_test(200)
449*4a64e381SAndroid Build Coastguard Worker    node_network_name_test(200)
450*4a64e381SAndroid Build Coastguard Worker    node_leader_data_test(200)
451*4a64e381SAndroid Build Coastguard Worker    node_num_of_router_test(200)
452*4a64e381SAndroid Build Coastguard Worker    node_ext_panid_test(200)
453*4a64e381SAndroid Build Coastguard Worker    diagnostics_test(20)
454*4a64e381SAndroid Build Coastguard Worker    error_test(10)
455*4a64e381SAndroid Build Coastguard Worker
456*4a64e381SAndroid Build Coastguard Worker    return 0
457*4a64e381SAndroid Build Coastguard Worker
458*4a64e381SAndroid Build Coastguard Worker
459*4a64e381SAndroid Build Coastguard Workerif __name__ == '__main__':
460*4a64e381SAndroid Build Coastguard Worker    exit(main())
461