Commit 2353770d authored by Joanne Hugé's avatar Joanne Hugé

software/ors: clean-up test_ors.py

parent bd5fa85f
...@@ -43,34 +43,14 @@ param_dict = { ...@@ -43,34 +43,14 @@ param_dict = {
'testing': True, 'testing': True,
'tx_gain': 17, 'tx_gain': 17,
'rx_gain': 17, 'rx_gain': 17,
'dl_earfcn': 36100,
'bandwidth': "10 MHz",
'enb_id': '0x17',
'pci': 250, 'pci': 250,
'tac': '0x1717', 'tac': '0x1717',
'root_sequence_index': '1', 'root_sequence_index': '1',
'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'},
'2001:db8::1': {'mme_addr': '2001:db8::1'},
},
'core_network_plmn': '00102', 'core_network_plmn': '00102',
'dl_nr_arfcn': 403500,
'nr_band': 34,
'nr_bandwidth': 50,
'ssb_nr_arfcn': 403520,
'rue_addr': '192.168.99.88', 'rue_addr': '192.168.99.88',
'n_antenna_dl': 2, 'n_antenna_dl': 2,
'n_antenna_ul': 2, 'n_antenna_ul': 2,
'inactivity_timer': 17, 'inactivity_timer': 17,
'gnb_id': '0x17',
'gnb_id_bits': 30,
'ssb_pos_bitmap': '10',
'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'},
},
'nr_handover_time_to_trigger': 40,
'nr_handover_a3_offset': 10,
'ncell_list': { 'ncell_list': {
'ORS1': { 'ORS1': {
'dl_earfcn': 40000, 'dl_earfcn': 40000,
...@@ -95,6 +75,49 @@ param_dict = { ...@@ -95,6 +75,49 @@ param_dict = {
'tac': 2 'tac': 2
}, },
}, },
}
enb_param_dict = {
'dl_earfcn': 36100,
'enb_id': '0x17',
'bandwidth': "10 MHz",
'plmn_list': {
'00101': {'attach_without_pdn': True, 'plmn': '00101', 'reserved': True},
'00102': {'attach_without_pdn': False, 'plmn': '00102', 'reserved': False},
},
'tdd_ul_dl_config': '[Configuration 6] 5ms 5UL 3DL (maximum uplink)',
'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'},
'2001:db8::1': {'mme_addr': '2001:db8::1'},
},
'ncell_list': {
'ORS1': {
'dl_earfcn': 40000,
'pci': 1,
'cell_id': '0x0000001',
'tac': 1
},
'ORS2': {
'dl_earfcn': 50000,
'pci': 2,
'cell_id': '0x0000001',
'tac': 2
},
},
}
gnb_param_dict = {
'dl_nr_arfcn': 403500,
'nr_band': 34,
'nr_bandwidth': 50,
'ssb_nr_arfcn': 403520,
'gnb_id': '0x17',
'gnb_id_bits': 30,
'ssb_pos_bitmap': '10',
'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'},
},
'nr_handover_time_to_trigger': 40,
'nr_handover_a3_offset': 10,
'xn_peers': { 'xn_peers': {
'2001:db8::1': { '2001:db8::1': {
'xn_addr': '2001:db8::1', 'xn_addr': '2001:db8::1',
...@@ -103,13 +126,26 @@ param_dict = { ...@@ -103,13 +126,26 @@ param_dict = {
'xn_addr': '2001:db8::2', 'xn_addr': '2001:db8::2',
}, },
}, },
} 'ncell_list': {
enb_param_dict = { 'ORS1': {
'plmn_list': { 'dl_nr_arfcn': 403500,
'00101': {'attach_without_pdn': True, 'plmn': '00101', 'reserved': True}, 'ssb_nr_arfcn': 403500,
'00102': {'attach_without_pdn': False, 'plmn': '00102', 'reserved': False}, 'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 34,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 519000,
'ssb_nr_arfcn': 519000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 38,
'tac': 2
},
}, },
'tdd_ul_dl_config': '[Configuration 6] 5ms 5UL 3DL (maximum uplink)',
} }
gnb_param_dict1 = { gnb_param_dict1 = {
'plmn_list': { 'plmn_list': {
...@@ -126,15 +162,27 @@ gnb_param_dict2 = { ...@@ -126,15 +162,27 @@ gnb_param_dict2 = {
'tdd_ul_dl_config': '5ms 6UL 3DL 10/2 (high uplink)', 'tdd_ul_dl_config': '5ms 6UL 3DL 10/2 (high uplink)',
} }
enb_param_dict.update(param_dict) enb_param_dict.update(param_dict)
gnb_param_dict1.update(gnb_param_dict)
gnb_param_dict1.update(param_dict) gnb_param_dict1.update(param_dict)
gnb_param_dict2.update(gnb_param_dict)
gnb_param_dict2.update(param_dict) gnb_param_dict2.update(param_dict)
def test_enb_conf(self): def load_yaml_conf(slap, name):
conf_file = glob.glob(os.path.join( conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'enb.cfg'))[0] slap.instance_directory, '*', 'etc', name + '.cfg'))[0]
return yamlpp_load(conf_file)
class TestENBParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(enb_param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "enb"
def test_enb_conf(self):
conf = load_yaml_conf(self.slap, 'enb')
conf = yamlpp_load(conf_file)
self.assertEqual(conf['tx_gain'], [enb_param_dict['tx_gain']] * enb_param_dict['n_antenna_dl']) self.assertEqual(conf['tx_gain'], [enb_param_dict['tx_gain']] * enb_param_dict['n_antenna_dl'])
self.assertEqual(conf['rx_gain'], [enb_param_dict['rx_gain']] * enb_param_dict['n_antenna_ul']) self.assertEqual(conf['rx_gain'], [enb_param_dict['rx_gain']] * enb_param_dict['n_antenna_ul'])
self.assertEqual(conf['cell_list'][0]['inactivity_timer'], enb_param_dict['inactivity_timer']) self.assertEqual(conf['cell_list'][0]['inactivity_timer'], enb_param_dict['inactivity_timer'])
...@@ -162,12 +210,18 @@ def test_enb_conf(self): ...@@ -162,12 +210,18 @@ def test_enb_conf(self):
self.assertEqual(p['cell_id'], int(conf_ncell['cell_id'], 16)) self.assertEqual(p['cell_id'], int(conf_ncell['cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac']) self.assertEqual(p['tac'], conf_ncell['tac'])
def test_gnb_conf1(self):
conf_file = glob.glob(os.path.join( class TestGNBParameters1(ORSTestCase):
self.slap.instance_directory, '*', 'etc', 'enb.cfg'))[0] @classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict1)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_gnb_conf(self):
conf = load_yaml_conf(self.slap, 'enb')
conf = yamlpp_load(conf_file)
self.assertEqual(conf['tx_gain'], [gnb_param_dict1['tx_gain']] * gnb_param_dict1['n_antenna_dl']) self.assertEqual(conf['tx_gain'], [gnb_param_dict1['tx_gain']] * gnb_param_dict1['n_antenna_dl'])
self.assertEqual(conf['rx_gain'], [gnb_param_dict1['rx_gain']] * gnb_param_dict1['n_antenna_ul']) self.assertEqual(conf['rx_gain'], [gnb_param_dict1['rx_gain']] * gnb_param_dict1['n_antenna_ul'])
self.assertEqual(conf['nr_cell_list'][0]['inactivity_timer'], gnb_param_dict1['inactivity_timer']) self.assertEqual(conf['nr_cell_list'][0]['inactivity_timer'], gnb_param_dict1['inactivity_timer'])
...@@ -205,12 +259,17 @@ def test_gnb_conf1(self): ...@@ -205,12 +259,17 @@ def test_gnb_conf1(self):
self.assertEqual(int(tdd_config['ul_slots']), 1) self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2) self.assertEqual(int(tdd_config['ul_symbols']), 2)
def test_gnb_conf2(self):
conf_file = glob.glob(os.path.join( class TestGNBParameters2(ORSTestCase):
self.slap.instance_directory, '*', 'etc', 'enb.cfg'))[0] @classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict2)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_gnb_conf(self):
conf = yamlpp_load(conf_file) conf = load_yaml_conf(self.slap, 'enb')
for p in conf['nr_cell_default']['plmn_list'][0]['nssai']: for p in conf['nr_cell_default']['plmn_list'][0]['nssai']:
sd = hex(p['sd']) sd = hex(p['sd'])
...@@ -224,55 +283,19 @@ def test_gnb_conf2(self): ...@@ -224,55 +283,19 @@ def test_gnb_conf2(self):
self.assertEqual(int(tdd_config['ul_slots']), 6) self.assertEqual(int(tdd_config['ul_slots']), 6)
self.assertEqual(int(tdd_config['ul_symbols']), 10) self.assertEqual(int(tdd_config['ul_symbols']), 10)
def test_mme_conf(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'mme.cfg'))[0]
conf = yamlpp_load(conf_file)
self.assertEqual(conf['plmn'], param_dict['core_network_plmn'])
def getSimParam(id=0): class TestCoreNetworkParameters(ORSTestCase):
return { @classmethod
'sim_algo': 'milenage', def getInstanceParameterDict(cls):
'imsi': '{0:015}'.format(1010000000000 + id), return {'_': json.dumps(param_dict)}
'opc': '000102030405060708090A0B0C0D0E0F', @classmethod
'amf': '0x9001', def getInstanceSoftwareType(cls):
'sqn': '000000000000', return "core-network"
'k': '00112233445566778899AABBCCDDEEFF', def test_mme_conf(self):
'impu': 'impu%s' % '{0:03}'.format(id),
'impi': 'impi%s@amarisoft.com' % '{0:03}'.format(id)
}
def test_sim_card(self, nb_sim_cards, fixed_ips, tun_network):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
conf = yamlpp_load(conf_file)
first_ip = netaddr.IPAddress(tun_network.first)
for i in range(nb_sim_cards):
params = getSimParam(i)
for n in "sim_algo imsi opc sqn impu impi".split():
self.assertEqual(conf['ue_db'][i][n], params[n], "%s doesn't match" % n)
self.assertEqual(conf['ue_db'][i]['K'], params['k'])
self.assertEqual(conf['ue_db'][i]['amf'], int(params['amf'], 16))
p = self.requestSlaveInstanceWithId(i).getConnectionParameterDict() conf = load_yaml_conf(self.slap, 'mme')
p = json.loads(p['_'])
self.assertIn('info', p)
if fixed_ips:
self.assertIn('ipv4', p)
if nb_sim_cards + 2 > tun_network.size:
self.assertEqual(p['ipv4'], "Too many SIM for the IPv4 network")
else:
ip = str(first_ip + 2 + i)
self.assertEqual(p['ipv4'], ip)
self.assertEqual(conf['ue_db'][i]['pdn_list'][0]['access_point_name'], "internet")
self.assertTrue(conf['ue_db'][i]['pdn_list'][0]['default'])
self.assertEqual(conf['ue_db'][i]['pdn_list'][0]['ipv4_addr'], ip)
self.assertEqual(conf['plmn'], param_dict['core_network_plmn'])
def test_monitor_gadget_url(self): def test_monitor_gadget_url(self):
parameters = json.loads(self.computer_partition.getConnectionParameterDict()['_']) parameters = json.loads(self.computer_partition.getConnectionParameterDict()['_'])
...@@ -291,45 +314,6 @@ def test_monitor_gadget_url(self): ...@@ -291,45 +314,6 @@ def test_monitor_gadget_url(self):
self.assertIn('<script src="g-chart.line.js"></script>', response.text) self.assertIn('<script src="g-chart.line.js"></script>', response.text)
self.assertIn('<script src="promise.gadget.js"></script>', response.text) self.assertIn('<script src="promise.gadget.js"></script>', response.text)
class TestENBParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(enb_param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "enb"
def test_enb_conf(self):
test_enb_conf(self)
class TestGNBParameters1(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict1)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_gnb_conf(self):
test_gnb_conf1(self)
class TestGNBParameters2(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict2)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_gnb_conf(self):
test_gnb_conf2(self)
class TestCoreNetworkParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "core-network"
def test_mme_conf(self):
test_mme_conf(self)
class TestENBMonitorGadgetUrl(ORSTestCase): class TestENBMonitorGadgetUrl(ORSTestCase):
@classmethod @classmethod
...@@ -371,6 +355,20 @@ class TestSimCard(ORSTestCase): ...@@ -371,6 +355,20 @@ class TestSimCard(ORSTestCase):
nb_sim_cards = 1 nb_sim_cards = 1
fixed_ips = False fixed_ips = False
tun_network = netaddr.IPNetwork('192.168.10.0/24') tun_network = netaddr.IPNetwork('192.168.10.0/24')
@classmethod
def getSimParam(cls, id=0):
return {
'sim_algo': 'milenage',
'imsi': '{0:015}'.format(1010000000000 + id),
'opc': '000102030405060708090A0B0C0D0E0F',
'amf': '0x9001',
'sqn': '000000000000',
'k': '00112233445566778899AABBCCDDEEFF',
'impu': 'impu%s' % '{0:03}'.format(id),
'impi': 'impi%s@amarisoft.com' % '{0:03}'.format(id)
}
@classmethod @classmethod
def requestDefaultInstance(cls, state='started'): def requestDefaultInstance(cls, state='started'):
...@@ -396,7 +394,7 @@ class TestSimCard(ORSTestCase): ...@@ -396,7 +394,7 @@ class TestSimCard(ORSTestCase):
@classmethod @classmethod
def requestSlaveInstanceWithId(cls, id=0): def requestSlaveInstanceWithId(cls, id=0):
software_url = cls.getSoftwareURL() software_url = cls.getSoftwareURL()
param_dict = getSimParam(id) param_dict = cls.getSimParam(id)
return cls.slap.request( return cls.slap.request(
software_release=software_url, software_release=software_url,
partition_reference="SIM-CARD-%s" % id, partition_reference="SIM-CARD-%s" % id,
...@@ -414,8 +412,33 @@ class TestSimCard(ORSTestCase): ...@@ -414,8 +412,33 @@ class TestSimCard(ORSTestCase):
f.seek(0) f.seek(0)
f.truncate() f.truncate()
json.dump(resource, f, indent=2) json.dump(resource, f, indent=2)
def test_sim_card(cls):
test_sim_card(cls, cls.nb_sim_cards, cls.fixed_ips, cls.tun_network) def test_sim_card(self):
conf = load_yaml_conf(self.slap, 'ue_db')
first_ip = netaddr.IPAddress(self.tun_network.first)
for i in range(self.nb_sim_cards):
params = self.getSimParam(i)
for n in "sim_algo imsi opc sqn impu impi".split():
self.assertEqual(conf['ue_db'][i][n], params[n], "%s doesn't match" % n)
self.assertEqual(conf['ue_db'][i]['K'], params['k'])
self.assertEqual(conf['ue_db'][i]['amf'], int(params['amf'], 16))
p = self.requestSlaveInstanceWithId(i).getConnectionParameterDict()
p = json.loads(p['_'])
self.assertIn('info', p)
if self.fixed_ips:
self.assertIn('ipv4', p)
if self.nb_sim_cards + 2 > self.tun_network.size:
self.assertEqual(p['ipv4'], "Too many SIM for the IPv4 network")
else:
ip = str(first_ip + 2 + i)
self.assertEqual(p['ipv4'], ip)
self.assertEqual(conf['ue_db'][i]['pdn_list'][0]['access_point_name'], "internet")
self.assertTrue(conf['ue_db'][i]['pdn_list'][0]['default'])
self.assertEqual(conf['ue_db'][i]['pdn_list'][0]['ipv4_addr'], ip)
class TestSimCardManySim(TestSimCard): class TestSimCardManySim(TestSimCard):
nb_sim_cards = 10 nb_sim_cards = 10
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment