xref: /aosp_15_r20/external/autotest/client/cros/cellular/labconfig_data.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Lint as: python2, python3
2*9c5db199SXin Li# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
3*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
4*9c5db199SXin Li# found in the LICENSE file.
5*9c5db199SXin Li
6*9c5db199SXin Li"""Configuration for cell emulator tests."""
7*9c5db199SXin Lifrom __future__ import absolute_import
8*9c5db199SXin Lifrom __future__ import division
9*9c5db199SXin Lifrom __future__ import print_function
10*9c5db199SXin Li
11*9c5db199SXin Liimport copy, unittest
12*9c5db199SXin Liimport six
13*9c5db199SXin Li
14*9c5db199SXin LiCELLS = {}
15*9c5db199SXin Li
16*9c5db199SXin Li# TODO(rochberg):  Need some way to subset this list for long/short tests
17*9c5db199SXin Li
18*9c5db199SXin LiLTE_TECHNOLOGIES = ['LTE']
19*9c5db199SXin LiGENERIC_GSM_TECHNOLOGIES = ['GPRS', 'EGPRS', 'WCDMA', 'HSDPA', 'HSUPA',
20*9c5db199SXin Li                            'HSDUPA', 'HSPA_PLUS']
21*9c5db199SXin Li
22*9c5db199SXin LiICERA_TECHNOLOGIES = GENERIC_GSM_TECHNOLOGIES[:]
23*9c5db199SXin LiICERA_TECHNOLOGIES.remove('HSPA_PLUS')
24*9c5db199SXin Li
25*9c5db199SXin LiGOBI_3000_TECHNOLOGIES = GENERIC_GSM_TECHNOLOGIES + ['CDMA_2000', 'EVDO_1X']
26*9c5db199SXin Li
27*9c5db199SXin LiGOBI_2000_TECHNOLOGIES = GOBI_3000_TECHNOLOGIES[:]
28*9c5db199SXin LiGOBI_2000_TECHNOLOGIES.remove('HSPA_PLUS')
29*9c5db199SXin Li
30*9c5db199SXin Li# TODO(thieule): Make HSPA_PLUS work with autotest (crosbug.com/32621).
31*9c5db199SXin LiGENERIC_GSM_TECHNOLOGIES.remove('HSPA_PLUS')
32*9c5db199SXin LiGOBI_3000_TECHNOLOGIES.remove('HSPA_PLUS')
33*9c5db199SXin Li
34*9c5db199SXin Lidef combine_trees(a_original, b):
35*9c5db199SXin Li    """Combines two dict-of-dict trees, favoring the second."""
36*9c5db199SXin Li    try:
37*9c5db199SXin Li        a = copy.copy(a_original)
38*9c5db199SXin Li        for (key_b, value_b) in six.iteritems(b):
39*9c5db199SXin Li            a[key_b] = combine_trees(a.get(key_b, None), value_b)
40*9c5db199SXin Li    except AttributeError:  # one argument wasn't a dict.  B wins.
41*9c5db199SXin Li        return b
42*9c5db199SXin Li    return a
43*9c5db199SXin Li
44*9c5db199SXin Li
45*9c5db199SXin Lidef MakeDefaultCallBoxConfig(specifics):
46*9c5db199SXin Li    base = {
47*9c5db199SXin Li            "type": "8960-prologix",
48*9c5db199SXin Li            # IP addresses and netmask for the air-side of the
49*9c5db199SXin Li            # basestation network.
50*9c5db199SXin Li            "bs_addresses": [
51*9c5db199SXin Li                "192.168.2.2",
52*9c5db199SXin Li                "192.168.2.3"
53*9c5db199SXin Li                ],
54*9c5db199SXin Li            "bs_netmask": "255.255.0.0",
55*9c5db199SXin Li
56*9c5db199SXin Li            "gpib_adapter": {
57*9c5db199SXin Li                "gpib_address": 14,
58*9c5db199SXin Li                "ip_port": 1234
59*9c5db199SXin Li                },
60*9c5db199SXin Li            # DNS addresses for the UE.  You do not need a
61*9c5db199SXin Li            # working DNS server at this address, but you must
62*9c5db199SXin Li            # have a machine there to send ICMP Port
63*9c5db199SXin Li            # Unreachable messages, so the DNS lookups will
64*9c5db199SXin Li            # fail quickly)
65*9c5db199SXin Li            "ue_dns_addresses": [
66*9c5db199SXin Li                "192.168.2.254",
67*9c5db199SXin Li                "192.168.2.254"
68*9c5db199SXin Li                ],
69*9c5db199SXin Li            "ue_rf_addresses": [
70*9c5db199SXin Li                "192.168.2.4",
71*9c5db199SXin Li                "192.168.2.5"
72*9c5db199SXin Li                ]
73*9c5db199SXin Li            }
74*9c5db199SXin Li    return combine_trees(base, specifics)
75*9c5db199SXin Li
76*9c5db199SXin Lidef MakeDefaultPerfServer(specifics):
77*9c5db199SXin Li    rf_address = "192.168.2.254"
78*9c5db199SXin Li    base = {
79*9c5db199SXin Li        "rf_address": rf_address,
80*9c5db199SXin Li        "upload_url": "http://%s/upload" % (rf_address),
81*9c5db199SXin Li        "download_url_format_string": ("http://%s/download?size=%%(size)s" %
82*9c5db199SXin Li                                       rf_address),
83*9c5db199SXin Li        }
84*9c5db199SXin Li    return combine_trees(base, specifics)
85*9c5db199SXin Li
86*9c5db199SXin Li
87*9c5db199SXin LiCELLS['cam'] = {
88*9c5db199SXin Li    "basestations": [
89*9c5db199SXin Li        MakeDefaultCallBoxConfig({
90*9c5db199SXin Li            "gpib_adapter": {
91*9c5db199SXin Li                "address": "172.31.206.171",
92*9c5db199SXin Li                },
93*9c5db199SXin Li            })
94*9c5db199SXin Li        ],
95*9c5db199SXin Li    "duts": [
96*9c5db199SXin Li        {
97*9c5db199SXin Li            "address": "172.31.206.145",
98*9c5db199SXin Li            "name": "ad-hoc-usb",
99*9c5db199SXin Li            "technologies": GOBI_2000_TECHNOLOGIES,
100*9c5db199SXin Li            "rf_switch_port": 3,
101*9c5db199SXin Li            },
102*9c5db199SXin Li        {
103*9c5db199SXin Li            "address": "172.31.206.146",
104*9c5db199SXin Li            "name": "y3300",
105*9c5db199SXin Li            "technologies": GENERIC_GSM_TECHNOLOGIES,
106*9c5db199SXin Li            "rf_switch_port": 0,
107*9c5db199SXin Li            }
108*9c5db199SXin Li        ],
109*9c5db199SXin Li
110*9c5db199SXin Li    "perfserver": MakeDefaultPerfServer({
111*9c5db199SXin Li        "name": "perfserver-cam",
112*9c5db199SXin Li        "address": "172.31.206.153",
113*9c5db199SXin Li        "ethernet_mac": "e8:11:32:cb:bb:95 ",
114*9c5db199SXin Li        }),
115*9c5db199SXin Li
116*9c5db199SXin Li    "http_connectivity": {
117*9c5db199SXin Li        # "url" should point to a URL that fetches a page small enough
118*9c5db199SXin Li        # to be comfortably kept in memory.  If
119*9c5db199SXin Li        # "url_required_contents" is present, it points to a string
120*9c5db199SXin Li        # that must be present in the the fetched data.
121*9c5db199SXin Li
122*9c5db199SXin Li        "url": "http://192.168.2.254/connectivity/index.html",
123*9c5db199SXin Li        "url_required_contents": "Chromium",
124*9c5db199SXin Li        },
125*9c5db199SXin Li    "rf_switch": {
126*9c5db199SXin Li        "type": "ether_io",
127*9c5db199SXin Li        "address":  "172.31.206.172",
128*9c5db199SXin Li        "ethernet_mac": "00:11:ba:02:12:83",
129*9c5db199SXin Li        }
130*9c5db199SXin Li    }
131*9c5db199SXin Li
132*9c5db199SXin LiCELLS['mtv'] = {
133*9c5db199SXin Li    "basestations": [
134*9c5db199SXin Li        MakeDefaultCallBoxConfig({
135*9c5db199SXin Li            "gpib_adapter": {
136*9c5db199SXin Li              "type":'8960',
137*9c5db199SXin Li              "address": "172.22.50.118",
138*9c5db199SXin Li              "ethernet_mac": "00:21:69:01:06:46",
139*9c5db199SXin Li              }
140*9c5db199SXin Li            }),
141*9c5db199SXin Li        MakeDefaultCallBoxConfig({
142*9c5db199SXin Li          "type":'pxt',
143*9c5db199SXin Li          "gpib_adapter": {
144*9c5db199SXin Li              "address": "172.22.50.244",
145*9c5db199SXin Li              "ethernet_mac": "00:21:69:01:0a:11",
146*9c5db199SXin Li              # ddns-hostname "chromeos1-rack1-pxt-gpib";
147*9c5db199SXin Li            }
148*9c5db199SXin Li        })
149*9c5db199SXin Li        ],
150*9c5db199SXin Li
151*9c5db199SXin Li
152*9c5db199SXin Li#chromeos1-rack1-pxt / 172.22.50.243
153*9c5db199SXin Li#chromeos1-rack2-rfswitch2 / 172.22.50.229
154*9c5db199SXin Li#pixel 172.22.50.86 chromeos1-rack2-host6
155*9c5db199SXin Li
156*9c5db199SXin Li    "duts": [
157*9c5db199SXin Li         {
158*9c5db199SXin Li             "address": "172.22.50.86",
159*9c5db199SXin Li             "ethernet_mac": "00:0e:c6:89:9d:18",
160*9c5db199SXin Li             "name": "link-lte",
161*9c5db199SXin Li             "technologies": LTE_TECHNOLOGIES,
162*9c5db199SXin Li             "location": "rack2-host6",
163*9c5db199SXin Li             "rf_switch_port": 1,
164*9c5db199SXin Li             },
165*9c5db199SXin Li        {
166*9c5db199SXin Li            "address": "172.22.50.187",
167*9c5db199SXin Li            "ethernet_mac": "00:00:00:00:08:4b",
168*9c5db199SXin Li            "name": "alex-gobi-2000",
169*9c5db199SXin Li            "technologies": GOBI_2000_TECHNOLOGIES,
170*9c5db199SXin Li            "location": "rack2-host0",
171*9c5db199SXin Li            "rf_switch_port": 0,
172*9c5db199SXin Li            },
173*9c5db199SXin Li        {
174*9c5db199SXin Li            "address": "172.22.50.85",
175*9c5db199SXin Li            "ethernet_mac": "00:00:00:00:00:c8",
176*9c5db199SXin Li            "name": "alex-gobi-3000",
177*9c5db199SXin Li            "technologies": GOBI_3000_TECHNOLOGIES,
178*9c5db199SXin Li            "location": "rack2-host4",
179*9c5db199SXin Li            "rf_switch_port": 1,
180*9c5db199SXin Li            },
181*9c5db199SXin Li        {
182*9c5db199SXin Li            "address": "172.22.50.191",
183*9c5db199SXin Li            "ethernet_mac": "c0:c1:c0:4b:d7:4f",
184*9c5db199SXin Li            "name": "alex-y3300",
185*9c5db199SXin Li            "technologies": ICERA_TECHNOLOGIES,
186*9c5db199SXin Li            "location": "rack2-host1",
187*9c5db199SXin Li            "rf_switch_port": 3,
188*9c5db199SXin Li            },
189*9c5db199SXin Li        {
190*9c5db199SXin Li            "address": "172.22.50.89",
191*9c5db199SXin Li            "ethernet_mac": "58:6d:8f:50:ae:55",
192*9c5db199SXin Li            "name": "alex-y3400",
193*9c5db199SXin Li            "technologies": ICERA_TECHNOLOGIES,
194*9c5db199SXin Li            "location": "rack2-host5",
195*9c5db199SXin Li            "rf_switch_port": 2,
196*9c5db199SXin Li            },
197*9c5db199SXin Li        ],
198*9c5db199SXin Li
199*9c5db199SXin Li    "perfserver": MakeDefaultPerfServer({
200*9c5db199SXin Li        "name": "perfserver-mtv",
201*9c5db199SXin Li        "address": "172.22.50.246",
202*9c5db199SXin Li        "ethernet_mac": "c4:54:44:2a:1a:8b",
203*9c5db199SXin Li        }),
204*9c5db199SXin Li
205*9c5db199SXin Li    # Used for tests that check web connectivity
206*9c5db199SXin Li    "http_connectivity": {
207*9c5db199SXin Li        "url": "http://192.168.2.254/connectivity/index.html",
208*9c5db199SXin Li        "url_required_contents": "Chromium",
209*9c5db199SXin Li        },
210*9c5db199SXin Li    "rf_switch": {
211*9c5db199SXin Li        "type": "ether_io",
212*9c5db199SXin Li        "name": "rf-switch-1-mtv",
213*9c5db199SXin Li        "ethernet_mac": "00:11:BA:02:12:82",
214*9c5db199SXin Li        "address":  "172.22.50.88",
215*9c5db199SXin Li        }
216*9c5db199SXin Li    }
217*9c5db199SXin Li
218*9c5db199SXin Li
219*9c5db199SXin Liclass TestCombineTrees(unittest.TestCase):
220*9c5db199SXin Li    def test_simple(self):
221*9c5db199SXin Li        self.assertEqual({1:2, 3:4, 5:6},
222*9c5db199SXin Li                         combine_trees({1:2, 3:4}, {5:6}))
223*9c5db199SXin Li
224*9c5db199SXin Li    def test_override_simple(self):
225*9c5db199SXin Li        self.assertEqual({1:3},
226*9c5db199SXin Li                         combine_trees({1:2},{1:3}))
227*9c5db199SXin Li
228*9c5db199SXin Li    def test_join_nested(self):
229*9c5db199SXin Li        self.assertEqual({1:{2:3, 3:4}},
230*9c5db199SXin Li                         combine_trees({1:{2:3}},{1:{3:4}}))
231*9c5db199SXin Li
232*9c5db199SXin Li    def test_override_in_nested(self):
233*9c5db199SXin Li        self.assertEqual({1:{2:4}},
234*9c5db199SXin Li                         combine_trees({1:{2:3}},{1:{2:4}}))
235*9c5db199SXin Li
236*9c5db199SXin Li    def test_override_different_types(self):
237*9c5db199SXin Li        self.assertEqual({1:{2:4}},
238*9c5db199SXin Li                         combine_trees({1:'rhinoceros'},{1:{2:4}}))
239*9c5db199SXin Li        self.assertEqual({1:'rhinoceros'},
240*9c5db199SXin Li                         combine_trees({1:{2:4}},{1:'rhinoceros'}))
241*9c5db199SXin Li
242*9c5db199SXin Li    def test_two_level(self):
243*9c5db199SXin Li        self.assertEqual({1:{2:{3:4, 5:6}}},
244*9c5db199SXin Li                         combine_trees({1:{2:{3:4}}},{1:{2:{5:6}}}))
245*9c5db199SXin Li
246*9c5db199SXin Li    def test_none(self):
247*9c5db199SXin Li        self.assertEqual({1:None},
248*9c5db199SXin Li                         combine_trees({1:2}, {1:None}))
249*9c5db199SXin Li        self.assertEqual({1:None},
250*9c5db199SXin Li                         combine_trees({1:None}, {}))
251*9c5db199SXin Li        self.assertEqual({1:2},
252*9c5db199SXin Li                         combine_trees({1:None}, {1:2}))
253*9c5db199SXin Li
254*9c5db199SXin Li
255*9c5db199SXin Liif __name__ == '__main__':
256*9c5db199SXin Li    unittest.main()
257