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